こんにちは。
鈴木はるかです。
今回は、かなり重要な事をお知らせします。
WordPressでは、標準のインストールで検索結果画面はnoindexになっていません。
noindexになっていないと何が起こるのでしょうか?
非常に危険な状態となりますのでよく読んで対処してください。
WordPressと書きましたが一般サイトでサイト内検索を実装している全てのサイトが考慮しなければならない事です。
今回の攻撃を受けるとGoogleなどの検索結果の画面は、次のようになります。
検索結果画面に宣伝したい文句と、URLなどが表示されます。
httpなどを指定するとうまく機能しないので、ドメインだけが多いです。
具体的には、以下の状態となります。
検索結果攻撃を受けた状態
この攻撃はを実行するのは、とても簡単です。
Googlebotは、外部からのリンクが発生すると、そのページのリンクの有効性や状態を確認するため、該当サイトに確認に行きます。
つまり「攻撃側の捨てサイト」から以下のようなリンクを張るだけで良いのです。
例文
<a href="https://www.harukas.org/blog/?s=私のブログはexample.comです。各種ブランドの偽物製品を大安売りしています。" >偽物販売大好き</a>
簡単ですね^^;
さて、この攻撃を受けたサイトはどうなるのでしょうか?
先に説明した通り、Googlebotはサイトを確認にいきます。
この画面をクロールし、独自性のあるコンテンツ(この場合偽物販売)があると判断すると、Googleは当該コンテンツをインデックスしようとします。
インデックスとはGoogleでキーワードで検索したときその結果に情報を表示する事です。
そうです。
はるかのひとりごと 偽物販売などで検索したとき、このページが表示されてしまうのです。
これは、サイトを運営する上でとっても大きな損失になるに違いありません。
私のサイトのような純情無垢なコンテンツにいかがわしい文言や、ドメインを表示させる事が可能になってしまうのです。
では、実際に攻撃を受けたサイトの検索結果を見てみましょう。
WordPress Search Result Attackの被害状況(2017.02.17の検索結果)
今のGoogleで攻撃が成功している状態を別画面で見る
このように中国crackerにより、検索結果に不当な文言を仕込まれています。
単純に、WordPressを設定してサイトを公開しているだけで、このような目に逢います。
その理由は、Googleにインデックスする必要が無いページを、インデックスするように設定にしているからです。
また本ページではWordPressでの対策をメインに記述しますが、この攻撃はWordPressに限らず、ECサイトの検索機能、一般構築サイトのサイト内検索機能など、すべてで発生する可能性があります。
外部のクエリ(文字列)を自サイトに表示する仕組み全てが、この攻撃の標的の対象になるので以下の観点で見直しが必要です。
・検索ボックスがある
・検索結果を画面に表示する
顧客の利便性を考慮すると、検索ボックスや検索機能というのは必須機能です。
安易に機能の削除などを考えないでください。
問題なのは、フリー文字列を表示する検索結果画面をインデックスする仕様になっているか否かです。
検索エンジンからみれば、商品(記事)ページをインデックスしているのであれば、検索結果画面を再びインデックスする必要性は全くありません。なので、検索結果はインデックスしない仕様にするのが当然の施策となるわけです。
これ以外にも404、各種エラー画面(ログインエラー)などインデックスをしても意味がないものも該当します。
さて、対策です。
Google(Yahoo他Googleのエンジンを使っている90%の検索エンジン)とBingは、検索エンジンに対してインデックスをしないという命令が使えます。
これは、検索エンジンへの提案ではなく、絶対命令です。
なお、少々SEOに知識のある方はすぐにrobots.txtでクローラをブロックしようとします。
これは、全く意味の無いの行為ですので注意してください。
robots.txtでのブロックは、クロールをブロックする命令なので、インデックスしないで欲しいという命令では無いのです。
この違いは大きいので、よく認識してください。
(SEOの中級テストには必ず出題されます。テストってなんだw)
robots.txtでクロールをブロックし、noindexを指定する
→検索結果にそのサイトが表示される可能性があります。
(絶対命令であるnoindexがブロックされ機能しない)
robots.txtは阻害せず、noindexを指定する
→検索結果にそのサイトが表示されることはありません。
ということで、今回の対策はnoindexの指定方法です。
指定方法は、次の3つがあり各々メリットが違いますので、お好きな項目で設定して下さい。
また、既にプラグインを搭載していたり、優秀なテーマの場合は、noindexになっているかもしれません。
検索画面/404画面などので、右クリック→ソースの表示を行い、noindexで検索しMetaタグが記録されているか確認して下さい。
私はYoastSEOを使っているのでキャプチャは、これを使います。
見ての通り、この設定は「当たり前すぎて」インストールしただけで自動的に設定され、解除の方法はありません。
非常に安全です。
YoastSEOは、この他にも各ページのnoindexを制御したり、サイトマップを作ったりタイトルを修正したりしてくれる万能プラグインです。私はサイトマップのために使っている感じです^^;
設定は色々影響するので、注意してくださいね。
特にパーマリンクの変更を強要してきますので、注意してください。
なお、同じような機能を持ったAll in One SEOPackなども使えると思いますが、私は使った事が無いので各自で調べてください。
これは、カスタマイズ初級の方には便利だと思います。
meta文を記載するheader.phpを編集する方法です。
ただし、親のテンプレートを編集するとテーマが更新されたときにリセットされますので、子テーマに記載します。
使う関数は以下の二つです。
・is_search() →検索結果画面かどうか判断します。
・is_404() →404ページかどうか判断します。
header.php
ここは触る必要はありません。
なお、header.phpの記載場所ですが、必ず
<head>から</head>までの間に記述して下さい。
Bodyに記載しても機能するようですが、ルール違反なのでhead内が良いです。
中級以上の方が対象です。私が説明するまでもないですね。
(ちなみに私は初級ですw)
割り込み番号をカスタマイズされている方は的便変更してください。
functions.php
よくソースコードなどを確認してからデバッグをしてください。
また、インデックスは多い方が良いみたいな風潮がありますが、全く違います。
インデックスはコントロールすべき物なのです。不要な物をインデックスする事が無いように検索エンジンを使ってくれたらと思います。
・不要なページをインデックスすると思わぬ事が発生する
・検索結果及び404ページはnoindexにする
ではでは。次回のSEO記事で、また逢いましょう。
またね~♪
鈴木はるかです。
今回は、かなり重要な事をお知らせします。
WordPressでは、標準のインストールで検索結果画面はnoindexになっていません。
noindexになっていないと何が起こるのでしょうか?
非常に危険な状態となりますのでよく読んで対処してください。
1.検索結果攻撃の概要
WordPress検索結果攻撃(WordPress Search Result Attack:銘々あたしw)の概要です。WordPressと書きましたが一般サイトでサイト内検索を実装している全てのサイトが考慮しなければならない事です。
今回の攻撃を受けるとGoogleなどの検索結果の画面は、次のようになります。
検索結果画面に宣伝したい文句と、URLなどが表示されます。
httpなどを指定するとうまく機能しないので、ドメインだけが多いです。
具体的には、以下の状態となります。
検索結果攻撃を受けた状態
この攻撃はを実行するのは、とても簡単です。
Googlebotは、外部からのリンクが発生すると、そのページのリンクの有効性や状態を確認するため、該当サイトに確認に行きます。
つまり「攻撃側の捨てサイト」から以下のようなリンクを張るだけで良いのです。
例文
<a href="https://www.harukas.org/blog/?s=私のブログはexample.comです。各種ブランドの偽物製品を大安売りしています。" >偽物販売大好き</a>
簡単ですね^^;
さて、この攻撃を受けたサイトはどうなるのでしょうか?
先に説明した通り、Googlebotはサイトを確認にいきます。
この画面をクロールし、独自性のあるコンテンツ(この場合偽物販売)があると判断すると、Googleは当該コンテンツをインデックスしようとします。
インデックスとはGoogleでキーワードで検索したときその結果に情報を表示する事です。
そうです。
はるかのひとりごと 偽物販売などで検索したとき、このページが表示されてしまうのです。
これは、サイトを運営する上でとっても大きな損失になるに違いありません。
私のサイトのような純情無垢なコンテンツにいかがわしい文言や、ドメインを表示させる事が可能になってしまうのです。
では、実際に攻撃を受けたサイトの検索結果を見てみましょう。
WordPress Search Result Attackの被害状況(2017.02.17の検索結果)
今のGoogleで攻撃が成功している状態を別画面で見る
このように中国crackerにより、検索結果に不当な文言を仕込まれています。
単純に、WordPressを設定してサイトを公開しているだけで、このような目に逢います。
その理由は、Googleにインデックスする必要が無いページを、インデックスするように設定にしているからです。
また本ページではWordPressでの対策をメインに記述しますが、この攻撃はWordPressに限らず、ECサイトの検索機能、一般構築サイトのサイト内検索機能など、すべてで発生する可能性があります。
外部のクエリ(文字列)を自サイトに表示する仕組み全てが、この攻撃の標的の対象になるので以下の観点で見直しが必要です。
・検索ボックスがある
・検索結果を画面に表示する
顧客の利便性を考慮すると、検索ボックスや検索機能というのは必須機能です。
安易に機能の削除などを考えないでください。
問題なのは、フリー文字列を表示する検索結果画面をインデックスする仕様になっているか否かです。
検索エンジンからみれば、商品(記事)ページをインデックスしているのであれば、検索結果画面を再びインデックスする必要性は全くありません。なので、検索結果はインデックスしない仕様にするのが当然の施策となるわけです。
これ以外にも404、各種エラー画面(ログインエラー)などインデックスをしても意味がないものも該当します。
さて、対策です。
2.検索結果攻撃の対策
対策は、非常に簡単です。Google(Yahoo他Googleのエンジンを使っている90%の検索エンジン)とBingは、検索エンジンに対してインデックスをしないという命令が使えます。
これは、検索エンジンへの提案ではなく、絶対命令です。
なお、少々SEOに知識のある方はすぐにrobots.txtでクローラをブロックしようとします。
これは、全く意味の無いの行為ですので注意してください。
robots.txtでのブロックは、クロールをブロックする命令なので、インデックスしないで欲しいという命令では無いのです。
この違いは大きいので、よく認識してください。
(SEOの中級テストには必ず出題されます。テストってなんだw)
robots.txtでクロールをブロックし、noindexを指定する
→検索結果にそのサイトが表示される可能性があります。
(絶対命令であるnoindexがブロックされ機能しない)
robots.txtは阻害せず、noindexを指定する
→検索結果にそのサイトが表示されることはありません。
ということで、今回の対策はnoindexの指定方法です。
指定方法は、次の3つがあり各々メリットが違いますので、お好きな項目で設定して下さい。
また、既にプラグインを搭載していたり、優秀なテーマの場合は、noindexになっているかもしれません。
検索画面/404画面などので、右クリック→ソースの表示を行い、noindexで検索しMetaタグが記録されているか確認して下さい。
2.1 プラグインを使う
これは簡単なので、オススメです。私はYoastSEOを使っているのでキャプチャは、これを使います。
見ての通り、この設定は「当たり前すぎて」インストールしただけで自動的に設定され、解除の方法はありません。
非常に安全です。
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記事で、また逢いましょう。
またね~♪
コメント一覧
たいへん分かりやすい記事です。
Search Consoleにてカバレッジ除外が2万位で日々増えてるので気持ち悪く、SEOにも影響があるかと思い探してました。しかしサイト内検索機能を狙ったスパム攻撃事態をどうにかしたいのですが手立て無しのようですね
しかし、一斉に非表示にしないのは「価値がある検索結果が残っている」からだと思います。
Googleは、価値あるコンテンツが検索結果でインデキシングされるようになっていれば、それも利用するという考えのようです。
SEOを理解している我々は、これ以上被害を増やさないようにサイトの設計をしたり啓蒙したりしなければならないのでしょうね。
はじめまして(o*。_。)oペコッ。
こちらの記事、とても参考になりましたありがとうございます。
それとは別なのですが・・・、
フッターの一番下部分に、セッションがipv6による接続とか本日の訪問数が表示されているところがありますが、どのようにしたらできるのでしょう?
お忙しい中、恐れ入りますが、
ご教授頂けましたら幸いです。
noindexは結構重要ですね。
最近では、テーマでデフォルト実装されているので、わすれつつある中身ですが・・・
下部のセッションの種類は、サーバーに接続している環境変数で、REMOTE_ADDRがIPv4だったら?という判断を
正規表現で調べて、マッチしたらv4でそれ以外はv6としています。
このセッションは <?php
$ipv4 = '^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$';
if (preg_match('/' . $ipv4 . '/', $_SERVER['REMOTE_ADDR']) ) {
echo ' IPv4 で確立しています';
}else{
echo ' IPv6 で確立しています';
}
?>
こんな感じですね。
カウンターは、手製ので汚いコードです。
参考にはなりません。
はるか様。
丁寧に教えてくださりありがとうございます。(o*。_。)oペコッ
>noindexは結構重要ですね。
最近では、テーマでデフォルト実装されているので、わすれつつある中身ですが・・・
↑
ですね!!
上記の正規表現、凄いです!!
あとechoの後は、
IPv4とIPv6が逆ではないでしょうか?
私の勘違いでしたら、度重なるコメント申し訳ありません。
すみません。
echoの後のipv4とipv6は、はるか様の記述通りですね。
申し訳ありませんでした。
コメントする