同一グローバルIPアドレス(同一拠点)からの複数回のアクセスがあったことを理由にGoogle Adsenseの広告配信が停止されたという例をちらほら見かけるようになりました。
私はもう何年もアドセンス広告を利用させていただいている中で、一度も配信停止を受けたことがないのであまり気にして運営はしていないのですが、例えばプレビューなどページの確認が、アクセスの大半を占めるようなサイトではあり得るのかなぁという印象です。
そこで今回は、WordPressの組み込み関数を使って、ログインしているユーザーだったり、管理ユーザーとしてログインしているユーザーがページ表示した際に、Google Adsense広告を表示しない(配信されない)ようにする簡単な方法を紹介します。
このカスタマイズでは、テーマのfunctions.phpへのコード追記が必要です。トラブル防止のため、スキルに自信のない方は実装しないことをおすすめします。
Googleアドセンス広告が配信される仕組み
手順だけ説明..とも思いましたが、アドセンスの広告配信の仕組みをまず理解しないと、コードの意味も、やっていることも理解できないと思いますので、まずはGoogle Adsense広告が配信される仕組みについて触れておきます。
Google Adsenseの広告コードは主に以下の2つのコードで成り立っています。
- Google Adsenseに接続し、利用可能なユーザーであることを確認する記述
- 指定した形で広告を表示するための記述
具体的には以下のような形にすべての広告ユニットがなっています(以下はディスプレイ広告の例)
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-ユーザーID"
crossorigin="anonymous"></script>
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-ユーザーID"
data-ad-slot="広告ID"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
このうち以下の行が、先ほどのアドセンスが利用可能かどうかの認証情報
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-ユーザーID"
crossorigin="anonymous"></script>
で、以下の行が広告表示用の記述です。
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-ユーザーID"
data-ad-slot="広告ID"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
これはどの種類の広告コードも同じ体系になっています。
そして、アドセンスでは、広告が表示されないことがないよう、すべての広告コードに認証のためのコード(コード前半)が記述されています。
認証のためのコードは、ページ内に1つあればすべての広告に適用され、あとは記述があっても無視されるようになっています。
まずは「認証用コード」と「広告表示用コード」の2つで広告コードが成り立っていることを理解して、次へ進めましょう。
ユーザー条件によってアドセンス広告を配信しないようにする手順
前項で、広告コードが2つのコードで成り立っていることを説明しました。
この仕組みを理解していれば、「認証用コード」がページ内に存在しなければ、いくら広告コードがページ内にあっても広告は表示されないようにできますね。
では実験!!
試しに、以下のような認証用のコードをサイト内のすべてのGoogle Adsense広告から削除してみてください。
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-ユーザーID"
crossorigin="anonymous"></script>
...自身で広告を挿入している場所を見ても、広告が表示されなくなりましたか?
そうでない場合は認証用のコードがまだ残っているか、テーマやプラグインの設定で、アドセンス用の設定などといった項目があり、そこで設定しているのかも知れません。
また、どこかに自動広告(=Adsenseが使えるように登録した際のコード)のコードが残っていませんか?
よく確認してください。
ここで一旦すべてのアドセンス広告が表示されなくならないと、ここから先の措置の意味がありません
...広告が全く表示されなくなったら...どこか1か所だけ認証用コードを挿入してみてください。
...全部の広告が表示されるようになりましたか?
これがGoogle Adsenseの広告配信の仕組みです。認証されていないから、広告コードがあっても広告は表示されないんですね。
これを使って、条件に応じて広告が表示されないようにする方法を以下に紹介していきます。
一旦認証用コードを入れたところは再度削除して、広告が表示されないのを確認してから次へ進んでください
ログインしているユーザーにはアドセンス広告を表示しない
ログインしているユーザーだったら..という意味を持つ組み込み関数「is_user_logged_in」を使い、先頭に「!」を付けて逆意味(ログインしていないユーザーだったら..)にして、アドセンスの認証用コードをヘッダー内へ出力するコードです。
ログインしていないユーザーだけに..ということになりますから、当然管理者権限のユーザーも含まれます
function sample_logged_in_user_adsense_hidden(){
if( is_user_logged_in()){
echo '<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-ユーザーID"
crossorigin="anonymous"></script>';
}
}
add_action('wp_head','sample_logged_in_user_adsense_hidden');
上記のコードをテーマのfunctions.phpへ追加し、コード中の「ユーザーID」の部分を自身の認証用コードの文字列(数字)に変えてください。
終わったら、ログアウトした状態で、広告が表示されるかを確認しましょう。逆にログインした状態で広告が表示されないかも確認しましょう。
管理者権限を持つユーザーがログインしている状態ではアドセンス広告を表示しない
今度は、管理者権限を持つユーザーがログイン状態だったら..という意味を持つ組み込み関数「current_user_can」を使い、「manage_options(テーマの編集)」権限を持つユーザー、つまり管理者権限を持つユーザーに限定し、さらに先頭に「!」を付けて、管理ユーザーじゃなかったら..という条件の元、アドセンスの認証用コードを出力します。
管理者権限以外には広告表示されるので、会員制サイトなどではこちらのコードの方が有用でしょう。
function sample_admin_user_adsense_hidden(){
if (!current_user_can( 'manage_options' ) ) {
echo '<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-ユーザーID"
crossorigin="anonymous"></script>';
}
}
add_action('wp_head','sample_admin_user_adsense_hidden');
上記のコードをテーマのfunctions.phpへ追加し、コード中の「ユーザーID」の部分を自身の認証用コードの文字列(数字)に変えてください。
終わったら、ログアウトした状態、または管理者以外の権限のユーザーでログインした状態で、広告が表示されるかを確認しましょう。逆に管理者でログインした状態で広告が非表示になるかも確認しましょう。
いかがでしたか?これで、サイト管理している人が何度もプレビューしたなどといったことが原因で、アドセンス広告の配信が停止されるといったケースはなくなると思います。