「Google」カテゴリーアーカイブ

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に変更して完了。

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

【解決済み】Googleファミリーリンク13歳以上になった後の設定方法、「管理ツールを設定」画面でスマホに赤く「!」が出て動かない

13歳の誕生日後、ファミリーリンク親アプリで、子供の情報が見れなくなる

中学生になり、子供の年齢が13歳以上になるとGoogleのファミリーリンクアプリが使えなくなる。

状況は下記の通り。

・13歳の誕生日の後もしばらく普通に使えていた
・GPSの監視などができなくなった
・子どもが自分で解除したわけではない(解除したら解除しましたよとメールが来る)
・画面ロック等の機能も使えない
・夜間の自動ロックなどもかからない

昨日まで見れてたのに、親のファミリーリンクアプリを見ても、スマホが赤で「!」、「管理ツールを設定」「詳細」以外何も見えない。

「管理ツールを設定」は何も反応しない

「詳細」を押しても意味はない。何ができるのかという文章が読めるけど、読めるだけで実際には何もできない。

こんな時の解決方法。
 

子どもスマホにファミリーリンクアプリをインストール

使えない原因は、簡単に説明するとこんな感じ。

13歳未満の場合は→
親Googleアカウントに紐づけされた、子Googleアカウントをファミリーリンク経由で作っていた。

13歳以上になると→
子Googleアカウントが親Googleアカウントから独立するので、子Googleアカウントに対しての親ファミリーリンクのリンクが死ぬ

というわけで、解決方法は、

子スマホのファミリーリンクアプリから子アカウントを一旦削除。

子スマホに新しく
18歳未満のお子様向けGoogleファミリーリンク
というアプリをインストールする(子のPlayストアから)。

Googleのサポート情報はこんな感じ。

子ファミリーリンクアプリ→左上のメニューからアカウント削除→削除→パスワード入力で削除

子スマホでFalmilyLinkアプリをアンインストール

ちなみに子スマホでアプリをアンインストールしてもアプリのアイコンは見えたままになる(30日後に消える)

子スマホで新しく「18歳未満のお子様向けGoogleファミリーリンク」をインストール完了して開いて

その後、再度、親ファミリーリンクとリンクさせる。
 
なお、一部機能が正常に動かない場合(ロックはできるが、GPSだけダメとか)は、親スマホのファミリーリンクアプリ、ファミリーリンクマネージャーもを一旦アンインストールして、もう一度インストールしなおしてから設定するとうまくいく場合もある。
 

それでも解決しない場合、現在のファミリーリンクの状況確認方法は下記。
 

PC版(Web版)でログインして状況確認

Webブラウザで「ファミリーリンク」と検索して、Android で使っているGmailのアカウントでログイン。

こんな感じでファミリーリンクでリンクされているメンバーが見える。

子が見えてない場合は、そもそもリンクされてないので、初期設定から再開。

子をクリックすると、「このアカウントはファミリーリンクで管理されています」と見える。

管理されていますと出るのに、デバイスの設定を見ると「赤!」
→ つまりリンクはできてるのに端末情報が得られない。

次に、メールを確認。
メールの通知はちゃんと来てるが、「子がファミリーリンクの解除を行いました」といった趣旨のメールは来ていない。
つまり、子の造反により、リンクが解除されたわけではない。

試しにアプリをインストールすると、
アプリインストールの通知は届く。

通知は届くのに、ロックやGPSでの位置情報が見えない状態。

この時は、18歳未満用のファミリーリンクのアプリを子スマホにインストールするといい。
 

余談だが…

ファミリーリンクアプリの親アプリの評価は上々で、☆4つぐらいある。

しかし、子アプリの評価がひどく☆1個しかない。

レビューの中身を見ると、子供側の評価が
「くそアプリ、うざすぎる」

「ホントうざい、Google何考えてるの?俺高校生だぞ?」

「ゴミアプリはやくサービス終了してくれ。不便でしかない。事あるごとに親に制限かけられてLINEできなくなって仲間外れにされてるんだぞ、「親に宿題やれって怒られてロックされたんだわ」とか恥ずかしくて言えねーよ。この世から消え去れクソアプリが。」

と散々だ。

子どもの健やかな成長のためにも、13歳以上の導入は子供と親でよく話し合った上で使ってください。
とGoogle自身も語っている。

【詐欺注意・解決済】Googleメンバーシップ・リワード prizemediayou.comが突然表示される

2段構えのアドウェア(マルウェア)・ウイルス

まず、完全にスパムなので騙されないように注意

下記、注意点や解決法などを紹介。

様々なURLがあるが、今のところ
prizemediayou.com
yowwinnerprize.com
など…

「おめでとうございます!Googleをお使いのあなた!」などと表示され、iPhone XやiPad Air2が当たったとコメントが書かれている。

解決法を検索すると、
「spyhunter」などのウイルス対策ソフトをインストールしろとでてくる。
「spyhunter」ももちろんアドウェア、広告を垂れ流し続ける最低のソフトなので絶対にインストールしないこと。
 

症状

2017年ごろからから散見されるようになり、PC、スマホ(iPhone、Android問わず)、タブレットでネットを見ている時に突然表示される。
ここで個人情報やクレジットカード情報を狙われるが、絶対に入力してはいけない
 
更にやっかいなのが、Googleメンバーシップ・リワードの削除方法を検索すると、別のアドウェアの記事が多くヒットする。

Google 当選詐欺原因

原因は主に2つ。
1.閲覧中のWebサイトにマルウェアが埋め込まれている場合
2.ブラウザのアドオンなどと共に侵入してくる場合

1.閲覧中のWebサイトにマルウェアが埋め込まれている場合、これはコチラ側では対処のしようがない。

セキュリティの甘そうなWebサイト、検索下位のサイト、日本語が怪しくて自動翻訳っぽいサイト、違法ダウンロードなどの裏サイトっぽいものなどは見ないように心がけよう。

2.ブラウザのアドオン(拡張機能)やスマホのアプリに乗っかって、一緒に入って来る場合がある。
スマホアプリの場合は、最近インストールしたもの(特に公式アプリでないものは注意)をアンインストールする。
PCの場合は、ブラウザやソフトにインストールしたソフトを削除してから、ウイルス対策ソフトでスキャンしておく、などの対策で削除ができる。
 

対策

現在、最もポピュラーなアンチウイルスソフトの「Microsoft Defender」では有効な対策がとられていないと言われている。

ウイルスバスター、Avast!などのウイルス対策ソフトの、ブラウザチェッカー機能(閲覧しているWebサイトが危険でないかを見守る機能)で一定の対策が可能だとの話だが、ウイルス(スパイウェアなども)と、対策ソフトの攻防はまさにイタチごっこ。

これを入れておけば常に絶対大丈夫!という銀の弾丸は存在しない。

対策を講じつつ、もしも怪しいサイトやメールが来ても絶対に個人情報を入力しないように注意していくことが重要。