UXエンジニアになりたい人のブログ

転職活動はじめてすぐやめた

はてなブログで特定のキーワードを含む記事にはAdsenseが貼られないようにする方法

2,3日前に上記記事を見まして、わーアドセンスでポリシー違反やらかしちゃったら記事消して回るの大変だなあと思いました。ていうか心折れるなあと思いました。

ということで、特定のキーワードを含む記事にAdsense広告を貼らないようにするスクリプトを作ってみました。いつものように、シンプル・簡単・汎用・低カスタマイズ性です。ご利用は自己責任で。

設定方法

ダッシュボード→デザイン→カスタマイズ→記事上下のカスタマイズ→「記事ページのプレビュー」を設定→「記事上」または「記事下」

と選択し、以下を設定。

可変項目は次の2つ。

  1. 3行目のキーワードのところ。'ビール', 'お酒', となっているところを、キーワードの数だけ増やしていく。例:[ 'ビール', 'お酒', 'beer', 'ワイン', ]

  2. 7行目の<!-- 自分のアドセンスコードの/scriptを/scripに修正してここにコピペ -->の記述を自分のadsenseコードに置き換える。重要:通常コード中に2カ所ある</script>という記述を</scrip>(最後のtを取る)にすること!!

<script>
// 以下のキーワードが一つでも含まれていたらadsenseを読み込まない
var keywords = ['ビール', 'お酒', ];

var adsenseCode = (function () {/*
<div>
広告<br/>
<!-- 自分のアドセンスコードの/scriptを/scripに修正してここにコピペ -->
</div>
*/}).toString().match(/\/\*([^]*)\*\//)[1].replace(/scrip>/g, 'script>');

addEventListener("DOMContentLoaded", function() {
    var text = $('.entry-content').text();
    var results = $.map(keywords, function(keyword) {
        return text.indexOf(keyword) > -1;
    });
    if ($.inArray(true, results) < 0) {
        $('.removable-adsense').html(adsenseCode);
    }
}, false);
</script>
<div class="removable-adsense"></div>
諸注意など
  • PCとモバイルを共通化してもよいし、しなくてもよい。どちらの場合でも設定内容は変わりません。

  • 少しトリッキーな仕組み(JavaScriptのヒアドキュメント)を使っているので動かないブラウザがあるかもしれません。報告ください。こちらで確認済みのブラウザは次の通り

    • MacOSX:chrome, safari, firefox(いずれも本日時点の最新ver)
    • iOS8:chrome, safari(いずれも本日時点の最新ver)
    • android4.0:標準ブラウザ
    • Windows8.1:IE11
  • scriptをscripに直すというところが猛烈にださいですが勘弁してください*1

  • あまりちゃんと確認してませんが(全ページ共通の)「ヘッダ」「フッタ」のadsenseコードにこれを導入すると、表示中のブログエントリすべてに対して効くようです*2

    • ブログトップで最新の7記事を表示している場合、7記事すべてで違反ワードに該当していなければ広告が表示され、1記事でも該当しているなら表示されません。
  • このコードは、「違反ワードがあったら(いったん表示した広告を)消す」とか「非表示にする」とかではなく、広告コードそのものを実行しません。なので、Googleさんに自信を持って「消しました」と申告できると思います

  • とはいえ、いつものように発生した事態に対してはわたくしはなんの責任も負いませんので、自己責任でご利用くださいませ。

応用例1:文中自動挿入スクリプトコードと併用する

uxlayman.hatenablog.com この記事内容と併用する場合の記述は以下です。

<script>
// 以下のキーワードが一つでも含まれていたらadsenseを読み込まない
var keywords = ['ビール', 'お酒', ];

var adsenseCode = (function () {/*

<p>広告</p>
<!-- 自分のアドセンスコードの2箇所の「/script」を「/scrip」に修正してここにコピペ -->
<p> </p>

*/}).toString().match(/\/\*([^]*)\*\//)[1].replace(/scrip>/g, 'script>');

addEventListener("DOMContentLoaded", function() {
    var $target = $('.entry-content  p + h3,h4,h5');
    $target.eq(Math.floor($target.size() / 2)).before($('.insentense-adsense'));

    var text = $('.entry-content').text();
    var results = $.map(keywords, function(keyword) {
        return text.indexOf(keyword) > -1;
    });
    if ($.inArray(true, results) < 0) {
        $('.insentense-adsense').html(adsenseCode);
    }
}, false);
</script>
<div class="insentense-adsense"></div>
応用例1の実施サンプル(文中挿入モード)

普通の記事の場合:

お酒(違反ワードとして設定)の記事の場合:

普通の記事の場合は文中に広告が表示されていますが、お酒記事のほうには表示されていないことが見て取れると思います。

応用例2:特定のカテゴリー設定がされているときだけ、Adsenseが貼られないようにする

2017/1/21追記

はてなブログの「カテゴリー」をつけた記事だけ、Adsenseが貼られないようにするには、以下のコードを使います。広告禁止というタグが付与されている記事には、Adsenseが貼られなくなります。

<script>
var adsenseCode = (function () {/*
<div>
広告<br/>
<!-- 自分のアドセンスコードの/scriptを/scripに修正してここにコピペ -->
</div>
*/}).toString().match(/\/\*([^]*)\*\//)[1].replace(/scrip>/g, 'script>');

addEventListener("DOMContentLoaded", function() {
    var text = $('.entry-content').text();
    var results = $.map(keywords, function(keyword) {
        return text.indexOf(keyword) > -1;
    });
    if ($('meta[property="article:tag"][content="広告禁止"]').size() == 0) {
        $('.removable-adsense').html(adsenseCode);
    }
}, false);
</script>
<div class="removable-adsense"></div>

実行例はこちらをどうぞ uxtest.hatenablog.jp

それでは、快適なアドセンスライフを!

*1:これな、javascriptのコメント中であっても</script>がHTMLとして有効になっちゃうせいなんですよね。ブラウザのバグのような気もするけど

*2:想定通りの挙動です