AdMobのポリシー違反・広告制限への対応まとめ
旧バージョン、広告フレーム、UMP、テスト広告、インタースティシャル広告の対策
最終更新日:2026年6月26日
個人開発アプリにAdMob広告を入れていると、ポリシーセンターに「問題が検出されました」「広告配信が制限されています」と表示されることがあります。
この記事では、実際に発生したAdMobの指摘内容と、個人開発者が取れる対策をまとめます。
- 実際に受けたAdMobの指摘一覧
- 問題が検出されました(旧バージョン)
- 広告フレームのサイズ変更
- バナー広告とコンテンツの重なり
- コンテンツより広告が多いという指摘
- 無効なトラフィック・自己クリック・身内クリック
- データなし画面・エラー画面への広告表示
- レイアウトずれによる偶発的クリック
- 予期しないタイミングのインタースティシャル広告
- UMP SDKによる同意メッセージ対応
- テスト広告ID・テストデバイスの重要性
- Jetpack ComposeでAdViewを使う場合の注意点
- Firebase Remote Configなどの安全策
- 実際に受けたAdMobの指摘一覧
- 1. 「問題が検出されました(旧バージョン)」とは?
- 2. 「広告フレームのサイズを変えるように広告コードが変更されています」への対応
- 3. バナー広告とコンテンツが重なる問題
- 4. バナー広告が操作ボタンに近すぎる問題
- 5. 「パブリッシャーのコンテンツよりも広告や有料の宣伝用素材の方が多い」への対応
- 6. 無効なトラフィック(自己クリック・身内の応援クリック)
- 7. サイトの仕様:ナビゲーション(中身のない画面)
- 8. レイアウトのずれによる偶発的クリック(CLS的な問題)
- 9. 予期しないタイミングでの表示(インタースティシャル)
- 10. UMP(User Messaging Platform)SDKによる同意メッセージ対応
- 11. テスト広告ID・テストデバイスの重要性
- 12. Jetpack ComposeでAdViewを使う場合の注意点
- 13. AdMobの詳細画面では画像付きで指摘内容を確認できる
- 14. 実装方針の例
- 15. Kotlinでの制御イメージ
- 16. 個人開発者がやっておきたい安全策
- 17. まとめ
- 参考:AdMob公式ヘルプ・開発者向けドキュメント
実際に受けたAdMobの指摘一覧
まず、実際に確認した指摘や、個人開発アプリで発生しやすい指摘を一覧にします。
| 指摘内容 | 考えられる原因 | 対応方針 |
|---|---|---|
| 問題が検出されました(旧バージョン) | 古いバージョンのアプリから広告リクエストが送信されている | 現行版で修正し、ユーザーに最新版への更新を促す |
| 広告フレームのサイズを変えるように広告コードが変更されています | レイアウトで広告Viewに左右余白などを付け、広告サイズが変更されたと判断された可能性 | 広告View自体のサイズを変更せず、AdMobが指定するサイズで表示する |
| パブリッシャーのコンテンツよりも広告や有料の宣伝用素材の方が多い | バナー広告を表示したままインタースティシャル広告を出し、広告比率が高く見えた可能性 | インタースティシャル表示画面ではバナーを非表示にし、広告の連発を避ける |
| 無効なトラフィック | 自己クリック、身内による応援クリック、開発中の本番広告クリックなど | テスト広告ID・テストデバイスを使い、本番広告を自分でクリックしない |
| サイトの仕様:ナビゲーション | データなし画面、検索結果0件、通信エラー画面などに広告を表示している | コンテンツがない画面では広告をロードしない |
| レイアウトのずれによる偶発的クリック | 広告ロード後に画面が急に動き、ユーザーのタップ位置に広告が入る | 広告枠の高さをあらかじめ確保する |
| 予期しないタイミングでの表示 | ボタンタップ直後、起動直後、終了直前などにインタースティシャル広告を表示している | 画面遷移の区切りや処理完了後など、自然なタイミングで表示する |
| 同意メッセージ未導入 | UMP SDKを導入しておらず、必要地域のユーザーに適切な同意取得をしていない | AdMobの「プライバシーとメッセージ」で同意メッセージを作成し、UMP SDKを実装する |
ここでまとめている内容は、実際の運用で確認した指摘と、AdMob公式ヘルプの内容をもとにした個人開発者向けの対応メモです。
最終的な判断は、AdMobのポリシーセンターに表示されている指摘内容と公式ヘルプを確認してください。
1. 「問題が検出されました(旧バージョン)」とは?
AdMobのポリシーセンターに、次のような内容が表示されることがあります。
ご使用のアプリの旧バージョンでは広告配信が影響を受けています。
旧バージョンでは通常の広告配信を再開できません。
問題を解決して、現行バージョンに更新するようにアプリユーザーにおすすめください。
この文面の重要な点は、問題があるのは旧バージョンであり、旧バージョンの通常広告配信は再開できないと明記されていることです。
これは「現行版にも違反がある」という意味ではなく、古いバージョンを使い続けているユーザーの広告配信が制限されている状態です。
実際に運用して分かったこと
旧バージョンを利用しているユーザーがアプリを起動し、広告リクエストを送信すると、AdMob側で再び問題として検出されることがあります。
そのため、現行バージョンで問題を修正済みであっても、旧バージョンのユーザーが残っている限り、同様の指摘メールが定期的に届く場合があります。
開発者側からすべてのユーザーに強制的にアップデートさせることはできません。
自動更新をオフにしているユーザーや、古い端末で使い続けているユーザーがいる場合、旧バージョンからの広告リクエストを完全に止めることは難しいです。
- 現行バージョンで問題箇所を修正する
- Google Playに最新版を公開する
- リリースノートで更新を促す
- 今後のために、アプリ内でアップデート案内を出せる仕組みを入れておく
2. 「広告フレームのサイズを変えるように広告コードが変更されています」への対応
AdMobでは、広告を決められたサイズで正しく表示する必要があります。
バナー広告のレイアウトを調整するために、広告View自体へ左右の余白や幅の変更を加えると、広告フレームのサイズを変更したと判断される場合があります。
発生しやすい例
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp" />
このようにAdView自体に左右余白を付けると、広告の描画領域が狭くなり、AdMob側から「広告フレームのサイズを変えている」と見なされる可能性があります。
- AdView自体に左右余白を付ける
- 広告Viewの幅や高さを独自に変更する
- 広告を小さく見せるために親レイアウトで切り抜く
- 指定サイズより小さい領域に広告を押し込む
- AdView自体には余計なサイズ変更を加えない
- 広告の表示領域を十分に確保する
- 画面サイズに応じて適切なバナーサイズを使う
- 広告が小さく切り取られていないか実機で確認する
3. バナー広告とコンテンツが重なる問題
AdMobでは、広告がアプリのコンテンツに重なる実装は避ける必要があります。
バナー広告がコンテンツの上に浮いたり、スクロールするメニューや内容の上に表示されたりする実装は、ポリシー違反になり得ます。
- 問題文や選択肢の上にバナー広告が重なる
- スクロール領域の上に広告が固定表示される
- 画面下部の操作ボタンと広告が重なる
- 端末サイズによって広告がコンテンツを隠す
解決方法
- 広告専用の表示領域を確保する
- コンテンツ領域と広告領域を明確に分ける
- スクロールビューの中に無理に固定広告を重ねない
- 端末サイズが小さい場合は広告を非表示にする条件を入れる
- 成績データがない画面など、コンテンツが成立していない画面では広告を出さない
4. バナー広告が操作ボタンに近すぎる問題
バナー広告が「次へ」「戻る」「解答する」などの操作ボタンに近すぎると、誤クリックを誘発する可能性があります。
特に資格試験アプリでは、問題文、選択肢、解説、前へ・次へボタンなど、ユーザーがタップする要素が多くなります。
- 「次へ」ボタンのすぐ下にバナー広告
- 選択肢リストの途中にバナー広告
- 画面下部のメニューボタンとバナー広告が密着
- スクロール中に指が通る位置に広告がある
- トップ画面やメニュー画面など、操作頻度が比較的低い場所に表示する
- 問題演習画面ではバナー広告を出さない
- 成績一覧など、ユーザーが落ち着いて閲覧する画面に限定する
- 広告の上下に余白を入れる
5. 「パブリッシャーのコンテンツよりも広告や有料の宣伝用素材の方が多い」への対応
AdMobでは、アプリの主役はユーザー向けのコンテンツであり、広告がコンテンツより多く見える構成は避ける必要があります。
実際に運用している中で、次のような構成ではこの指摘を受ける可能性があると感じました。
問題画面にバナー広告を表示
↓
一定条件でインタースティシャル広告を表示
↓
ユーザーから見ると、バナー広告+全画面広告が続けて表示される
Googleが「バナー広告とインタースティシャル広告の併用」を一律に禁止しているわけではありません。
しかし、バナー広告を表示したままインタースティシャル広告を出す仕様だと、画面上の広告比率が高くなり、結果としてこの指摘につながる可能性があります。
解決方法
- インタースティシャル広告を表示する画面では、バナー広告を非表示にする
- 問題演習中はバナー広告を表示しない
- トップ画面や成績画面など、広告表示に向いた画面へバナー広告を寄せる
- 短時間で広告が連続表示されないようにする
- 1セッション内の広告表示回数を抑える
6. 無効なトラフィック(自己クリック・身内の応援クリック)
AdMobで非常に注意したいのが、無効なトラフィックです。
自分で広告をクリックする、家族や友人が応援のつもりで広告を何度もクリックする、開発中に本番広告IDのままタップ確認する、といった行為はリスクがあります。
- 開発中の実機確認で本番広告をクリックする
- 家族や友人に「広告を押して応援して」と頼む
- 同じ端末・同じIPから短時間に何度も広告クリックが発生する
- ボタン近くの広告により、意図しないクリックが大量に発生する
解決方法
- 開発中・修正確認中は必ずテスト広告IDを使用する
- 自分の端末をAdMobのテストデバイスとして登録する
- 本番広告を自分でクリックしない
- 身内や知人に広告クリックを依頼しない
- 広告が操作ボタンの近くに来ないようにする
アプリ側から「広告がクリックされたか」を完全に安全に判定して、クリック後に広告枠を一定時間非表示にするような制御は、実装方法や広告SDKの仕様によって難しい場合があります。
まず優先すべきなのは、誤クリックが起きにくいレイアウトにすることと、開発中に本番広告を触らないことです。
7. サイトの仕様:ナビゲーション(中身のない画面)
AdMobでは、ユーザーが期待するコンテンツが存在しない画面や、移動が困難な画面に広告が表示されていると、問題になる場合があります。
発生しやすい例
- 検索結果が0件の画面にバナー広告だけが表示されている
- 成績データがない画面に広告が表示されている
- 通信エラー画面に広告が表示されている
- 「データがありません」という文字だけの画面に広告が出ている
解決方法
コンテンツがない場合は、広告を非表示にするだけでなく、広告のロード処理自体をスキップする方が安全です。
if (scoreList.isEmpty()) {
adView.visibility = View.GONE
emptyMessage.visibility = View.VISIBLE
// adView.loadAd(adRequest) は呼ばない
} else {
emptyMessage.visibility = View.GONE
adView.visibility = View.VISIBLE
adView.loadAd(adRequest)
}
8. レイアウトのずれによる偶発的クリック(CLS的な問題)
WebではCumulative Layout Shift(CLS)という言葉がありますが、アプリでも似たような問題が起こります。
広告の読み込み後に画面が急に動くと、ユーザーがボタンを押そうとした瞬間に広告がその位置へ入り込み、偶発的クリックの原因になります。
発生しやすい例
<com.google.android.gms.ads.AdView
android:layout_width="match_parent"
android:layout_height="wrap_content" />
wrap_content のまま広告を読み込むと、広告ロード完了後に高さが確定し、画面のコンテンツが押し下げられる場合があります。
解決方法
広告枠の高さをあらかじめ確保し、広告ロード前後で画面がガタつかないようにします。
<FrameLayout
android:id="@+id/adContainer"
android:layout_width="match_parent"
android:layout_height="50dp">
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="50dp" />
</FrameLayout>
広告を表示するなら、最初からその分のスペースを確保しておく。
表示後に画面が動く設計は避ける。
9. 予期しないタイミングでの表示(インタースティシャル)
インタースティシャル広告は全画面広告なので、表示タイミングを間違えるとユーザー体験を大きく損ないます。
起動直後、終了直前、ボタンタップ直後などは特に注意が必要です。
- アプリ起動直後にインタースティシャル広告を出す
- アプリ終了直前に広告を出す
- 「次へ」ボタンを押した瞬間に広告を出す
- 広告を閉じた直後に次の広告を出す
- ユーザーが入力中・解答中に広告を出す
資格試験アプリで起こりやすい例
10問目を解答
↓
10問ごとのインタースティシャル広告
↓
結果画面へ移動
↓
テスト終了時のインタースティシャル広告
このような流れになると、ユーザーから見ると短時間で広告が連続表示されます。
たとえ意図的でなくても、AdMob側からは「広告が多すぎる」「操作を妨げている」と判断される可能性があります。
解決方法
- 広告は画面の「切り替え中」ではなく、自然な区切りで表示する
- 保存完了後、採点完了後、ステージクリア後など、処理が一段落したタイミングにする
- 短いテストでは終了時広告だけにする
- 10問ごとの広告とテスト終了時広告が重ならないようにする
- 前回広告表示から一定時間が経過していない場合はスキップする
・10問以上解いた
・前回広告表示から60秒以上経過している
・最後の問題ではない
・直前にインタースティシャル広告を表示していない
・ユーザーが問題を解いている最中ではない
10. UMP(User Messaging Platform)SDKによる同意メッセージ対応
AdMob運用では、広告の配置だけでなく、プライバシー同意の取得も重要です。
Googleは、アプリユーザーから同意を取得するために、User Messaging Platform(UMP)SDKの導入を案内しています。
特に、欧州経済領域(EEA)、英国、スイスなどのユーザーに広告を配信する場合、GDPRなどの規制対応として同意メッセージが必要になります。
日本向けアプリであっても、海外ユーザーが利用する可能性がある場合や、Googleの要件変更に備える意味で、UMP SDKの導入を検討しておくと安全です。
対応手順の概要
- AdMob管理画面の「プライバシーとメッセージ」を開く
- 欧州規制メッセージなど、必要な同意メッセージを作成する
- アプリにUMP SDKを導入する
- アプリ起動時などに同意状態を確認する
- 必要な場合だけ同意フォームを表示する
UMP未導入が直ちにすべてのアプリで停止につながるとは限りませんが、現在のAdMob運用ではプライバシー同意対応は避けて通れません。
広告配置の修正とあわせて、同意メッセージの導入状況も確認しておきましょう。
11. テスト広告ID・テストデバイスの重要性
AdMobの修正確認では、必ずテスト広告IDまたはテストデバイスを使います。
本番広告IDのまま自分で広告をクリックすると、無効なトラフィックとしてアカウントに悪影響が出る可能性があります。
- 本番広告IDのまま実機でクリック確認する
- 自分の広告を収益確認目的でクリックする
- 家族や知人に広告クリックを依頼する
- テスト端末登録をせずに本番広告を何度も表示・タップする
- Google公式のテスト広告ユニットIDを使う
- AdMob管理画面で自分の端末をテストデバイスに登録する
- 公開前に本番広告IDへ戻す
- メディエーションを使っている場合は、各広告ネットワーク側でもテスト設定を確認する
修正検証中は「広告が表示されるか」だけを確認したくなりますが、本番広告を自分で触るのは危険です。
開発中・デバッグ中・審査前の確認では、必ずテスト広告を使いましょう。
12. Jetpack ComposeでAdViewを使う場合の注意点
近年のAndroid開発では、XMLレイアウトからJetpack Composeへ移行するケースが増えています。
AdMobのAdViewは従来のViewなので、Compose内で使う場合は AndroidView でラップします。
Composeでの基本例
@Composable
fun BannerAd(
modifier: Modifier = Modifier,
adUnitId: String,
showAd: Boolean
) {
if (!showAd) return
AndroidView(
modifier = modifier
.fillMaxWidth()
.height(50.dp),
factory = { context ->
AdView(context).apply {
setAdSize(AdSize.BANNER)
this.adUnitId = adUnitId
loadAd(AdRequest.Builder().build())
}
}
)
}
Recomposition(再描画)時の注意点
Composeでは状態が変わるたびに再描画が発生します。
そのたびにAdViewを作り直したり、何度も loadAd() を呼んだりすると、広告リクエストが不自然に増える可能性があります。
- RecompositionのたびにAdViewを作り直す
- 状態変更のたびに何度もloadAd()を呼ぶ
- 広告枠の高さを確保せず、広告読み込み後に画面が動く
- コンテンツがない画面でもComposable内で広告をロードする
rememberを使う例
@Composable
fun RememberedBannerAd(
adUnitId: String,
showAd: Boolean
) {
val context = LocalContext.current
val adView = remember {
AdView(context).apply {
setAdSize(AdSize.BANNER)
this.adUnitId = adUnitId
loadAd(AdRequest.Builder().build())
}
}
if (showAd) {
AndroidView(
modifier = Modifier
.fillMaxWidth()
.height(50.dp),
factory = { adView }
)
}
}
広告Viewは「状態が変わるたびに作るもの」ではなく、「必要なタイミングで作り、画面上では安定した枠に表示するもの」と考えると安全です。
13. AdMobの詳細画面では画像付きで指摘内容を確認できる
AdMobのポリシーセンターでは、指摘内容の詳細画面に、問題となった画面のスクリーンショットが表示されることがあります。
文章だけでは原因が分かりにくい場合でも、画像を見ることで「どの画面のどの広告配置が問題なのか」を確認できます。
スクリーンショットを表示するボタンは小さく、見落としやすいです。
指摘内容の文章だけを読んで判断せず、詳細画面の画像も必ず確認することをおすすめします。
バナー広告がコンテンツに重なっている場合や、広告が操作ボタンに近い場合、画像を見ることで修正箇所を特定しやすくなります。
AdMobの指摘は抽象的な文言で表示されることも多いため、スクリーンショットの確認は非常に重要です。
14. 実装方針の例
資格試験アプリの場合、以下のように広告表示場所を整理すると安全寄りです。
| 画面 | バナー広告 | インタースティシャル広告 | 理由 |
|---|---|---|---|
| トップ画面 | 表示してもよい | 原則なし | 起動直後の全画面広告は避けたい |
| 問題演習画面 | 非表示推奨 | 一定問題数ごと、または区切りのみ | 選択肢やボタンとの誤クリックを避ける |
| テスト終了直前 | 非表示推奨 | 表示するなら1回のみ | 10問ごと広告との連発に注意 |
| 成績画面 | データがある場合のみ表示 | 原則なし | 閲覧画面なのでバナー向き |
| エラー画面・データなし画面 | 非表示 | 非表示 | コンテンツがない画面の広告は避ける |
15. Kotlinでの制御イメージ
実際のコードはアプリ構成によって変わりますが、考え方としては次のようになります。
最後の問題では10問ごと広告を出さない
if (isLastQuestion) {
// 最後の問題では途中広告を出さず、結果画面へ進む
showResult()
} else if (answeredCount % 10 == 0) {
showInterstitialIfAllowed()
} else {
showNextQuestion()
}
前回広告から一定時間が経っている場合のみ表示
private var lastInterstitialTime: Long = 0L
fun canShowInterstitial(): Boolean {
val now = System.currentTimeMillis()
val interval = 60 * 1000L // 60秒
return now - lastInterstitialTime >= interval
}
fun showInterstitialIfAllowed() {
if (!canShowInterstitial()) {
showNextQuestion()
return
}
// ここでインタースティシャル広告を表示
lastInterstitialTime = System.currentTimeMillis()
}
成績データがない場合はバナーを出さない
if (scoreList.isEmpty()) {
adView.visibility = View.GONE
emptyMessage.visibility = View.VISIBLE
// adView.loadAd(adRequest) は呼ばない
} else {
emptyMessage.visibility = View.GONE
adView.visibility = View.VISIBLE
adView.loadAd(adRequest)
}
インタースティシャル表示時はバナーを非表示にする
fun showInterstitial() {
adView.visibility = View.GONE
interstitialAd?.show(this)
// 広告を閉じたあと、必要な画面でだけバナーを再表示する
}
16. 個人開発者がやっておきたい安全策
今後のために、アプリ起動時に最低バージョンをチェックし、古いバージョンにはアップデート案内を出せる仕組みを入れておく。
インタースティシャル広告は前回表示から一定時間を空ける。広告を閉じた直後に次の広告を出さない。
問題演習中やタップ頻度の高い画面では広告を控え、トップ画面や成績画面などに寄せる。
成績データなし、エラー画面、検索結果0件など、コンテンツが薄い画面では広告をロードしない。
全画面広告を表示する場面では、バナー広告を非表示にして広告比率が高く見えないようにする。
開発中・修正確認中は必ずテスト広告IDやテストデバイスを使い、本番広告を自分でクリックしない。
AdMobの「プライバシーとメッセージ」で同意メッセージを作成し、アプリ側でUMP SDKを使って同意フローを実装する。
Firebase Remote Configなどを使い、ポリシー警告が来たときにアプリ更新なしで広告表示を停止できるようにしておく。
AdMobのみだと制限時に収益が止まるため、他社広告や買い切り版、アプリ内課金なども検討する。
小さい端末、横画面、文字サイズ変更時に広告がコンテンツやボタンと重ならないか確認する。
Firebase Remote Configで広告を止める考え方
AdMobの指摘が来たとき、アプリを修正してストアへ公開しても、ユーザーが更新するまで反映されません。
そのため、広告表示のオン・オフをリモートで切り替えられる仕組みがあると便利です。
val showAds = remoteConfig.getBoolean("show_ads")
if (showAds) {
adView.visibility = View.VISIBLE
adView.loadAd(adRequest)
} else {
adView.visibility = View.GONE
}
これにより、万が一ポリシー警告が来た場合でも、アプリのアップデートを待たずに広告表示を一時停止できます。
特に個人開発者にとっては、アカウント全体への影響を抑えるための保険になります。
メディエーション・他社広告について
AdMob一本だけに依存していると、広告制限が入った瞬間に収益が止まります。
AdMobメディエーションや他社広告ネットワークをバックアップとして検討しておくと、収益の急停止を避けやすくなります。
ただし、他社広告を入れればポリシーリスクが消えるわけではありません。
どの広告ネットワークでも、誤クリックを誘発する配置や、過剰な広告表示は避ける必要があります。
17. まとめ
AdMobのポリシー指摘は、必ずしも現行版に問題があるとは限りません。
特に「旧バージョン」と明記されている場合、古いバージョンを使い続けているユーザーの広告配信だけが制限されているケースがあります。
一方で、広告フレームのサイズ変更、バナー広告の重なり、操作ボタンとの近さ、バナー広告とインタースティシャル広告の同時表示、インタースティシャル広告の連発、無効なトラフィック、同意メッセージ未対応は、現行版でも注意が必要です。
- 旧バージョンの制限は、最新版への更新を促すしかない
- 現行版では広告の重なりと連発を防ぐ
- 広告View自体のサイズを変更しない
- 広告枠の高さをあらかじめ確保し、画面のガタつきを防ぐ
- 問題演習中のバナー広告は控えめにする
- インタースティシャル表示時はバナー広告を非表示にする
- データなし画面やエラー画面では広告をロードしない
- 開発中は必ずテスト広告ID・テストデバイスを使う
- UMP SDKでプライバシー同意フローを整える
- リモートで広告を停止できる仕組みを用意する
- 指摘が来たら、AdMob詳細画面の画像も確認する
- 広告よりもユーザー体験を優先した設計にする
参考:AdMob公式ヘルプ・開発者向けドキュメント
- Fix policy issues that affect ad serving – Google AdMob Help
- Understand policy issues, regulatory issues, advertiser preference issues, and ad serving statuses – Google AdMob Help
- Discouraged banner implementations – Google AdMob Help
- Disallowed interstitial implementations – Google AdMob Help
- Interstitial ad guidance – Google AdMob Help
- Invalid traffic – Google AdMob Help
- How you can prevent invalid activity – Google AdMob Help
- Add the Google User Messaging Platform SDK to your app – Google AdMob Help
- Enable test ads | Android – Google Developers
- Privacy | Android – Google Mobile Ads SDK
※本記事は個人開発者としての対応メモです。AdMobのポリシーやSDK要件は変更される場合があります。
最終的には公式ヘルプ、Google Mobile Ads SDKのドキュメント、AdMobポリシーセンターの表示内容を確認してください。
