クローラーを制限するのは危険だと思う。アクセス上位を狙っているのに、そのインデックスを拒否するのだから。
ただ、どうしても悪質な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]
こんな感じ
