ちょっと忘備録的に。
尖閣問題で、百度(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 で許可するのも良いかと思います。