動的読込みのGoogleAdSense広告のブロックを判定する

Google AdSenseの遅延読込みでページ表示速度を改善の記事で書いたスクリプトの追加機能です。

当ブログでは、関連記事をGoogleアドセンスの関連コンテンツに依存しています。そのため、広告をブロックされると関連記事が表示されず、ユーザのサイト内周遊に大きな問題が発生します。広告ブロックした場合でも、関連記事を表示するための導入前段階です。(JavaScript無効対策で静的に関連記事配置したいけどBloggerじゃ無理だよね…)

コード

// GoogleAdSenseの読込み
var ad = document.createElement('script');
ad.type = 'text/javascript';
ad.async = true;
ad.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js';
function onLoadGoogleAdSense() {
  var ad = document.getElementsByClassName('adsbygoogle');
  if (ad && ad.length && !ad[0].getElementsByTagName('iframe').length) {
    // 広告ブロックあり
    //console.log('adblock');
  } else {
    // 広告ブロックなし
    //console.log('adsense');
  }
}
ad.addEventListener('load', onLoadGoogleAdSense);
ad.addEventListener('error', onLoadGoogleAdSense);
var sc = document.getElementsByTagName('script')[0];
sc.parentNode.insertBefore(ad, sc);
//console.log('load');

補足

基本的には、adsbygoogle.jsのerrorイベントで動作しています。言い換えると、errorイベントすら発生しない広告ブロックでは無力です。その場合、広告ブロックなし判定すら行われない可能性が高いです。

動作は、ins.adsbygoogleタグ内にiframeが生成されたかどうかで判定しています。読み込まれた基本生成されているはずです。

関連記事

コメント: 0

コメントを書く