サイト内検索のスパム対策!パラメーター「s」を別の文字列に変更する

更新日: 公開日:2022/02/13

WordPress 運営サイトに対して、サイト内検索を使ったスパムがあることを知りました。

検索ワードに不特定多数の文字を仕掛けて、検索結果をインデックスさせるスパムです。検索ワードは「〇〇の検索結果」と title タグに設定されるため、それがインデックスされると大変なことになります。

不特定多数のサイトでインデックスされることで、そのスパムワードで検索すると大量の検索結果が得られてしまう。様々なドメインに対し、特定のワードを含んだページがインデックスされることで、SEO 面での効果を狙ったものです。

実際のところ Google 側でもスパムと把握しているので、大量のスパム攻撃をしても効果は一過性のもの。SEO でプラスになることはありません。

検索スパムに攻撃された跡がある

実際に僕の管理するサイトにも、検索スパムが仕掛けられていました。

検索機能を利用したスパム

この画像は Search コンソールのカバレッジより、確認したもの。幸いなことに検索結果のページは noindex としていたため、インデックスされずに、除外された URL として検知していました。

このままにしても、特に被害はありません。ただこのような URL が存在すること自体は、気分が良いものではありません。そこで次の方法にて WordPress のサイト内検索のパラメーターを変更し、上記のような URL でアクセスされても無効になるような仕掛けを行います。

自作のテーマや作者不明のフリー素材のテーマなど、SEO 対策の設定を誤ってサイト内検索結果のぺージに noindex がないケースが稀にあります。この場合、完全にサイト内検索スパムを食らって、既に変なインデックスが登録されている可能性があります。

仮にインデックスされていたとしても、Google がスパムを把握しているおかげで、自分のサイトがマイナス評価を受ける可能性は低いです。ここで紹介する対策を行ってしばらく待てば、スパムの被害にあったインデックスは削除されると思います。

サイト内検索のスパム対策

スパム対策として行う内容は2つ。

  • サイト内検索のパラメーターを「s」から変更する
  • ただし管理画面のパラメーターは「s」のまま(変更できない)
  • Search コンソールでパラメーター「s」の URL をクロールしないようにする

通常 WordPress では、サイト内検索を行うと URL の末尾に「?s=xxxxx」のようにパラメーターが付与されます。これは WordPress の全てのサイト内検索で使われる、共通のパラメーターです。

つまりどのサイトに対しても、パラメーター「s」を使ったスパム用 URL が作れてしまうのです。そこで、このパラメーターを別の文字列に変えて、外部からの検索スパム URL が存在しない状態(無効化)にします。

そして Search コンソールの設定にて、パラメーター「s」を無視するように指示する流れです。

ここで紹介するコードは、オリジナルで作成したコードです。ただし動作不備が生じても保証できないので、コピペして利用するなら自己責任でお願いします。

WordPress 検索パラメーター「s」の変更方法

最初に注意点を。一番やってはいけない対処法は、リダイレクトを使ったパラメーターの変更です。

リダイレクトを使うと、パラメーター「s」でアクセスされた URL が、変更したパラメーターに置き換わってアクセスされます。つまりスパム用に自動生成された URL も、そのままリダイレクトされてしまうのです。

対応するならパラメーター「s」を完全に無効化して、別のパラメーターを設置する。この方法であれば、リダイレクトされず、生成されたスパム用 URL も無効にできます。では具体的なソースコードをご覧ください。

【functions.php】検索パラメーター変更
<?php
/* 新しいパラメーターを追加 */
add_filter('init', function(){
    global $wp;
    $wp->add_query_var( 'kensaku' );
} );

/* 検索パラメーターの動作 */
add_filter( 'request', function( $request ){
    // 管理画面の検索以外はパラメーター s を無効化
    if ( isset( $_REQUEST['s'] ) ){
        if ( !isset( $_REQUEST['post_type'] ) ) {
            // トップページへリダイレクト
            wp_safe_redirect( home_url( '/' ) );
            exit;
        }
    }
    elseif ( isset( $_REQUEST['kensaku'] ) ){
    // 新しいパラメーターで検索を実行
        $request['s'] = $_REQUEST['kensaku'];
    }
    return $request;
} );
?>

このコードは、テーマファイル内にある functions.php に追記すれば OK です。このまま末尾に追記するだけで変更されます。

functions.php は編集ミスしたら動かなくなるので、WordPress 内のテーマエディターは使わないこと。また修正前にバックアップを取得するのを忘れずに。

ここでは検索パラメーターを「s」から「kensaku」に変更しました。5・18・20行目の kensaku を変更すれば、好きな文字列をパラメーターにできます。

WordPress 管理画面における検索ボックスは、name 属性が変更できません。そのためパラメーター「s」のままでも検索が有効になるよう、「post_type」のパラメーターがあるときは、これまで通り検索するようにしています。この方法はスパム対策としては不完全であるものの、パラメーター「s」だけを使ったサイト内検索は無効化しています。

この手法が、世界規模での主流な対策とならない限りは問題ないでしょう。

続いてテーマ内にある HTML の検索フォームも修正します。検索ボックスとなる input タグの type="search" にある name 属性を "s" から変更します。これで検索パラメーターが変更されます。

検索フォームの HTML変更
<!-- 変更前 -->
<input type="search" …… name="s" …… >

<!-- 変更後 -->
<input type="search" …… name="kensaku" …… >

HTML の変更箇所はテーマによって異なります。serchform.php のように個別ファイルで用意されている場合や、個別で複数箇所設置しているケースもあります。全体的にチェックするのをお忘れなく。

これらのソースコードを反映すると、検索用 URL が次のように変わります。

https://webllica.com/?kensaku=検索ワード

変更後のパラメーター「s」の扱い

上記の対応をすると、パラメーター「s」を使ったページはトップページにリダイレクトされます。

つまり

https://webllica.com
https://webllica.com/?s=検索ワード

どちらも同じ https://webllica.com の URL でページが表示されます。あとは少しでも不安が残るのであれば、パラメーター「s」がついたページを Google がクロールしないよう、次の方法で指示します。

Search コンソールでの対応

ここではパラメーター「s」を含む URL のクロールをブロックする手順です。詳しい内容は Search コンソールのヘルプに記載があります。

このページに書いてある通り URL パラメータツール を開きます。そして対象となるサイトのプロパティを選択。

Search Console プロパティを選択

登録していないサイトであれば、ここから追加できます。

[パラメータを追加] ボタンから、パラメータ「s」を除外対象として追加。プルダウンは「いいえ:ページのコンテンツには影響しません」を選択。

Search Console でパラメーター「s」をクロール対象外にする

そもそも次の URL が全て同じトップページになるので、パラメータ「s」はコンテンツに影響しないパラメータとして登録します。

https://webllica.com
https://webllica.com/?s=検索ワード
https://webllica.com/?s=他の検索ワード

これだと同じページに複数 URL があるように見えてしまうので、先ほどのプルダウンで「いいえ」を選択したわけです。これで同一ページに複数 URL が存在しても、クロールされるのは代表的な URL のみ。

トップページの代表的な URL は、当然ながらパラメーターなしの URL です。これでパラメータ「s」がついた URL が、クロール対象外になります。

以上、WordPress のサイト内検索を使ったインデックス登録スパムの対処法でした。

この記事をシェアする

このブログの運営者

NJ

元システムエンジニア。個人事業主として独立して Web サイト運営、ポップデザインや動画制作など、パソコンでモノづくりしています。