特定の検索ロボットを(クローラー)を排除する

ちょっと忘備録的に。

尖閣問題で、百度(Baidu)のクローラーを排除じゃ、とはツイッターで書いたのですが、ま、岡崎図書館の例もあるので、試しに、特定のクローラーを排除してみます。

特定 IP で排除しても良いのですが、クローラーの場合は複数ある場合が常なので、UserAgent で排除します。

UserAgent は偽装している場合も多いのですが、最近のクローラーは律儀に設定してくれるので、これで排除できます。

本来は、robots.txt で排除すべきなんでしょうが、robots.txt のほうは、

  • クローラー側で、クロールするか否かを決定する。

という欠点(私には致命的な欠点だと思うのですが)があります。Googleなどのような行儀の良いクローラーの場合は効果があるんでしょうが、自作のクローラーなんかだと、チェックしていない可能性は大ですよね(単なるプログラマのサボり、という意見もあるでしょうが、ちょっとしたクロールをしたい場合なんかは、さっくりと robots.txt を無視しかねません)。

なので、サーバー側で自己防衛するのが、良い手段かな、と。

というわけで、wordpress 側でブロックできる方法を探していたのですが、どうやら apache のほうでブロックできるので、それを使います。

まず、apache のログから、Baidu が使っているクローラーの UserAgent をチェックします。

Baiduspider+(+http://www.baidu.jp/spider/)

多分、百度の日本法人サーバーから飛んできているのでしょう。URLも書いてあります。

これを、「Baiduspider」の文字列を含む UserAgent をガードする場合、.htaccess に以下の記述をします。

SetEnvIf User-Agent “Baiduspider” deny_ua
order allow,deny
allow from all
deny from env=deny_ua

SetEnvIf を使って、一旦 deny_ua という変数に割り当てた後、deny で拒否する、という流れだそうです。

この .htaccess を wordpress がインストールされているディレクトリに置けばOKです。

参照元

WordPressもUserAgentでスパムを拒否してみる
http://blog.browncat.org/2007/06/wordpressuseragent.html

実は、このブログに来る百度のクローラーは、全体の5%ぐらいなので負荷的には大したことはありません。つまりは、営業/露出的にも大したことがないということで、ひとまずカット。

ちなみに、Googleのクローラーは

Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

な感じで UserAgent を付けてくるので、「Googlebot」でガードしてしまえば良さそうです。

試験サイトを公開する(Googleにはクロールされたくないとか)場合に使えますね。

試験サイトの場合は、特定のクライアント(社内からのアクセスとか、個人宅からのアクセス)となることが多いので、アクセスするときの IP で許可するのも良いかと思います。

 

カテゴリー: 開発 パーマリンク