教文館の社内ナレッジベースです。

クローラーを制限するのは危険だと思う。アクセス上位を狙っているのに、そのインデックスを拒否するのだから。

ただ、どうしても悪質なBotは存在するし、海外からのBotは、日本語サイトには基本的に必要ないだろう。

ということで、不要なクローラーのアクセスを制限するための忘備録メモ。

WordPressを前提に話を進めているけれども、ウェブサイトに共通してできる設定だ。

方法は2つ

①robots.textの手動作成

②.htaccessの編集

 

①robots.textの手動作成

WordPress3.3以降、robots.txtの自動生成により wp-admin および wp-includes のインデックス禁止 がされるようになったようだ。(CODEX参照)。正確に言えば仮想robots.txtの生成だけども。

ところで、手動でrobots.txtを作成した場合、この仮想robots.txtよりも優先される。そこで、「robots.txt」名のファイルを作成し、中身を書き込めばOK。

まずは現在の仮想robots.textの中身を調べるには

http://◯◯◯◯◯.com/robots.txt

で中身を表示を表示。このサイトの場合、

User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/

Sitemap: http://booksginza.phpapps.jp/sitemap.xml.gz

となっている。

これに個別のクローラーの制限を下記の通り書き加える。

加えるコードは、

 User-agent: (制限したいクロール名)
 Disallow: /

以上を書くことで、クロールが読み込まないように設定できる。

robots.txtはサーバーのルートディレクトリに設置すること。

ただ、デメリットもあるようで、そもそもrobots.txtを参照しない悪質クローラーがあるらしい!その場合、この設定は何の意味もなくなる。

②.htaccessの編集

こっちが本命かな。.htaccessで検索エンジンのクローラー(特定のユーザーエージェント)を拒否する場合。

SetEnvIf User-Agent "Googlebot" deny_ref
SetEnvIf User-Agent "◯◯◯◯" deny_ref
SetEnvIf User-Agent "◯◯◯◯" deny_ref
 
order Allow,Deny
Allow from all
Deny from env=deny_ref

deny_ref は私が作った任意の文字列でref_ng でも shutdown でもなんでも勝手に決めていい。

ただし、上記をそのまま書いちゃダメ!だって、Googleを拒否することになる(笑)あくまで事例です。

ただ、User-Agent名は偽装することがあるので、これだけでは不十分かもしれない。

あと有効と思われる設定は下記を併用すること。

 

◯特定参照元(Referer)からのアクセス制限(直リンクの禁止設定)。*これは具体例を書きます。腹立たしいbaiduめ!

SetEnvIf Referer "^http://www\.baidu\.jp" deny_ref
SetEnvIf Referer "^http://www\.baidu\.com" deny_ref

これにより画像への直リンクが拒否できる。URLによる制限というところ。

 

◯リモートホスト(アクセス元のホストサーバー)が特定できている場合、

SetEnvIf Remote_Host "\.baidu\.jp" deny_ref
SetEnvIf Remote_Host "\.baidu\.com" deny_ref

以上のようにすることでアクセス制限ができる。

*リモートホストは、REMOTE_ADDRで取得したIPアドレスをDNSで逆引きしたホスト名をあらわす。

全てが役割も有効性も違うので併用するといい。

【.ataccessに書くサンプルコード】

# BEGIN crawler
SetEnvIf User-Agent "[Bb]LEXBot" deny_ref
SetEnvIf User-Agent "[Bb]aidu" deny_ref
SetEnvIf User-Agent "200PleaseBot" deny_ref
SetEnvIf Referer "^http://www\.baidu\.jp" deny_ref
SetEnvIf Referer "^http://www\.baidu\.com" deny_ref
SetEnvIf Referer "^http://image\.baidu\.com" deny_ref
SetEnvIf Referer "^http://www\.200please\.com" deny_ref
SetEnvIf Remote_Host "\.baidu\.jp" deny_ref
SetEnvIf Remote_Host "\.baidu\.com" deny_ref
SetEnvIf Remote_Host "\.200please\.com" deny_ref

order allow,deny
allow from all
deny from env=deny_ref

# END crawler

こんな感じです。.htaccessもサーバーのルートディレクトリに設置すること。というか、既にあるはずなので、上記コードを書き加えること。

 

追記

Agent偽装について。偽装された場合の対策が必要。

例えばApache の mod_rewrite の機能である RewriteCondを使うのも有効か。

Baiduspiderを例に取ると、

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} baiduspider [NC,OR]
RewriteRule !^robots.txt$ – [G]

 

このような感じで、”baiduspider”の文字列が含まれる場合、[G]を返す、
つまり「410」を返すことで”baiduspider”にインデックスの削除を要求する。
もっと丁寧にするならば、

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} baiduspider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} baiduMobaider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} baiduImagespider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} baiduspider+ [NC,OR]
RewriteRule !^robots.txt$ – [G]

 

こんな感じ