はるかのひとりごと > SEO > WordPressで検索画面をnoindexにする方法
こんにちは。
鈴木はるかです。
今回は、かなり重要な事をお知らせします。

WordPressでは、標準のインストールで検索結果画面はnoindexになっていません。
noindexになっていないと何が起こるのでしょうか?
非常に危険な状態となりますのでよく読んで対処してください。


1.検索結果攻撃の概要

WordPress検索結果攻撃(WordPress Search Result Attack:銘々あたしw)の概要です。
今回の攻撃を受けると、WordPressの画面は、次のようになります。

検索結果画面に宣伝したい文句と、URLなどが表示されます。
httpなどを指定するとうまく機能しないので、ドメインだけが多いです。
具体的には、以下の状態となります。

検索結果攻撃を受けた状態
検索結果攻撃の図

この攻撃は非常に簡単です。

Googlebotは、外部からのリンクが発生すると、そのページのリンクの有効性や状態を確認するため、該当サイトに確認に行きます。
つまり「攻撃側の捨てサイト」から以下のようなリンクを張るだけで良いのです。
<a href=”https://www.harukas.org/blog/?s=私のブログはexample.comです。各種ブランドの偽物製品を大安売りしています。”>偽物販売大好き</a>

簡単ですね^^;

さて、この攻撃を受けたサイトはどうなるのでしょうか?
先に説明した通り、Googlebotはサイトを確認にいきます。
この画面をクロールし、独自性のあるコンテンツ(この場合偽物販売)があると判断すると、Googleは当該コンテンツをインディックスしようとします。

インディックスとはGoogleでキーワードで検索したときその結果に情報を表示する事です。

そうです。
はるかのひとりごと 偽物販売などで検索したとき、このページが表示されてしまうのです。

これは、サイトを運営する上でとっても大きな損失になるに違いありません。
私のサイトのような純情無垢なコンテンツにいかがわしい文言や、ドメインを表示させる事が可能になってしまうのです。

では、実際に攻撃を受けたサイトの検索結果を見てみましょう。

WordPress Search Result Attackの被害状況(2017.02.17の検索結果)
WordPress Search Result Attackの被害状況

今のGoogleで攻撃が成功している状態を別画面で見る

このように中国crackerにより、検索結果に不当な文言を仕込まれています。
単純に、WordPressを設定してサイトを公開しているだけで、このような目に逢います。
それは検索結果など、Googleにインデックスする必要が無いページを、インディックスするように設定にしているからです。

また本ページではWordPressでの対策をメインに記述しますが、この攻撃はWordPressに限らず、ECサイトの検索機能、一般自作構築サイトの検索機能など全において発生する可能性があります。

外部のクエリ(文字列)を自サイトに表示する仕組み全てが、この攻撃の標的の対象になるので以下の観点で見直しが必要です。

・検索ボックスがある
・検索結果を画面に表示する

顧客の利便性を考慮すると、検索ボックスや検索機能というのは必須機能です。
安易に機能の削除などを考えないでください。
問題なのは、「フリー文字列を表示する検索結果画面」をインディックスする仕様になっているか否かです。

検索エンジンからみれば、商品(記事)ページをインディックスしているのであれば、検索結果画面を再びインディックスする必要性は全くありません。なので、検索結果はインディックスしない仕様にするのが当然の施策となるわけです。
これ以外にも404、各種エラー画面(ログインエラー)などインディックスをしても意味がないものも該当します。

さて、対策です。

2.検索結果攻撃の対策

対策は、非常に簡単です。
Google(Yahoo他Googleのエンジンを使っている90%の検索エンジン)とBingは、検索エンジンに対してインディックスをしないという命令が使えます。

これは、検索エンジンへの提案ではなく、絶対命令です。

なお、少々SEOに知識のある方はすぐにrobots.txtでクローラをブロックしようとします。
これは、全く意味の無いの行為ですので注意してください。
robots.txtでのブロックは、クロールをブロックする命令なので、インディックスしないで欲しいという命令では無いのです。
この違いは大きいので、よく認識してください。

robots.txtでクロールをブロックし、noindexを指定する
→検索結果にそのサイトが表示される可能性があります。
絶対命令であるnoindexがブロックされ機能しない

robots.txtは阻害せず、noindexを指定する
→検索結果にそのサイトが表示されることはありません。

ということで、今回の対策はnoindexの指定方法です。
指定方法は、次の3つがあり各々メリットが違いますので、お好きな項目で設定して下さい。
また、既にプラグインを搭載していたり、優秀なテーマの場合は、noindexになっているかもしれません。

検索画面/404画面などので、右クリック→ソースの表示を行い、noindexで検索しMetaタグが記録されているか確認して下さい。

2.1 プラグインを使う

これは簡単なので、オススメです。
私はYoastSEOを使っているのでキャプチャは、これを使います。

noindexページ

見ての通り、この設定は「当たり前すぎて」インストールしただけで自動的に設定され、解除の方法はありません。
非常に安全です。

YoastSEOは、この他にも各ページのnoindexを制御したり、サイトマップを作ったりタイトルを修正したりしてくれる万能プラグインです。私はサイトマップのために使っている感じです^^;
設定は色々影響するので、注意してくださいね。
特にパーマリンクの変更を強要してきますので、注意してください。

なお、同じような機能を持ったAll in One SEOPackなども使えると思いますが、私は使った事が無いので各自で調べてください。

2.2 HEADを編集する

noindexを指定するだけで、プラグインなど使いたくないという人は多いと思います。なので、テーマの編集方法を説明します。

これは、カスタマイズ初級の方には便利だと思います。
meta文を記載するheader.phpを編集する方法です。
ただし、親のテンプレートを編集するとテーマが更新されたときにリセットされますので、子テーマに記載します。

使う関数は以下の二つです。
・is_search()  →検索結果画面かどうか判断します。
・is_404()   →404ページかどうか判断します。

header.php
<?php if( is_search() || is_404() ): ?>
    <meta name="robots" content="noindex,follow"/>
<?php endif; ?>
followというのは、Googlebotに対してリンクをたどりなさいという命令です。
ここは触る必要はありません。

なお、header.phpの記載場所ですが、必ず
<head>から</head>までの間に記述して下さい。
Bodyに記載しても機能するようですが、ルール違反なのでhead内が良いです。

2.3 functions.phpを編集する

これは、フック関数を使う手法です。
中級以上の方が対象です。私が説明するまでもないですね。
(ちなみに私は初級ですw)
関数番号をカスタマイズされている方は的便変更してください。

functions.php
// 検索結果及び404ページをnoindexにする
function add_noindex_action(){
    if( is_search() || is_404() )
    echo '<meta name="robots" content="noindex,follow">';
}
add_action('wp_head','add_noindex_action', 4 );

3.まとめ

今回は、noindexという少しでも間違うと致命的な命令を操作します。
よくソースコードなどを確認してからデバッグをしてください。
また、インディックスは多い方が良いみたいな風潮がありますが、全く違います。
インディックスはコントロールすべき物なのです。不要な物をインディックスする事が無いように検索エンジンを使ってくれたらと思います。

・不要なページをインディックスすると思わぬ事が発生する
・検索結果及び404ページはnoindexにする

ではでは。次回のSEO記事で、また逢いましょう。
またね~♪

コメント一覧

コメントする

Gravatarに登録してログインすると自分専用のアバターを表示できます。

コメントを残す





鈴木はるかのプロフィール画像
(Haruka Suzuki)
仕事:金融システムのSE
好きな物:スイーツ、絶景
趣味:お菓子/アニメ/多趣味

月別の記事を見る