WordPressの検索ページでAdSenseポリシー違反の警告と対処

先日AdSenseポリシー違反の警告が届いており急遽対処をしました。

その指摘内容は、Wordpressに標準で備わっているサイト内検索機能についてです。

WordPressではURLの後ろに”?s=検索ワード”を付加すると、サイト内検索結果が一覧表示できるようになっています。

標準装備されているサイト内検索のウィジェットを使うと、”?s=検索ワード”で検索してくれるようになるわけです。

ですがこれは悪用されるリスクがありました。外から見れば、「検索ワード」の数だけページ(コンテンツ)があるように「見える」のです。

問題は、その検索ワードが全くヒットしなかった場合です。そうするとNot Foundとなり、検索結果がでません。

にもかかわらず、AdSense広告は表示されるために「コンテンツ無しでAdSense」が表示ということになってしまうのです。

対策としてはサイト内検索を停止&404ヘ飛ばす

まずやるべきことは”?s=検索ワード”での検索を無効化することです。そのコードは海外の方が親切にも作成してくれているので、それを貼ればOKです。次の項目で掲載しています。

私が利用しているWordpressテーマのSimplicityは404のときには自動的にAdSense広告を非表示にするようにしてくれます。そのために404へ飛ばすことによって、広告スクリプトを返さないようにするのが一番手っ取り早いです。

これだとサイト内検索ができないので、サイト内検索はGoogleカスタム検索を使うことにします。

サイト内検索を無効にするためのphpコード

私はSimplicityというWordpressテーマを使っているためそれを前提に解説します。

「外観」→「テーマ」から「Simplicity」の編集を選択し、function.phpの編集モードにします。

function.phpの編集画面になったら、一番下に以下のソースコードをそのまま貼り付けます。

function fb_filter_query( $query, $error = true ) {

if ( is_search() ) {
$query->is_search = false;
$query->query_vars[s] = false;
$query->query[s] = false;

// to error
if ( $error == true )
$query->is_404 = true;
}
}

add_action( 'parse_query', 'fb_filter_query' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

AdSenseを利用する場合、サイト内検索はGoogleカスタム検索を使う

今回の対策でWordpress標準装備のサイト内検索が使用できなくなってしまったので、Simplicityの製作者のわいひらさんはどのようにしているのかサイトを拝見したら、Googleカスタム検索を利用されていました。

というわけで私もGoogleカスタム検索に移行していくことにします。サイトの数だけ作成するのが面倒ですが、収益化も可能ですし、Wordpress標準装備の検索より良いと思います。