「adsense」タグアーカイブ

Google AFS (AdSense for Search) カスタム検索広告(CSA)をWordPressに導入する方法

Googleカスタム検索広告をWordPressに導入する方法

WordPressの自分のサイト内の検索ボックスから、自分のサイト内の記事検索をする時に、検索文字に関連したGoogle広告を表示させることができる。

これは AdSense for Search カスタム検索広告と呼ばれている。

検索向けのAdSenseには2種類ある。
1.自分の(WordPressの)検索機能を使った検索結果にAdSenseを表示させる「カスタム広告検索(CSA)」
2.Googleの提供する「AdSense検索エンジン」を埋め込む

今回はこのパターン1のカスタム検索広告(CSA)導入方法のメモ。

なお、パターン2はGoogleから提供されるコードを貼りつけるだけなので簡単。


 

カスタム検索広告(CSA)のメリット

AdSense検索エンジンの場合はGoogleの検索システムを使うので、検索の表示のされ方や広告の表示のされ方、フォント、色などカスタマイズできない部分が多い。

特に検索結果の表示順や、デザインのカスタマイズ性が低いため、自分のサイトの雰囲気に合わない場合がある。

一方で、カスタム検索広告(CSA)は、元々WordPressで使っている検索機能に、Googleの広告を表示させるだけなので、検索結果や表示順、デザインは今まで通りだ。

これは大きなメリットだと言えると思う。
 

Google カスタム検索広告(CSA)を使うために必要な事

簡単にポイントを箇条書きしておく。

・WordPress検索機能で検索された「文字列(クエリ)」をGoogleに渡す必要がある
・CSAのリクエストはアクション1回につき1件のみ
・コードを設置(広告を表示)できるのは検索結果ページのみ
・ユーザーに対して検索を誘導してはいけない(例えば、「ぜひ、検索してください!」などと書いてはいけない)
・CSAは検索結果と共に表示する(検索結果を表示せず広告だけを表示してはいけない)
・検索結果の件数より広告の数のが多くなってはいけない
・上記の環境を整えたテストページを作って、Googleの担当者にチェックしてもらわなければいけない
・テストページのレイアウトやデザインは本環境と一致していなければいけない
・チェック前の段階では、一般ユーザーに影響がある形でテストページを公開してはいけない(PVがほぼないページならOK)

なかなか面倒だが、一つずつこなしていけば実装可能なので頑張っていこう。
 

AdSense for Searchのタグをサイト内に埋め込む

ステップ1
WordPressの

<head></head>

内に、Google AFS CSAのコードを貼りつける。

なお、AFSのコードはこんな感じだ。

<script async="async"
src="https://www.google.com/adsense/search/ads.js"></script>
<!-- other head elements from your page -->
<script type="text/javascript" charset="utf-8">
(function(g,o){g[o]=g[o]||function(){(g[o]['q']=g[o]['q']||[]).push(
arguments)},g[o]['t']=1*new Date})(window,'_googCsa');
</script>

これは管理画面のテーマエディターからできる。(WordPressの子テーマ化は完了している前提)

このコードはGoogleタグマネージャーを使うと動かないので、直接head内に貼り付けること。

ステップ2
WordPressの

<body></body>

内に、Google AFS CSAのコードを貼りつけるのだが…

<script type="text/javascript" charset="utf-8">
var pageOptions = {
"pubId": "pub-9616389000213823", //このIDはテストページ用なのでこのまま使用可
"styleId": "5290249905",
"query": "" //←ここにWordPressの検索クエリを代入する必要がある
};
var adblock1 = {
"container": "afscontainer1"
};
_googCsa('ads', pageOptions, adblock1);
</script>

ここでは、Googleに渡すqueryに、WordPressの検索クエリ(ユーザーが検索した時に入力した値)を代入しなければならないため、単純に body 内にコードを貼りつけるだけではダメ

PHPを使ったり色々な方法があるが、ここではJavaScriptを使った方法を紹介

下記のコードの記述したjsファイルを用意する。ファイル名は何でもいいが、ここでは「afs-body.js」とした。
WordPressの子テーマフォルダ内にアップロード
場所はどこでもいいが子テーマフォルダ内に「js」フォルダを作ってその中にアップロード。

var searchQuery = mySearchQuery.searchQuery;
var pageOptions = {
"pubId": "pub-9616389000213823",
"styleId": "5290249905",
"query": searchQuery
};
var adblock1 = {
"container": "afscontainer1"
};
//alert(searchQuery); ←ここのコメントを外すと、ポップアップでsearchQueryが出てくるのでチェックできる
_googCsa('ads', pageOptions, adblock1);

「var searchQuery = mySearchQuery.searchQuery;」で、WordPressのクエリをsearchQuery(変数)に代入し、そのままGoogleの”query”に渡している。

これをfunctions.phpから呼び出すように設定する。

ステップ3
続いて、WordPress管理画面の「外観」→「テーマエディター」から「functions.php」に下記を追記

function my_wp_footer(){
  $mySearchQuery = array(
    'searchQuery' => get_search_query()
  );
  wp_enqueue_script( 'afs-body', get_stylesheet_directory_uri() . '/js/afs-body.js' );
  wp_add_inline_script( 'afs-body', 'var mySearchQuery = ' . wp_json_encode( $mySearchQuery ), 'before' );
}
add_action('wp_footer', 'my_wp_footer');

これで、jsフォルダ内のafs-body.jsを呼び出す。
 

WordPressでGoogleによる審査用のテスト環境ページを作る

ステップ1
子テーマの中に、search.phpsearchform.phpを親テーマからFTPなどを利用してコピーして入れる。
それぞれをsearch-test.phpsearchform-test.phpに名称変更する。

※SANGOのテーマでsearch.phpとsearchform.phpという名前だが、テーマによっては名前が違う可能性がある。要は検索フォーム用のテンプレートと、検索結果を表示するテンプレート

これは、テスト環境用の検索フォームと検索結果ページを新たに作る必要があるため。
 

searchform-test.phpの中身のpost_typeのvalueを「post」→「test」に変更。

<input type="hidden" name="post_type" value="test">

 

ついでに、普通の検索フォームと区別するため下記の「検索」を「T 検索」に変更。

<input type="search" class="searchform__input" name="s" value="" placeholder="T 検索" />

※これは見た目で区別がつけやすいためだけなので、別にやらなくてもいい。
 

searchform-test.phpの検索ボタンを押した時に付与するタグをsearchからsearch-testに変更

<button type="submit" class="searchform__submit" aria-label="検索"><?php fa_tag("search-test","search-test",false) ?></button>

 

search-test.php(検索結果ページ)は、タグsearchでなくsearch-testの結果から取得するようにするため「search」→「search-test」に変更。

<h1 class="search-title"><?php fa_tag("search-test","search-test",false) ?>「<?php echo esc_attr(get_search_query()); ?>」の検索結果</h1>

 

search-test.phpの検索結果一覧表示の上あたりに、広告タグを入れたいところなのだが
Googleの検索広告のポリシーに「検索結果の件数より広告の数のが多くなってはいけない」というのがあるため、検索結果が0件だった場合には広告を表示させてはならない。

ということで、下記の広告タグは別の場所に入れることにする。

<div id="afscontainer1"></div>

search-test.phpの「post-grid」を「post-grid-test」に変更。

<?php get_template_part('parts/post-grid-test');//記事一覧?>

これでsearch-test.phpで表示される検索結果一覧の部分はparts/post-grid-test.phpを参照するようにする。
 

親テーマフォルダから「parts/post-grid.php」ファイルを、子テーマフォルダにコピーして入れる

子テーマ無いのファイルを「post-grid-test.php」に名称変更しておく。

post-grid-test.php22行目あたりから広告タグを追加する。

  if( is_sidelong() ): // 1)横長
  ?>
  <?php if( is_search() ): ?><div id="afscontainer1"></div><?php endif; ?> //GoogleAFS広告タグ
    <div class="sidelong">
      <?php
        $i = 1;
        $shown_count = 0;

検索結果の表示スタイルによって場合分けされているので、43行目あたりにもに忘れないように追加しておく。

<?php
	else : // 2)カードタイプ
?>
  <?php if( is_search() ): ?><div id="afscontainer1"></div><?php endif; ?> //GoogleAFS広告タグ
    <div class="<?php echo $className ?>">
      <?php
        $i = 1;
        $shown_count = 0;

 

広告タグをis_searchでくくっているのは、検索結果画面以外(例えばカテゴリ一覧画面など)では出力されないようにしているためだ、

<?php if( is_search() ): ?> <?php endif; ?>

 

※なお、この辺りもSANGOのテーマの話なので、ファイル名やディレクトリはテーマによって異なるかと思う。
 

子テーマのfunctions.phpに記述

function search_form_shortcode( ) {
 ob_start();
 get_template_part('searchform-test'); // searchform-test.phpを読みこみ
 return ob_get_clean();
}
add_shortcode( 'search', 'search_form_shortcode' );

これで、searchform-test.phpをテンプレートとして読み込ませつつ、ショートコードとして登録。→記事中にsearchform-testを埋め込めるように。

同じく、子テーマのfunctions.phpに記述

function cptui_register_my_cpts() {
$labels = [
"name" => __( "test", "custom-post-type-ui" ),
"singular_name" => __( "test", "custom-post-type-ui" ),
];
$args = [
"label" => __( "test", "custom-post-type-ui" ),
"labels" => $labels,
"description" => "",
"public" => true,
"publicly_queryable" => true,
"show_ui" => true,
"show_in_rest" => true,
"rest_base" => "",
"rest_controller_class" => "WP_REST_Posts_Controller",
"rest_namespace" => "wp/v2",
"has_archive" => false,
"show_in_menu" => true,
"show_in_nav_menus" => true,
"delete_with_user" => false,
"exclude_from_search" => true,
"capability_type" => "post",
"map_meta_cap" => true,
"hierarchical" => false,
"can_export" => false,
"rewrite" => [ "slug" => "test", "with_front" => true ],
"query_var" => true,
"supports" => [ "title", "editor", "thumbnail", "revisions", "page-attributes", "post-formats" ],
"show_in_graphql" => false,
];
register_post_type( "test", $args );
}
add_action( 'init', 'cptui_register_my_cpts' );

これは管理画面にtestっていうスラッグで新たなメニューを追加。
「投稿」とは別に「投稿」と同じ要素を持ったカスタム投稿タイプを追加(記事一覧には出てこないようにしてるのもここ)。
イメージとしては完全別ページのカテゴリを追加みたいな感じ。

なお、カスタム投稿タイプの追加はプラグインを使ってでもできる。
代表的なプラグインはCustom Post Type UI
 

カスタム投稿「test」に適当に本記事をコピペする。
Googleの検索広告を表示させる時に検索結果がゼロではダメなので、「test」にも何個か記事が必要なため。

コピペ記事とは別に「test」に新規投稿
この記事にsearchform-test.phpを埋め込む
functions.phpに記載してショートコード[search]として登録しているので、それ呼び出す。

子テーマのfunctions.phpに記述

function custom_search_template($template){
   if ( is_search() ){
      $post_types = get_query_var('post_type');
      foreach ( (array) $post_types as $post_type )
      $templates[] = "search-{$post_type}.php";
      $templates[] = 'search.php';
      $template = get_query_template('search',$templates);
   }
    return $template;
}
add_filter('template_include','custom_search_template');

検索結果をsearch-{$post_type}.php に出力するように変更。

post_typeはtestで登録してるので、すなわち
post_typeがtest の場合は serch-test.php をテンプレとして使う。という意味になる。

同じく、query関係で、search-test.phpの上の方にphp記述追加

<?php
global $wp_query;
$total_results = $wp_query->found_posts;
$search_query = get_search_query();
?>

search-test.phpでは、WordPressの検索(search)の仕組みをそのまま使っている。
でも、search-test.phpに、クエリ(検索文字)を渡してくれないので、ここでグローバル変数wp_queryからsearch_queryにひっぱって代入している。

これによって、検索結果ページにもちゃんとクエリ(検索文字)が引き継がれて表示される。

これで、テスト環境の構築とクエリをGoogleに渡して広告を表示させる行程のは終わり
 

Googleの担当者に連絡してサイトをチェックしてもらう

チェックには1週間程度必要だとのこと。

実際には3,4日で審査完了することがほとんどだ。
 

テスト環境から本環境へ移行

本環境に適用する時は、
testに投稿した記事及び検索フォーム用のページを全て削除。
search-test.phpを削除。
searchform-test.phpを削除。
search-grid-test.phpをsearch-grid.phpにリネーム。

testの記事はゴミ箱に入れるだけでなく、必ず削除すること。←後でカスタム投稿タイプを削除した際にも、記事が残ってしまうため。

functions.phpに記述した、「search-test」のショートコード追加カスタム投稿タイプ追加searchform-test.phpからの検索はsearch-test.phpに飛ぶようにした部分は全て削除又はコメントアウト。

※プラグインを使ってカスタム投稿タイプを追加した場合は、プラグインを無効化して削除。

結果的に残る部分は
jsフォルダに作ったJavaScriptファイル(afs-body.js)
search-grid-test.phpをリネームしたsearch-grid.php
functions.phpに記述したJavaScriptを呼び出す記述

の3つだけになるはず。

最後に
afs-body.jsの中の「”pubId”: “partner-pub-xxxxxxxxxxxxxxx”」のIDをテスト用のものから自分のIDに変更して完了。

これで本環境への適用と、テスト環境の廃止も完了だ。

WordPress をAMP化した時に アドセンスのエラーで表示されないのを修正する手順

WordPress を公式プラグインでAMP対応にしてみた

公式プラグイン名はその名も AMP

公式プラグインだけあって、AMP化は概ね問題ないはず。

AMP化後24時間以内に、Googleから New AMP issues detected for site https://xxxx.net/ のようなタイトルで、AMPページの問題点が送られてくることがある。

まず広告を掲載する前に、このエラーを解決していく必要がある。

AMPページの問題を一つずつ解決していく

問題があると言われたページを下記のURLで張り付けてテストをすると。

https://search.google.com/test/amp

色々なエラーを教えてくれる。

WordPressで代表的なエラー(簡単に直せるもの)を2個程紹介。

Error in required structured data element
これは、ファビコンが無い場合に出るエラー。

エラー詳細を確認すると、logo 部分に、A value for the logo field is required と言われている。

管理画面→外観→カスタマイズ→サイト基本情報→サイトアイコンに適当な正方形の画像をアップロードすることで解決できる。

Image size smaller than recommended size
これは、AMPページ内に使っている画像ファイルの大きさ(容量ではなくサイズ)が小さい時にでるエラー。

該当ページの小さい画像を大きいものに差し替える必要がある。

Google的推奨サイズは横幅1200px以上でなかなかのハードルの高さ。

なお、画像の両サイドに白い部分を塗り足す等の対応でもOKだとGoogle公式ページで紹介されている。
 

AMP用 Googleアドセンスの追加

まずAMP用のGoogle Adsenseには大きく2種類ある。

自動広告と、従来のテキスト広告だ。

自動広告は、コードを、WordpressのAMP用テンプレートのヘッダーとフッターに記述しておくと、自動的に文中に広告を入れていってくれる。

自動広告貼り付け手順は Google Adsense の広告コード取得の画面で丁寧に説明してくれているので割愛。

WordPressのfunctions.phpを編集して、テンプレートのヘッダーとフッターにコードを入力させるのを忘れずに。
 

テキスト広告は、従来のアドセンスと同じように、自分で1つずつ、表示する場所にコードを貼り付けていく。

AMPのテンプレートファイルを編集する必要があるので、AMPテンプレートを子テーマ化しておかなければならない。

子テーマフォルダ(wp-content/themes/…)の中に amp フォルダを作ってその中に amp 用テンプレートを入れる。

記事部分に広告を挿入するなら
(wp-content/themes/子テーマフォルダ名/amp/single.php) のような形にする。

single.php の広告を表示したい場所に、Googleアドセンスで取得した、広告コードをコピペして完成。
 

広告を貼り付けたらまたエラーが来た場合

広告を入れてから表示されるまでに30分ぐらいと言われるが、実際には数時間必要な場合もある。

広告を入れた後にエラーが出る場合は、いつまでたっても表示されない(24時間以内にGoogleからAMPの問題点のメールが来る)。

The tag ‘amp-ad extension .js script’ is missing or incorrect, but required by ‘amp-ad’. This will soon be an error.
amp-ad 拡張タグのJSスクリプトが存在しないか正しくありませんが、amp-ad には必要です。これはまもなくエラーになるでしょう。

というエラーが出た場合。

これは広告タグを貼り付けているのに、必要なjsファイルをヘッダーに追加できていない場合に表示される。

この場合は、前述のfunctions.phpを編集するのと同じ要領で、

<script async custom-element="amp-ad" src="https://cdn.ampproject.org/v0/amp-ad-0.1.js"></script>

このコードをAMPテンプレートのヘッダーに挿入することで修正可能。

Googleアドセンスの銀行口座人名義を変更する方法。結婚して名字が変わった場合など。

Google Adsense 結婚や離婚で銀行口座の名義が変わってしまった場合の対処法

 
結婚や離婚、その他の理由で名義変更をしたい時、アドセンスのアカウントの名義はすぐに変更できるが、銀行口座の名義の変更の方法が分かりにくいので解説。

なお、アドセンスアカウントの譲渡は認められていないものの、法人から個人へなどのアカウントの移行を含めて、この方法で名義・住所の変更ができる。
 
 

Google Adsenseの口座名義が変更できずに振り込み失敗になる。

 
今回は、結婚して苗字が変わったという流れで名義変更をする方法を紹介。

まず、銀行口座の名義を銀行で変更した場合、アドセンスの振込みがエラーになる。すると、振込みが失敗しましたというメールが届く。

アドセンスアカウントにログインし、「右上歯車 → お支払い → お支払い履歴」の下の方を見ると、
0-rireki
キャンセルされた自動支払い: ufj-bank 普通 • • • **21、金額: ¥81,029

というように、エラーの履歴が残っている。

更に、支払キャンセルの理由に「住所が一致しません」「名義が一致しません」「提供されていません」など支払エラーの理由も見ることができる。

 
 

振込エラーのメール

 

billing-noreply@google.com や、 billing-noreply@google.co.jp から、

The payment we sent to your Google AdSense account on 日付 was unsuccessful.

Check your payment details and contact your payment provider to ensure that there are no issues. Here’s how you can update your payment settings:
1. Sign in to your AdSense account.
2. Click the gear icon in the top-right corner of any tab, then, from the drop-down list, select “Payments”.
3. In the left sidebar, choose Payment settings.
4. Update your form of payment information.

(日付)に行った、アドセンスの振込みがキャンセルされました。

お支払い受取人情報を確認し、受取口座に問題が無いか確認してください。あなたの支払い受取人情報の変更方法は以下の通りです。
1. あなたのアドセンスアカウントにログインしてください。
2. 右上の歯車のアイコンをクリックし、ドロップダウンメニューから「お支払い」を選んでください。
3. 左のサイドバーから、「お支払い設定」を選択します。
4. 受取人情報を更新してください。

というメールが届いているはずだ。

 
 

メールの言う通り、アカウントの住所と名前を修正する

 

厄介なのが、メールに書いてある方法では銀行の口座名義が変更できない事だ。でも、アカウントの名義は変更しないといけないので、メールに書いてある通りに作業をしよう。

0-uketorininjyouhou

「右上歯車 → お支払い → お支払い受取人情報」から、アカウントの住所や名前は変更できるので、新しいものに変更しておくこと。

 
 

口座の名義の半角カタカナの部分は修正できないので…

 
銀行口座の名義は変更できないので、一度削除して、新しく追加しなければならない。
「右上歯車 → お支払い → お支払い設定」から銀行口座を一度削除しよう。

銀行口座が1つしか登録されていない場合は、銀行口座をゼロにできないので、その前に別の口座を登録する必要がある場合がある。

どうしても銀行口座がない場合はひとまず、ダミーで存在しない口座を一つ登録するしかない。

2-dummy-bank
ダミー登録してから、

1-bank
名義変更したい口座を一度削除する。
  ↓
削除したものと同じ口座を、新しい名前で登録しなおす。
  ↓
デポジットの確認を行って(通常デポジット振込までに2~5日かかる)
  ↓
メイン受取口座にし
  ↓
ダミーの銀行口座を削除。

これで大丈夫。

ちなみにアドセンスのデポジットの確認がうまくいかない場合は、銀行口座振込 (電子決済) のテスト デポジットの確認
ここからリクエストを送る事ができる。数日後にGoogleのサポートチームが対応してくれるはずだ。