【アドセンス収益向上】簡単!プラグインやショートコード不要でWordPress記事中に広告を挿入する方法

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

その理由は、ページに訪れてみたもののリード文を読んで離脱する読者のための出口として、ある程度機能するからです。以前僕もブログで実験したことがあるのですが、それなりに効果もありました。

けれど昨日まで、このブログでは、そんな効果のあった記事中広告を使用していませんでした。

それはなぜか?

記事に毎回広告を挿入するのが面倒くさいからです…。

記事中広告の是非はさておき、収益面を考えれば挿入した方が良いのでしょうが、地味に面倒くさいのが嫌だったんです。

けれど先日、そんな面倒くさい広告挿入から解放される方法を思いつきました。

ということで今回は、Wordpressでプラグインを使用せず、記事を編集することもなく、手軽に広告を挿入する方法を紹介したいと思います。

追記:よりスマートな方法を考えてみました。

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

追記:さらに簡単な方法を考えてみました。

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

photo by quickonlinetips

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

これまでの記事中にアドセンスを挿入する方法

これまで使われている、アドセンスを記事の中に挿入する方法といえば、主に以下の4つだと思います。

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

「Wordpress AdSense 記事中」でググっても、上位に出てくるほとんどのものが2、3、4の方法です。

これらの方法でもOKという方は、以下の記事がとても参考になります。

1は、最も手間のかかる方法です。これだと毎回毎回HTMLタグをコピペするのも面倒ですし、タグは場所をとるので記事の可読性も下がります。

2、3、4の方法も、タグをコピペするよりはかなり楽なのですが、使用するにはmoreタグや、ショートコードを記事に挿入する必要があります。いくら収益アップが見込めるとはいえ、これを過去記事すべてに挿入するのは非常に骨の折れる作業です。

けれど、先日良い方法を思いついたので試してみたら、うまくいったので以下で紹介したいと思います。

記事編集、プラグイン不要で記事中にアドセンスを挿入する方法

その方法とは、見出し前に広告を挿入する方法です。

大抵のブログならリード文(書き出し部分)のあとに、H2見出しが挿入されているはず。(多分)その見出し手前に広告を挿入するというものです。

具体的な仕組みとしては、

  1. functions.phpで本文表示前にフック
  2. 記事表示前にH2タグの手前にAdSense広告を挿入
  3. 本文記事を表示

というもの。

functions.phpにコピペして、ちょこっといじるだけでH2タグが入っている記事のすべてに広告が挿入されるようになります。

わかりやすく図で説明すると以下のようになります。

これまで、当ブログではこのような広告配置でした。

これまでの広告配置

この広告配置で最も収益が高いのは記事本文後にある「広告1」と「広告2」でした。

関連記事にある「広告3」は、ずいぶん下にあるためか効果はあまり高くありません。直近1ヶ月のアドセンス収益で言えば、全体の14%程度でした。

収益グラフ

アドセンス収益の86%は記事下の広告からということになります。

今回行う方法で、以下のように「広告3」を、より人の目の触れやすい記事中に持ってくることで収益アップを図ります。

新しい広告配置

上記の「広告3」は、本文に入る前のリード文を読んで離脱する人向けの出口となる広告です。リード文で離脱する読者は必ず一定数いるので、そういった読者の目にも触れるように広告を移動したことになります。

※この方法を使えるのは本文中に見出し(H1-6タグ、H2が望ましい)を使っているブログのみです。文中に全く見出しタグを使っていないブログでは、全く意味のないカスタマイズになります。

広告を挿入する設定方法

設定方法も特に難しくはないと思います。

ただし、functions.phpを編集するのでファイルのバックアップは必ずとっておいてください。

最初のH2見出し手前に広告を挿入する設定

さて設定ですが、functions.phpに以下のように記述するだけです。

本文表示前にフックして、最初の<h2>タグ手前に広告を挿入しています。

function add_ads_before_1st_h2($the_content) {
  if (is_single()) {
    //広告(AdSense)タグを記入
    $ads = <<< EOF
//////////////////////////////////
//ここにアドセンスタグを挿入する//
//////////////////////////////////
EOF;
    $h2 = '/<h2.*?>/i';//H2見出しのパターン
    if ( preg_match( $h2, $the_content, $h2s )) {//H2見出しが本文中にあるかどうか
      $the_content  = preg_replace($h2, $ads.$h2s[0], $the_content, 1);//最初のH2を置換
    }
  }
  return $the_content;
}
add_filter('the_content','add_ads_before_1st_h2');

ラベルや、スタイルなどは各自のブログに合わせて編集してください。

本文にH2が無い場合は、関連記事下に表示する設定

上の方法だけだと、記事本文中にH2タグを使用していない記事では、3つまで表示できるアドセンス広告の2つまでしか表示されません。

せっかく3つまで表示できるんだから、できる限り表示させるために、関連記事下の広告設定は以下のように行います。

<?php if ( !preg_match('/<h2.*?>/i', get_the_content()) ): //本文中にH2見出しがない場合 ?>
  //////////////////////////////////
  //ここにアドセンスタグを挿入する//
  //////////////////////////////////
<?php endif; ?>

ここでは、本文中にH2見出しが見つからない場合、関連記事下に広告を表示するように設定しています。

もし、stinger3のように、モバイルとPCのデザインが違う配置を使っていて、表示数がうまく折り合わない場合は、wp_is_mobile()などの関数をうまく併せて使用してみてください。

stinger3での設定について

stinger3での広告配置については、以下の記事と合わせて読むとわかりやすいと思います。

このブログテーマは現在、stinger3を使用しています。ですので効果的な広告位置などは上記記事を参考にさせてもらいました。

あと注意点が一つあります。stinger3を使っていてスマホで本文記事中に広告を表示すると、広告が見切れてしまいます。それを防ぐには以下の方法を行ってください。

「記事中」にアドセンスを入れましたが、スマホで見ると画像が半分位で切れてしまいます。

まとめ

以上のように設定したことで、本文中でH2タグを使用している記事では、リード文後のH2タグ直前に広告が表示されます。(例:この記事)

本文中にH2タグを使用していない記事では、関連記事下に広告が表示されます。(例:何時間眠るのが適切か?厚生労働省が薦める年代ごとの睡眠時間

今回の設定を行ったことで、PCでもスマホでも”収益的には”良い位置に3つ広告を表示できているのではないかと思います。

ということで、「記事中広告を考えているんだけど、プラグインを使ったり、ショートコードを挿入するのは面倒くさい」なんて方にはお勧めの方法ではないかと思います。

もし試してみて「やっぱ記事中に広告があるのは嫌だなぁ」とか「思ったより収益が上がらないな」と思っても、functions.phpに挿入したコードを削除し、関連記事下のコードを修正すれば元の状態に戻ります。そういった意味で気分的にも手軽に行えるのではないかと思います。

Simplicityテーマには、既にこの機能は実装してあるのでカスタマイズは不要です。Simplicityに当ページと全く同じカスタマイズを行うと、関数名が重複してエラーが出るので注意が必要です。

『【アドセンス収益向上】簡単!プラグインやショートコード不要でWordPress記事中に広告を挿入する方法』へのコメント

  1. 名前:名無しさん 投稿日:2015/07/08(水) 23:23:53 ID:ac7a07632

    の代わりに独自定義のタグを使いたいときはどのように変えればよいのですか?

    私は というタグを自分で定義して、見出しにそれを使っています。

    そこで、このページにあるソースコード中の “h2” をすべて “.h” に置き換えてみたのですが、画面が真っ白になりました。

  2. 名前:名無しさん 投稿日:2015/07/08(水) 23:26:02 ID:ac7a07632

    消えてしまいましたが、<h>というタグです。

  3. アバター画像 名前:わいひら 投稿日:2015/07/09(木) 13:33:12 ID:0a4a4b066

    <h>というタグしか使わないのでしたら、以下のように書くと良いのではないかと思います。

    $h2 = '/<h>/i';
    ※全角は半角に変換してください。

    正規表現についてわからない場合は、以下を参照してください。
    ゼロから正規表現を使えるようになるためのステップ – Qiita

  4. 名前:名無しさん 投稿日:2015/07/10(金) 00:07:43 ID:fcc134385

    わいひら様

    ご回答ありがとうございます。

    “$h2 = ‘/<h2.*?>/i’;/” というのを “$h2 = ‘/<h>/i’;” に置き換えるだけで良いということですか?

    “add_ads_before_1st_h2” に含まれる “h2” というのはそのままでも良いのでしょうか? “add_ads_before_1st_h2” というのはファンクション名なので任意ということでしょうか。

  5. アバター画像 名前:わいひら 投稿日:2015/07/10(金) 13:24:42 ID:6e7a233ba

    “$h2 = ‘/<h2.*?>/i’;/” というのを “$h2 = ‘/<h>/i’;” に置き換えるだけで良いということですか?

    タグがそれで合っているのなら、それでOKだと思います。

    そうですね。“add_ads_before_1st_h2″は、単なる識別コードなので、他の関数と名前さえかぶらなければ、何でも良いです。
    気になる場合は、変更してもOKです。その場合は、add_filterの関数名文字列も変更する必要がありますけど。

  6. 名前:名無しさん 投稿日:2015/07/10(金) 18:10:41 ID:233c37199

    では識別コードはそのままで試してみたいと思います。

    昨日と今日はアドセンスのRPMが高くて気分が良いので、また今度RPMが低いときに試してみて結果を報告します。

    ありがとうございました。

  7. アバター画像 名前:わいひら 投稿日:2015/07/11(土) 12:39:54 ID:c57dcdd85

    僕が1ヶ月試した限りでは、RPM基準で言えば、4%ほど報酬がアップしました。
    アドセンスの記事中広告は本当に効果があるのか?1ヶ月間その効果を計測した結果

    当サイトの場合は、クリック率は上がるんですけど、単価が下がるといった感じです。
    これはサイトによって、変わってくるかもしれないので、何とも言えませんが。

  8. 名前:名無しさん 投稿日:2015/08/17(月) 15:13:17 ID:852ae9c3b

    わいひら様

    返信が遅くなり申し訳ありません。 6月と7月に続き8月もアドセンスのCTRが低下したままであることが明確になったので教わった方法を試してみました。

    “$h2 = ‘/<h2.*?>/i’;/” というのを “$h2 = ‘/<h>/i’;”に変えても表示はされませんでしたが、<h> を <div class=”h”> に変えると見事に表示されました。 html ソース中に登場する表現をそのまま利用していたのですね。

    私のサイトではページ上部(サイトタイトルの直下)に貼っている広告のCTRが非常に悪いので、ページ上部の広告に変えて見出しの上に広告を貼ることにしました。

    ありがとうございました。

  9. アバター画像 名前:わいひら 投稿日:2015/08/17(月) 18:28:08 ID:c34fae82c

    ご報告ありがとうございます。
    カスタマイズがうまくいったようでよかったです。

  10. 名前:abe 投稿日:2016/08/30(火) 05:08:34 ID:4e68d2175

    わいひらさま

    お世話になっております。Simplisityを利用させていただいておりますが、function.phpに下記のように記述したところエラーになってしまいます。修正点すべき点をお教えいただけないでしょうか。

    /* AdSense最初のh2上に表示 */
    function add_ads_before_1st_h2($the_content) {
      if (is_single()) {
        //広告(AdSense)タグを記入
        $ads = <<< EOF
    //////////////////////////////////
    
    
    
    
    (adsbygoogle = window.adsbygoogle || []).push({});
    
    //////////////////////////////////
    EOF;
        $h2 = '//i';//H2見出しのパターン
        if ( preg_match( $h2, $the_content, $h2s )) {//H2見出しが本文中にあるかどうか
          $the_content  = preg_replace($h2, $ads.$h2s[0], $the_content, 1);//最初のH2を置換
        }
      }
      return $the_content;
    }
    add_filter('the_content','add_ads_before_1st_h2');
    
    
    /* AdSense最初のh2がない場合、関連記事下に表示 */
    <?php if ( !preg_match('//i', get_the_content()) ): //本文中にH2見出しがない場合 ?>
      //////////////////////////////////
      
    
    
    
    (adsbygoogle = window.adsbygoogle || []).push({});
    
      //////////////////////////////////
  11. 名前:abe 投稿日:2016/08/30(火) 05:11:13 ID:4e68d2175

    コメントしたら表示が化けてしまいましたが、

    (adsbygoogle = window.adsbygoogle || []).push({});

    の箇所が、AdSenseのタグをコピーしたものです。

  12. アバター画像 名前:わいひら 投稿日:2016/08/30(火) 08:11:47 ID:16a3ee896

    エラーメッセージがある場合は、エラーメッセージを教えていただけると原因がわかるかと思います。

    ただおそらく、関数名が重複しているのではないかと思います。
    というのも、Simplicityでは既にこの機能は実装されています。
    なので、同じ関数を二度定義しているため、エラーが出るのだと思います。
    Simplicityにこのカスタマイズを行った部分をすべて削除して、Simplicityの機能を利用した方が良いかと思います。

  13. 名前:サラリーマン 投稿日:2017/01/13(金) 22:19:50 ID:cbd9f45a5

    わいらひさん
    二つ目のH2に広告を表示するにはどうカスタマイズしたらいいでしょうか。
    adsense広告の3枚制限がなくなったので、二つ目か三つ目のH2にも広告を表示しようとしています。
    よろしければ、ご教授いただけないでしょうか。

  14. アバター画像 名前:わいひら 投稿日:2017/01/14(土) 17:01:30 ID:b9b2898de

    それについては、こちらの記事を参考にしてみてください。
    本文記事1、2、3番目のH2見出し手前にアドセンスを挿入するWordpressカスタマイズ方法

  15. 名前:サラリーマン 投稿日:2017/01/15(日) 19:37:35 ID:c7213af8f

    わいひらさん
    ありがとうございます!早速入れさせていただきます。

  16. 名前:ボル 投稿日:2017/06/14(水) 20:49:47 ID:e21b73f60

    いつも貴重な情報をありがとうございます。
    こちらの記事でも適用されているようですが、【記事の目次】直前に広告を挿入する方法はあるでしょうか?

    現在「WP-Table Reloaded」を使っておりまして、そこで吐き出される目次の直前に広告を入れたいと考えております。

    理想としては、

    記事タイトル
    リード文
    広告バナー
    WP-Table Reloaded(目次)
    h2タグ

    という構成にしたいです。
    もしおわかりであれば教えていただけると幸いです。

  17. 名前:http://volbooks.com/ 投稿日:2017/06/14(水) 20:57:04 ID:e21b73f60

    たびたび失礼します。
    目次は「WP-Table Reloaded」ではなく「Table of Contents Plus」でした。訂正いたします。

  18. 名前:ボル 投稿日:2017/06/14(水) 21:13:31 ID:e21b73f60

    何度も申し訳ございません。[toc]タグを削除したところ、無事に解決いたしました。
    ありがとうございました。

  19. アバター画像 名前:わいひら 投稿日:2017/06/15(木) 14:57:40 ID:f2be16636

    うまくいったようでよかったです。
    解決方法のご報告もありがとうございます。

  20. 名前:とおる 投稿日:2022/08/29(月) 20:58:38 ID:be11a0f61

    https://nelog.jp/add-ads-before-h2
    こちらの記事にて質問させて頂いたとおるです。
    どちらにコメントしてよいか迷ったのですが、誘導して頂いたのでこちらで質問させていただきます。

    $the_content = preg_replace($h2, $ads.$h2s[0], $the_content, 1);
    このコード部分のついてなのですが、これは
    $the_content = str_replace($h2, $ads.$h2s[0], $the_content, 1);
    という表記では上手く行きませんでした。
    https://nelog.jp/add-ads-before-h2
    こちらの記事では「str_replace」を使ってらっしゃるようだったので、疑問に思い質問させていただきました。
    浅知恵ではありますが、「str_replace」の方が若干処理速度が速いと聞いた事があったので、「str_replace」が使えるなら使いたいと思い、変更してみましたが、fatal errorになってしまいました。

  21. アバター画像 名前:わいひら 投稿日:2022/08/30(火) 20:34:27 ID:267909a08

    https://nelog.jp/add-ads-before-h2
    こちらの記事では、preg_match_allの返り値の配列内の文字列に対して使用しているので問題ありません。

    $the_content = preg_replace($h2, $ads.$h2s[0], $the_content, 1);

    上記のコードだと、preg_replaceは正規表現で検索する関数なので$h2も正規表現なので問題ありません。

    $the_content = str_replace($h2, $ads.$h2s[0], $the_content, 1);

    これだと、str_replaceは文字列(もしくは配列)で検索する関数なのに$h2の中身は正規表現なのでエラーが出るんだと思います。
    第1引数($h2)に正規表現を使用するのに「str_replace」は使用できません。

    一応、こちらなどを参照してみると参考になるかもしれません。
    https://www.tohoho-web.com/ex/regexp.html
    https://www.php.net/manual/ja/function.preg-replace.php
    https://www.php.net/manual/ja/function.str-replace.php

  22. 名前:とおる 投稿日:2022/08/30(火) 22:36:59 ID:8c0a32ab6

    わいひら様
    返信ありがとうございます。
    str_replaceは正規表現を使えない事は知っていたのですが、そもそも$h2が正規表現になっていたのですね。
    https://nelog.jp/add-ads-before-h2
    こちらの記事では、[0]が付いてる事からこれが返り値の設定なんですかね?
    参考記事までつけていただいて、ありがとうございます。
    まだまだPHPの知識が乏しく覚える事が多くて大変ですが、コツコツ勉強していこうと思います。

  23. アバター画像 名前:わいひら 投稿日:2022/09/01(木) 11:23:00 ID:2661322cf

    こちらの記事では、[0]が付いてる事からこれが返り値の設定なんですかね?

    返り値というか、返り値の配列の中から必要な部分を取り出している状態と言った方が良いのかもしれません。
    返り値というのは、例えばpreg_match_allという関数を使った場合であれば、その関数が返す値(関数で処理後の出力結果)です。