めかりる

カエル、変える、買える、帰る、考える

スパムに汚染されたブログ内検索が Google にインデックスされちゃったので

ブログ内検索のような自動生成ページが、知らないうちにスパムサイトの SEO に利用されていた、というおはなし。

f:id:slashnsk:20170120061547p:plain

自分のブログがスパム攻撃されていて、しかも、検索サイトにインデックスされてたらびっくりします。んで、そんなことで Google さんに嫌われるのも癪です。

独自ドメインでサイトやブログを運用していて、サイト(ブログ)内検索を設置していらっしゃるのであれば、一度チェックしてみるといいかもです。

長くなったので 3 行で書くとこんな具合。

  • SERP にスパム汚染したブログ内検索結果ページが露出!
  • はてなブログだと、robots.txt も .htaccess も編集できないぞー
  • 「URL パラメータ」と「URL の削除」とで様子見。別の手を考える

目次のようなものです。興味がありそうな部分だけでもどーぞ。

事実誤認の指摘などは、コメントにくださいな。

このエントリーに出てくる SEO 関連の用語解説

似たような言葉が雑多に出てくるので、以下にまとめました。初心者向け。

SERP

Google を始めとした検索サイトにおいて、検索結果が表示されるページのことを「 SERP (Search Engine Result Page) 」といいます。「 -- Pages 」として、「 SERPs 」とも。それぞれ、「サープ」、「サープス」と読むらしい。

通例、サイトやブログ内の検索結果ページは SERP とは呼びません。なぜか。

このエントリーでは、「 SERP 」は、検索エンジン ( Google ) の検索結果ページを指し、「サイト(ブログ)内検索結果ページ」と分けます。

Bing 検索では、問題ありませんでした。Bing にブログ内検索の結果ページがインデックスされていなかったということです。

インデックス

SERP に表示されるためには、検索エンジンのデータベースに登録される必要があります。これを「インデックス(に登録)される)」のようにいいます。「いつまで経っても Google にインデックスされない」、「サイトのページ数に対して、インデックス数が少ない」などと用います。

自分のサイトのインデックス数は、Google Search Console から確認することができます。

  • Search Console -> ウェブサイトの選択 -> 「 Google インデックス」 -> 「インデックスステータス」 -> 「インデックスに登録されたページの総数」

また、Google で、「 site:(自分のブログのアドレス)」を検索することでも、インデックスの状況が分かります。ただ、Google Search Console での「インデックスに登録されたページの総数」とは、必ずしも一致しません。

「 Google Search Console って?」という方は、こちら。

site:

検索演算子「 site: 」を URL の前方につけ、「site:( URL )(スペース)(検索キーワード)」のような形で、その URL 内のみの検索キーワードの検索結果を表示します。サイトトップの URL でもいいですし、ディレクトリまで含めることもできます。

キーワードを入力せず、「 site:( URL )」だけだと、その URL 以下の階層で Google にインデックスされているページが表示されます。

  • 例 : ディスコグラフィーを一覧するために、「 www.tamurayukari.com/discography/ 」以下のページを全部表示させる場合、「 site:www.tamurayukari.com/discography/ 」をクエリにする

Googlebot

Google のデータベースにインデックスするウェブページを探すプログラムのこと。Bing では、BingBot といいます。

このようなウェブページを探索、取得する機能をもつプログラムの総称を「クローラ(ー)」といい、「クロール」、「クローリング」と動詞化して多用します。

クエリ

検索窓に記述する単語、文章。キーワードクエリとも。

ブラックハット SEO

SERP の上位に表示させるために Google が意図しない手法での SEO。また、Google のアルゴリズム(表示順位を決めるプログラム)を悪用すること。その SEO 手法が検索結果に悪影響があると判断されると、Google のアップデートの際に一応打尽にされたり、手動でのペナルティを受けたりします。

当然、Google だってブラックハット SEO への対策はしているのだけれど、頭のいい人は善悪両面にいるもので。現実は、いたちごっこなわけです。

スパム

ウェブ上のゴミ。

SERP の自分のブログにスパムな文字列を発見した経緯と方法

先日、カテゴリを整理して、子カテゴリを排除しました。なにしろ、全体の記事数が少ないので、カテゴリを細分化していると、「カテゴリ名 (1)」とかって表示されちゃって、まぁ、恥ずかしかったわけで。

パンくずリストの変更が Google にどのように反映されるのかを継続的に観察していました。パンくずリストは、元の二階層から、まず、「 > entry 」に変更され、その後、意図通りの子カテゴリのない一階層表示に変わりました。めでたしめでたし。

のはずでした。

「 site: 」を使って発見する

このとき、検索演算子「 site: 」を用いて、「 site:www.makealttle.net 」をクエリに検索していました。このブログ ( www.makealttle.net ) の SERP のページを進めていると。

f:id:slashnsk:20170120061548p:plain

なーんやこれ。

SERP に、見知らぬドメインと、スロットやらポーカーやらの中国語が席巻した www.makealttle.net が並んでいるではありませんか。

どれもブログ内検索結果が 0 件のページなんですけどね。

Google Search Console を使って発見する

Google Search Console では、いつインデックス数が増えたのかを確認することができます。

  • Search Console -> ウェブサイトの選択 -> 「Google インデックス」 -> 「インデクス ステータス」

このブログの場合、今の時点で 70 エントリーくらいなのに、去年 11 中旬に 70、今年に入ってからも 100 と急に増えた時期があるので、そこで仕込まれたんでしょね。

f:id:slashnsk:20170120061549p:plain

このように、サイト規模に対して、インデックス数が急に増えている場合、やられちゃってる可能性があります。

スパム攻撃してきたサイトの意図と正体

SERP からスパム攻撃されたブログ内検索結果ページをいくつか見てみると、URL ( Qxxxxxxxx.com ) とともに中国語で賭博関連の文字列が見えます。

f:id:slashnsk:20170120061550p:plain

ウェブページの URL 列は、リンクを記述するアンカータグ( a タグ)の中身だけでなく、その周辺の文字列にも関連付けられます。このスパム攻撃の意図は、どうもそのへんにあるようです。

同じようにいろんなサイト(ブログ)のサイト(ブログ)内検索結果ページにこういったことをしていくと、Google さんは、被リンクの理屈と同じように「いろんなサイトに記述があるのであれば、この URL と周りにある言葉は関連があるに違いない」みたいになっちゃいます。

もちろんやりすぎると対策されるはずなのですが、このスパム主は、節度を持って攻撃していて、少数ずつたくさんのサイトにバラまいているようなんですね。それはそれで賢いというか。実際の効果はどれほどあるのかしら。

お堅そうなサイトにも。

f:id:slashnsk:20170120061551p:plain

情報系の専門学校かな。この為体だと学生は敬遠しそうですけれど。 

f:id:slashnsk:20170120061552p:plain

ほかにもたくさん。

ドメイン分散を意識しているのか、hatenablog.com ドメインでは、1 ブログだけ。でも、はてなブログを独自ドメインで運用してる場合、結構な率で見つけることができます。

さて、実際にどんなサイトなのかも見てみます。

あやしいサイトを見るときのお供に aguse を

aguse Gateway というサイトがあります。実際に訪れたくないサイトに代わりに訪れてくれ、画像に変換して表示してくれるという、すてきなやつです。

Qxxxxxxxx.com はこんなサイトでした。

f:id:slashnsk:20170120061553p:plain

大陸の中国人(簡体字使用者)向けの賭博サイトのようです。中国の法律では、賭博はご法度なはず。

ソースを見ると、どうやら全画面 iframe で、別のサイトを表示していますね。Qxxxxxxxx.com がペナルティを受けても、本体である別のサイトに影響しないように、というつもりでしょうか。

サイト(ブログ)内検索結果を Google にインデックスさせる方法について

検索結果が 0 件であるサイト(ブログ)内検索の結果ページには、価値がありません。しかし、0 であっても、意図した文字列をスパム攻撃の対象サイトに表示させることはできます。検索システムによって表示される「○○というキーワードを検索したけど、なかったよ」の「○○」の部分です。

あるサイトのサイト(ブログ)内検索結果ページを「 A 」とすると、別のサイトを経由させれば、次の 2 つの方法で検索エンジンにインデックスさせることが可能(なはず)です。

  1. A へのリンクを貼った別のサイトに Googlebot をクロールさせる
  2. A のキャッシュを保存した別のサーバーに Googlebot をクロールさせる

1. は、オーソドックスなクローラーの行動です。

被リンクは検索エンジンにとっての重要な指標のひとつで、「いろんな場所からリンクされているページは、良いページに違いない」という理屈です。いまでは、リンク元の評価が以前より大きく影響するようになり、ソーシャルサイトでのブックマーク数やリツイート数が重要視されています。

クローラーはリンクをたどってウェブページを発見するため、リンクがあれば、「○○の検索結果は 0 件です」というページも発見することになります。

2. は、具体的な手法を知りませんが、過去にこの手口に関する記事を読んだことがあります。

今回は、こちらの手法が濃厚のようです。なぜなら、インデックス数が急激に増えた時期に Googlebot が来ていないからです。

1. の場合、目的のサイトにクローラーを巡回させること自体はブラックハット SEO ではありませんが、目的によっては、ペナルティの対象になりえます。2. の場合は、目的如何に関わらず、アウトです。

SERP に表示されるサイト(ブログ)内検索結果ページ

ユーザーにとって

Google で検索した結果、リンクをクリックすると、サイト(ブログ)内検索結果ページだったとなると、よほどの専門的なサイトでないかぎり、ユーザーの不利益になります。多くの場合、サイト(ブロ)内検索結果ページより上位に該当のコンテンツが順位しており、二度手間になるためです。

よって、サイト(ブログ)内検索結果ページなど、SERP にはなくっても構いません。

サイト(ブログ)オーナーにとって

Google は、ユーザーにとって意味があるページはポジティブに評価しますが、意味がないページは評価しません。それは、サイト(ブログ)内検索結果ページでも同じです。

サイト(ブログ)オーナーにとっては、以前は単純にインデックス数が増えることに意味がありました。そのため、サイト(ブログ)内検索結果ページが有意であろうがなかろうが、機械的に大量にインデックスさせる試みが図られていたこともあります。

が、有意でないクエリによるサイト(ブログ)内検索結果ページを全くのゴミにしたのが、2012 年のパンダアップデートでした。

パンダアップデートの詳細は省きますが、現状、サイト(ブログ)を大きく見せるために無意なページをインデックスすることは、文字どおり意味がありません。逆に、あんまりにも無意味なページばかりインデックスされていると検索対象から除外されることもあるようです。

サイト(ブログ)内検索結果を Google にインデックスさせ " ない " 方法について

ざっと、以下 3 点が考えられます。

  • robots.txt ファイルを編集
  • meta タグに noindex を記述
  • .htaccess を活用

robots.txt

robots.txt は、クローラーに対するメッセージが書かれたファイルで、クローラーの挙動を制御します。多くの CGM では自動で生成されるようです。ここで、サイト(ブログ)内検索結果ページのクローリングを禁止するわけです。

f:id:slashnsk:20170120061554p:plain

各サイトトップの URL 末尾に「 robots.txt 」をつけてアクセスするば、自由に覗くことができます。

この方法の弱点は、他のサイトにサイト(ブログ)内検索結果ページへのリンクが貼られていた場合、クローラーはそのリンクをたどって巡回しに来ることになります。で、結果、インデックスされてしまいます。

meta タグ

html ファイルの head タグ内に、noindex を追加することで、インデックスさせないようにできます。この方法では、クローラーは巡回しますが、検索エンジンにインデックスされることはありません。ただ、robots.txt でのクローラー制御と併用すると(クローラーが来ないので)、noindex が認識されません。

<meta name="robots" content="noindex">

.htaccess

.htaccess ファイルは、ディレクトリやファイル単位で、アクセス制限を設定する機能があります。

巡回してくるクローラーの UA (ユーザーエージェント)を判別して拒否すれば、クロールさせることも、したがって、インデックスさせることも防げます。

サイト(ブログ)内検索結果を Google にインデックスさせ " ない " 方法について はてなブログ編

ところがところが。はてなブログでは、robots.txt の編集もできませんし、ページによって html ファイルを描き分けることもできませんし、.htaccess を置くこともできません。

えー。

たぶん、ここからが本題。Google Search Console に登録していることが条件です。

対症療法 : 「 URL パラメータ」

これは、ブログ内検索の検索結果ページを、Googlebot にクロールさせない方法です。

  • Search Console -> ウェブサイトの選択 -> 「クロール」 -> 「URL パラメータ」 -> 「URL パラメータを設定」
  • クロールさせたくないパラメータ「 q 」を「編集」
    • ...ページ コンテンツが変化しますか? -> 「はい」
    • ...与える影響を選択... -> 「指定する内容」か「その他」
    • ...クロールする URL を選択... 「クロールしない」

f:id:slashnsk:20170120061555p:plain

robots.txt の場合と同じく別サイトからクローラーが巡回してきた際の効果が不明。Google のサイトでのクローラー制御なので、意味合いが違うはずなんだけど。どうなることやら。

f:id:slashnsk:20170120061556p:plain

対処療法 : 「URL の削除」

これは、すでにインデックスされている URL を、Google さんに強制的に忘れさせる方法です。超強力。

  • Search Console -> ウェブサイトの選択 -> 「Google インデックス」 -> 「URL の削除」
    • 「一時的に非表示にする」 -> フォームに URL 記入 -> 「続行」
    • リクエストタイプ「...キャッシュから削除」 -> 「リクエストを送信」

f:id:slashnsk:20170120061557p:plain

「 site:www.makealttle.net 」で SERP にあったブログ内検索結果ページ URL を一個いっこ地道に登録しました。

Google の重複処理の影響で、インデックスされたすべての URL が site: で表示されているわけではありません。ステータスが「削除」になると、代わって別の URL が SERP に出てくることがあります。

1/20 未明時点で、130 件強が削除済み。インデックスステータスからするともう少し出てきてもおかしくないかも。

忘れれば、思い出すこともありますが、「URL パラメータ」での設定で、ブログ内検索結果ページをクロールできませんので、インデックスされることもない、という考えです。

新・対症療法 : ブログ内検索結果ページにのみ meta タグを追加する javascript を記入する

実験中。regexp.test で パラメータの 「 q=.*? 」に反応させて meta タグに noindex を書こうかなと。

追記予定地

うまくいったら別エントリーにする! -> うまくいったっぽい。

これにともなって、「 URL パラメータ」から、パラメータ「 q 」を「リセット」しました。

経過報告

Google Search Console のインデックスステータスは、タイムラグがあるので、様子見です。

「URL パラメータ」の「監視対象の URL 」より、「 URL の削除」で削除した件数が少ないので、いま SERP に露出しているものだけを処理しても、まだまだ控えがいるという。

実際に、インデックスされたブログ内検索結果ページの Google キャッシュを見ると、JavaScript 追加以前のものが露出しているので、効果が認められたと思っています。

  • 20170120 パラメータの「 q= 」に反応して meta タグを追加する js 追加
  • 20170128 までに、「 URL の削除」から、171 url を削除

とはいえ、Google さんが早々に退治してくれれば、それでいいんですけどね。

免責

これらの方法が最適解かどうかは分かりません。各自の責任でどうぞ。

自称 IT コンサル、ブログコンサルさんや「アフィリエイト収入○○円!」みたいなブロガーさんでも、スパムに汚染されたブログ内検索結果がインデックスされてらっしゃる方はいます。ので、削除してもしなくても意味はないのかもしれません。