アドセンスをWordPress記事本文中に配置できる手軽でスマートな方法

Google

Google AdSenseをWordpressの本文中に表示するにはいろいろな方法があります。

主な方法は以下の4つ。

  1. HTMLタグをコピーして貼り付ける
  2. moreタグ<!–more–>を置換する
  3. プラグインを使用して挿入する
  4. functions.phpでショートコードを設定し挿入する

ただこれらの方法は、プラグインを使用したり、記事(投稿)を作成するたびに、タグやショートコードを挿入する必要があります。ほんのちょっとした手間なんですが、毎回毎回となると、降り積もって、ちょっと面倒くさいです。

その面倒くささから解放されるため以前、以下の記事を書きました。

ブログの記事中、特にリード文あとの広告は、アドセンスの収益面からみて有効な手段だと思います。その理由は、ページに訪れてみたも...

ただこの方法、関数の中にヒアドキュメントを使用したせいで、使用した人の中には、ヒアドキュメントの仕様に合わずエラーが出てしまうこともありました。

それに、もう少し簡潔に書ける部分もいくつか見受けられます。

ということで、以前書いた「H2見出し手前にアドセンス広告を配置する方法」を、もっと手軽でスッキリスマートに書けるように改良してみました。

ここに書かれている方法を使用すれば、4回ぐらいのコピペで本文中アドセンスを実装できます。

※この方法は、投稿本文中にH2見出しを使っていなければ、ほとんど意味のない設定になります。

追記:今回の方法より簡単な方法を考えてみました。

以前2度にわたり、投稿本文中のH2見出し手前に手軽にアドセンス(広告)を表示する方法を書きました。ただ、これ...

photo by Dennis Chen

スポンサーリンク
レクタングル(大)広告

本文中広告のテンプレート作成

まずは、前回ヒアドキュメントに貼っていたアドセンスタグを、簡単に貼れるようテンプレートを作って、そこに貼ることにします。

今回は、ad-in-body.phpというファイルをテーマフォルダ内(子テーマフォルダ内)に作成します。

その中にGoogle AdSenseで取得したアドセンスタグを貼り付けます。

簡単な例を書くと、こんな感じになります。一応アドセンスが推奨している広告ラベルも入れています。(アドセンスタグだけを貼り付けてもOKだけど、余白はしっかり取る必要があり)

<div class="ad-space">
  <div class="ad-label">スポンサーリンク</div>
  <div class="ad-pc">[アドセンスタグ]</div>
  <div class="clear"></div>
</div>

この[アドセンスタグ]部分にアドセンスで取得したタグを貼り付けます。

functions.phpの編集

テーマの(子テーマの)functions.phpに、以下のようにコピペします。

//H2見出しを判別する正規表現を定数にする
define('H2_REG', '/<h2.*?>/i');//H2見出しのパターン
  
//本文中にH2見出しが最初に含まれている箇所を返す(含まれない場合はnullを返す)
//H3-H6しか使っていない場合は、h2部分を変更してください
function get_h2_included_in_body( $the_content ){
  if ( preg_match( H2_REG, $the_content, $h2results )) {//H2見出しが本文中にあるかどうか
    return $h2results[0];
  }
}

function add_ads_before_1st_h2($the_content) {
  if ( is_single() ) {//固定ページも表示する場合はis_singular()にする
    //広告(AdSense)タグを記入
    ob_start();//バッファリング
    get_template_part('ad-in-body');//広告貼り付け用に作成したテンプレート
    $ad_template = ob_get_clean();
    $h2result = get_h2_included_in_body( $the_content );//本文にH2タグが含まれていれば取得
    if ( $h2result ) {//H2見出しが本文中にある場合のみ
      //最初のH2の手前に広告を挿入(最初のH2を置換)
      $the_content = preg_replace(H2_REG, $ad_template.$h2result, $the_content, 1);
    }
  }
  return $the_content;
}
add_filter('the_content','add_ads_before_1st_h2');

ポイントとなるところは、まず、H2を判別する正規表現は2回以上使用するので最初に定数化しています。

あと、本文中にH2タグが含まれていれば、その部分を返すget_h2_included_in_body()関数も2回以上使用するのでまとめました。

H2見出し手前にアドセンスを追加するのは、add_ads_before_1st_h2()関数です。functions.phpないでテンプレートファイル呼び出すには、以下のようにバファリングを使用します。

ob_start();//バッファリング
get_template_part('ad-in-body');//広告貼り付け用に作成したテンプレート
$ad_template = ob_get_clean();

これで、使い方のややこしいヒアドキュメントを使う必要が無くなりました。

Simplicityテーマを使用している場合は、元からこの機能がカスタマイズから選べるように備わっています。ですので、この方法を行うと関数名が衝突してエラーが出ます。エラーを回避して子テーマから更なるカスタマイズをする場合は、Simplicityの本文中広告をダブルレクタングルにするカスタマイズ方法を参照してください。

今回は、説明を簡潔にするためPC表示のみの方法を書きましたが、モバイルに対応するには、以下のようにif分岐で呼び出すテンプレートを変更すると良いと思います。

ob_start();//バッファリング
if ( wp_is_mobile() ) {
  get_template_part('ad-mobile-in-body');//モバイル広告用テンプレート
} else {
  get_template_part('ad-in-body');//PC広告用テンプレート
}
$ad_template = ob_get_clean();

本文中にH2タグが含まれていないページでも表示

WordPressの全ての投稿にH2タグが入っていれば、この方法は必要ないです。

けれど、全てのページにH2タグが入っていない場合は、タグが入っていないページだけ広告が1つ少なく表示されることになります。

これだともったいないので、広告を表示したい箇所に以下のように記入すると、本文中にH2タグが含まれてないときだけ表示されるアドセンス部分が作成されます。

<?php if ( !get_h2_included_in_body( get_the_content() ) ): //本文中にH2見出しがない場合
 get_template_part('ad-in-body');
php endif; ?>

これで先程、functions.phpで作成した関数get_h2_included_in_body()が活きてきます。

僕の場合は、single.phpなどの関連記事下にこのコードを挿入しています。サイドバーのどこかとかでもいいかもしれません。

これで、H2タグが入っていないページの取りこぼしを防ぐことができるようになりました。

動作確認

ちゃんと動作されているか確認します。

ブラウザ拡張の「アドブロック(Adblock)」などが動作していると、表示されなくなるのでブロック機能を停止してください。

広告を貼り付けると、このようになります。

H2見出しを置換した状態

効果

当サイトの場合、本文にアドセンスを表示する前は、関連記事下に広告を表示させていました。

それで、「関連記事下広告」と「本文中広告」の効果を計測した結果、RPMで3.8%増という結果が出ました。

ちょうど1ヶ月前アドセンス広告を本文中に載せる方法について以下のような記事を書きました。【アドセンス収益向上】簡単!プラグイ...

インプレッション収益(RPM)は、表示回数 1,000 回あたりの見積もり収益額を表します。

インプレッション収益(RPM) – AdSense ヘルプ

1000表示あたりの効果が、3.8%と微増だったので、その後2週間ほど一旦は関連記事下広告に戻したのですが、その期間はRPMが10%も下がってしまったので元に戻しました。

で、この記事を書いたことを機に、現在の効果を再度確かめてみると、「関連記事下広告をしていた30日間(5月21~6月19)」と「本文中広告をしていた直近30日間(7月31~8月29)」を比べてみると収益的には2倍ぐらいになっていました。

上が最近のもの。

広告位置によるAdSenseの収益比較

ただこれは、以前よりアクセスが増えたからこのようになっている部分もあります。

で、やはりここは、RPMで比較すると、「本文中広告をしていた直近30日間」の方が13%パフォーマンスが高くなっていました。

これは、RPMが300円だったとすると、339円になる数字です。もし月1万円の収益があるサイトだと、広告のページビュー数が同じなら1万1300円となります。これだけ効果が出れば、成功と言っていいのではないでしょうか。

※これはあくまで、当サイトのデータから来る結果です。サイトによっては、効果が上がらない場合があるということもありえます。また、AdSense等の広告を記事中に挿入すると、Googleから低品質と思われやすくなるという意見もありますので、実装は自己責任でお願いします。

まとめ

この方法は、効果がうまく上がらなければ、2ヶ所コメントアウトすれば元に戻せるのが一番良いところです。

具体的には以下のようにします。

functions.phpの以下の部分をコメントアウトする。

//add_filter('the_content','add_ads_before_1st_h2');

取りこぼしを防ぐために挿入したコードのテンプレート呼び出し部分をコメントアウトする。

<?php if ( !get_h2_included_in_body( get_the_content() ) ): //本文中にH2見出しがない場合
 //get_template_part('ad-in-body');
php endif; ?>

本文中広告のパフォーマンスはさておき、

  • もしダメなようなら手軽に戻せる
  • ad-in-body.phpテンプレートをダブルレクタングルにしてみたり、いろいろな表示方法を試して本文中広告の効果を手軽に測定できる

という点において、かなり楽な方法なのではないかと思います。

『アドセンスをWordPress記事本文中に配置できる手軽でスマートな方法』へのコメント

  1. 名前:たかよし 投稿日:2014/12/23(火) 22:06:51 ID:4718d642d

    こんばんは
    わいひら様
    はじめまして たかよしと申す者です。

    このブログを観て解説通りカスタマイズしたら、h2見出しの前にアドセンス広告を表示出来たのですが、「本文中にH2タグが含まれていないページでも表示」で解説していたコードを、「広告を表示したい箇所に以下のように記入すると、本文中にH2タグが含まれてないときだけ表示されるアドセンス部分が作成されます。」と説明されていたので
    最初は子テーマ内の「single.php」内の元々アドセンスコードが記述されていた場所(記事内に広告を表示させるため、記事トップの広告コードを削除)に追記しました。

    「ファイル更新」をクリックしたら画面が真っ白?変だ。何回かやって一様更新ができたが、肝心のコードが実行されていないようです。

    h2見出しタグが無い記事では記事トップに広告を表示するはずですよね?

    念のため子テーマに記述したコードを削除して、すべてのコードを親に記述しなおしても結果は、おかしな挙動はなかったですが記事トップに広告は表示されませんでした。

    なんかコードがおかしいのかな?(感にさわったらゴメンナサイ)

    尚 試したブログは編集用として

    bitnami wordpress でローカルホストでのワードプレス

    ワードプレスバージョンは ver 392

    テーマは  gush2

    以上が出来ない現状です。

    H2タグが含まれてないときだけ表示されるアドセンス広告を、どうしても記事トップに表示させたいです。

    このやり方で解決方法はありますでしょうか?

    ヨロシクお願いいたします。

    それともう一つ

    子テーマに記述した際におかしな挙動現象が起きましたが、これは子テーマの作成の仕方が悪いのでしょうか?

    ファイルを保存する時の「文字コード」は「UTF-8N」・「改行コード」は「LF」で良いですよね。あるブログに書いていたので、スタイルシートおよびPHPファイルも上記コードで保存しています。

    gush2のスタイルシートに「@charset “UTF-8”;」と書いてあるので気になっていた。

    ご教授おねがいいたします。

  2. アバター画像 名前:わいひら 投稿日:2014/12/23(火) 22:38:03 ID:58e70f852

    「ファイル更新」をクリックしたら画面が真っ白?変だ。何回かやって一様更新ができたが、肝心のコードが実行されていないようです。

    ローカル環境でテストをしていれば、エラーの場合はエラーメッセージが表示されるのではないかと思います。
    エラーメッセージはどのようなものだったでしょうか?

    なんかコードがおかしいのかな?(感にさわったらゴメンナサイ)

    僕が公開しているSimplicityというテーマに同様の機能を付けていて、ほとんど同じコートを利用しているのですが、そういった不具合の報告は今のところないです。
    ですので、コードに問題はないと思っているのですが、環境によっては分りません。もし、コードに何か問題がある場合は、エラーメッセージが出るかと思います。

    子テーマに記述した際におかしな挙動現象が起きましたが、これは子テーマの作成の仕方が悪いのでしょうか?

    どのように作成されたのかが分らないので、僕には分りかねます。

    ファイルを保存する時の「文字コード」は「UTF-8N」・「改行コード」は「LF」で良いですよね。あるブログに書いていたので、スタイルシートおよびPHPファイルも上記コードで保存しています。

    「文字コード」は「UTF-8N」で良いと思います。→文字コードはUTF-8? UTF-8N? | 狩野祐東の本 solidpanda.com
    改行コードは、僕はCRLFを利用しています。ただ、「LF」でも問題ないとは思います。

  3. 名前:たかよし 投稿日:2014/12/23(火) 23:24:25 ID:4718d642d

    わいひら様

    たかよしです。

    早速の返答アリガトウございます。

    ファイル更新時に画面が真っ白になった時は、何もエラーメッセージは出ませんでした。

    コードに関しては誤ります。gush2では使えないのかな~。

    文字コードについては大変勉強になりました。

    どうやら文字コードとおかしな挙動については関係が無いようなので安心しました。

    アリガトウございました。

  4. アバター画像 名前:わいひら 投稿日:2014/12/24(水) 12:48:09 ID:8ac9e5c3b

    記事作成時Wordpressのデフォルトで入っているテーマで試して大丈夫でしたが、gushでは試してないです。

    そのほかには、こちらの方法もあります。
    【アドセンス収益向上】簡単!プラグインやショートコード不要でWordpress記事中に広告を挿入する方法
    書き方が変わっているだけでどちらも動作は同じです。

  5. 名前:たかよし 投稿日:2014/12/24(水) 21:44:21 ID:8d8cf5ef7

    こんばんは わいひら様

    たかよしです

    お忙しいところ私のためにご足労かけてスミマセン。

    「そのほかには、こちらの方法もあります。」のサイトを参考にして実行してみた。

    まずご指定通り、子テーマ内のfunctions.phpにコードを記述。

    次に

    本文に「H2が無い場合は、関連記事下に表示する設定」で「関連記事下の広告設定は以下のように行います。」とありますが、私は個別記事のトップに表示させたいので、「gush2の(single.php)の元のアドセンスコードが記述してあったところに、コードを記述した。

    結果。

    h2タグがない記事では個別記事のトップにアドセンスが表示されますが、h2タグがある個別記事では、トップとh2タグの上にアドセンスが表示され規約違反になります。(記事下にアドセンス広告が2つあります。)

    なんかもう少しで解決するようなのでヨロシクお願いいたします。

  6. アバター画像 名前:わいひら 投稿日:2014/12/25(木) 11:56:34 ID:e956b3cff

    >なんかもう少しで解決するようなのでヨロシクお願いいたします。
    こちらに同様のテスト環境もカスタマイズコードもないので、わからないとしか言えないです。
    トップではなく、一度仮に関連記事下で試すとどうなりますでしょうか?

  7. 名前:たかよし 投稿日:2014/12/25(木) 22:15:04 ID:f316d4570

    今晩は わいひら様

    たかよしです。

    ご指示とおり関連記事下で試したら成りました。

    なので個別記事タイトル(h1)の下(正確には「met box」の下)に表示させるようにしたところ、出来ました。

    当初私の意図した場所は、トップにあるカテゴリータグ(パンくず)の上に表示させようとして、うまくいかなかったようです。

    gush2の(single.php)の元のアドセンスコードが記述してあったところに変にこだわっていて出来なかったようです。でもこれはこれで良い感じです。

    なんかすばらしいヒントでうまく出来て今は「やった~」と感じてうれしいです。

    アリガトウございます。

    このコードを使わせてもらっても宜しいでしょうか?

    よろしくお願いいたします。

  8. アバター画像 名前:わいひら 投稿日:2014/12/26(金) 01:21:27 ID:72e46bc6f

    全然使っていただいていいですよ。
    そのために公開しているので。

    おそらくトップでは、まだ表示ページの本文が呼び出されていないので、get_the_content()に値が格納されていないのだと思います。
    その後、本文が呼び出されるので、そのあとのget_the_content()には、値が格納されていたのだと思います。

  9. 名前:yuki★hata 投稿日:2015/03/24(火) 19:26:44 ID:512708ed8

    yhira様
    こちらのfunctions.php用のソースを、そのままコピペで使わせていただき、
    あっさりと、本当に(笑)、contentの最初のh2の前に GoogleAdsが出ました!
    思わず「すげ〜このひと」とつぶやいていました。
    (phpの内容は、私にはほぼ「呪文」なので、実現まで大変だろうな…と思っていましたので)
    感動です。スゴイです。ありがとうございました。

  10. アバター画像 名前:わいひら 投稿日:2015/03/24(火) 20:51:55 ID:5fe12ad41

    あまりPHPを触った事がない人でも、できる限り編集しやすいようにと書いたので、そう言っていただけるのが一番嬉しいです。
    こちらこそありがとうございます。

  11. 名前:XYZ 投稿日:2015/04/05(日) 21:10:14 ID:b433d4a07

    ob_start();//バッファリング
    if ( wp_is_mobil() ) {
    get_template_part(‘ad-mobile-in-body’);//モバイル広告用テンプレート
    } else {
    get_template_part(‘ad-in-body’);//PC広告用テンプレート
    }
    $ad_template = ob_get_clean();

    のwp_is_mobil
    ですが「e」が抜けてます。

  12. アバター画像 名前:わいひら 投稿日:2015/04/05(日) 22:05:02 ID:5a010f1ec

    ご指摘ありがとうございます!
    修正しておきます。

  13. 名前:山ん人 投稿日:2015/04/23(木) 14:06:39 ID:33af8a2d2

    お世話になっております。
    Simplicityではなくて申し訳ないですが(Simplicityは使用する必要がないので)、「attitude」というテーマに使用してみましたところ、管理画面から全て文字化けし、実現できませんでした。テーマとの適合と言われればそれまでなのですが、挿入する位置など関係あるのでしょうか?
    ちなみに、SINGLE.PHPに記述する手の方法もやってみましたが、あまり上手くいきません(attitudeの記述に合わせて挿入しきれないor適合するコードを記述できていない)

  14. アバター画像 名前:わいひら 投稿日:2015/04/23(木) 18:17:39 ID:ce212fd5c

    attitudeは、使ったことがなく、仕様のことをよく知らないので、ちょっとわからないです。

  15. 名前:DO 投稿日:2015/06/23(火) 20:32:10 ID:3acce5fa5

    どうも、こちらの記事大変参考にさせて頂き助かっています。
    細かい所なのです、ちょと気になったのでコメントさせていただきました。

    > $count = 1;
    > $the_content = preg_replace(H2_REG, $ad_template.$h2result, $the_content, 1);
    こちら$countは使われていないので無くてもよいのかなと思いました。

    2箇所のh2を置換する事もあまり想定できないので、
    preg_replaceは現在のままで$count自体不要かなと。

    もしくは変更時のわかりやすさを考えると定数にするのも良い思いました。

  16. アバター画像 名前:わいひら 投稿日:2015/06/24(水) 13:25:20 ID:742957fc9

    limit引数に1が指定されているので、不要ですね。
    おそらく、そのあとのcount引数に使うべきか書いたものの、不要そうだったので、使わずそのまま消し忘れてしまったのかもしれません。
    修正しておきます。

  17. 名前:Mayumi.I 投稿日:2017/10/02(月) 19:06:47 ID:3ed04889d

    こんにちわ。いつも、こちらのサイトを参考にさせて頂いております。有難うございます。
    さて、大変、勝手なのですが、一つ、教えて頂きたく、コメントをさせて頂きました。
    私のブログは、全く趣味の、我が家の猫ちゃんのブログでして、日々の猫たちの様子を、写真を載せて、その下に文章を書いて、という感じですので、h2タグが本文中にありません。(大体、写真を5〜10枚ほど、掲載しています。)
    本文中にあるのは、imgとpタグとタグのみです。
    記載を頂いております分は、h2タグの前に挿入するやり方ですので、応用させて頂き、3つ目の写真の前に(iiimgタグの前に)アドセンスを挿入する事も出来ると思いますが、何分、私が、プログラム的な事が出来ず、また、失敗をして、ブログが見れなくなる事などを恐れております。
    そこで、勝手なお願いですが、imgタグの前にアドセンスを挿入するコードを、教えて頂けないでしょうか。(1枚の写真にimgタグは2つありますので、3枚目の写真の前に、と言う事になります。)
    何個日目かのpタグの前に、という事も考えましたが、1枚の写真の下に、段落付きの文章がいくつ入るか、その写真によっても変わる為、imgタグの方が調整しやすく思いました。
    大変、勝手なコメントですし、お忙しいと思いますが、ご一考頂ければと思います。
    宜しくお願い致します。

  18. アバター画像 名前:わいひら 投稿日:2017/10/03(火) 23:39:20 ID:6559687de

    三枚目の写真の前となると、このページのサンプルコードと仕様が変わってしまいます(このページのコードは最初の手前に出すものなので)。
    このページは、あくまでサンプルコードを掲載するページなので、プログラムのカスタマイズ方法を請負ったり、指南するものではありません。
    サンプルコードの仕様を外れるカスタマイズについては、自前で行うか、出来ない場合は、クラウドソーシング等で、依頼していただければと思います。

  19. 名前:村上 投稿日:2019/02/12(火) 18:49:44 ID:b510fe37e

    記事を参考にさせていただきました。

    無事に最初の見出しの上にアドセンスを表示させることが出来ました。

    その代わりに、目次を自動生成するプラグイン(Table of Contents Plus)が表示されなくなってしまいました。

    Table of Contents Plusでは、最初の見出しの前に目次が表示されるように設定しています。

    原因が分かりますでしょうか?

    お手数ですが、何卒よろしくお願いいたします。

  20. アバター画像 名前:わいひら 投稿日:2019/02/12(火) 22:15:23 ID:2ae9f70a6

    実際の環境があるわけではないので詳しくはわからないですが、add_filterの$priority引数あたりが影響しているのではと思います。

    $priorityの数値を10未満、11以上といろいろと数値を変更してみると、どうなるでしょうか。

  21. 名前:村上 投稿日:2019/02/15(金) 17:12:33 ID:d25dbca7b

    ご返信ありがとうございます。

    いろんな数値を試してみたのですが、変化が見られませんでした。

    その他に考えられる可能性はありますでしょうか?

    お手数ですが、何卒よろしくお願いいたします。

  22. アバター画像 名前:わいひら 投稿日:2019/02/15(金) 18:32:47 ID:68e95968b

    プラグインとの競合問題のことなので、詳しく精査してみないとわかりません。
    ただ、業務として行っておらず、あくまでサンプルコードなので、申しわけないですがそこまで調べようとは思っていません。

  23. 名前:村上 投稿日:2019/02/18(月) 21:14:56 ID:a2b01a2a1

    ご返信ありがとうございます。

    了解いたしました。いろいろと試してみたいと思います。

    丁寧に対応していただき、誠にありがとうございました。