.htaccess - 検索ロボット対策

インターネットに於けるウェブサイトの目的は「コンテンツを世界中に公開する」ことにあります。
そういう意味では、基本的にいかなるアクセスも拒否すべきではありません。

しかしながら、検索ロボット(クローラ)の中には "robots.txt" を遵守しなかったり、短時間にアクセスを集中してサーバーに多大の負担を掛けるものが存在します。

此処では、"robots.txt" と ".htaccess" を併用して、悪質クローラの効率的な撃退方法を記述してみます。

[2015.09.10] MJ12bot と AhrefsBot を追加しました。
[2015.04.28] 百度の日本検索サイト"Baidu Japan"は、2013年で更新が止まっていましたが、2015年3月で閉鎖したようです。検索サイトが閉鎖しても検索ロボットが動かない保障はありませんので、引き続き動向を監視する必要があります。携帯向けの"BaiduMobaider"は、DoCoMo・KDDI・SoftBankの検索ロボットとしても引き続き作動すると思われます。

問題のあるクローラ一覧

Activity User-Agent Nationality URL 概要 robots.txt 問題点
活動中 AhrefsBot France ahrefs.com Ahref: フランスの情報取集サイト。 無視 robots.txt 無視。短時間に大量アクセス。
監視中 Baiduspider
Baiduspider+
BaiduMobaider
China www.baidu.com www.baidu.jp 百度: 中国最大の検索サイト。*baidu.jp は現在閉鎖中。 一部遵守 robots.txt 無視。短時間に大量アクセス。UA 偽装。
Baiduspider
監視中 BaiduImagespider China www.baidu.com www.baidu.jp 百度の画像収集ロボット。*baidu.jp は現在閉鎖中。 一部遵守 robots.txt 無視。短時間に大量アクセス。
活動中 ia_archiver USA alexa.com Alexa: 過去のページを収集保存しているサイト。 遵守 非公開ページへのアクセス。
ia_archiver
活動中 MJ12bot England majestic12.co.uk Aajestic12: 英国の情報取集サイト。 遵守 短時間に大量アクセス。
MJ12bot
停止 NaverBot Koria www.naver.com Naver: 韓国の検索サイト。NAVER Japan がサービスを終了した2005年に終了。Yeti に移行。 無視 短時間に大量アクセス。
Googlebot の名称を偽装。
NaverBot
活動中 yodaobot China www.yodao.com 有道: 中国の検索サイト。 遵守 短時間に大量アクセス。
yodaobot
活動中 Yeti Koria www.naver.com Naver: 韓国の検索サイト。 一部遵守 短時間に大量アクセス。NaverBot から名称変更。
Yeti Naver

robots.txt について

クローラは、一番最初に "robots.txt" を見に行くルールになっています。
従って、拒否したいクローラがあれば、先ずこのファイルに記述します。

robots.txt の書き方と設置

拒否したい "User-agent" を、"Disallow: /"(全てのアクセスを拒否)にします。
大文字小文字は区別しませんが、"User-agent:" と "Disallow:" の項目名については、最初の文字だけを大文字にしておいたほうが良いようです。
一組ずつ必ず空白行を挟んで記述します。
* "#" は、コメント行を意味します。


# AhrefsBot: France Ahrefs(ahrefs.com)
User-agent: AhrefsBot
Disallow: /

# Baiduspider: China Baidu(www.baidu.com, www.baidu.jp)
User-agent: Baiduspider
Disallow: /

User-agent: Baiduspider+
Disallow: /

User-agent: BaiduImagespider
Disallow: /

# ia_archiver: USA Alexa(alexa.com)
User-agent: ia_archiver
Disallow: /

# MJ12bot: England Majestic12(www.majestic12.co.uk)
User-agent: MJ12bot
Disallow: /

# Yeti: Korea Naver(www.naver.com)
User-agent: Yeti
Disallow: /

# yodaobot: China Yodao(www.yodao.com)
User-agent: yodaobot
Disallow: /

*注 どのクローラを拒否するかは、サイトのアクセス情報を良く分析して、ご自分の判断で行ってください。

必ず、"robots.txt" の名称でドキュメントルートの 直下に置きます。 ディレクトリを意識して書けば、 "/robots.txt" となります。

.htaccess によるアクセス制限

"robots.txt" を無視する、もしくは無視する可能性のあるロボットにアクセス制限をかけます。
"robots.txt" を順守するのがはっきりしているロボットについては、記述する必要が有りません。

削除済みとして処理する

[G] = "410 : Gone"を返して、ファイルが永久に削除されたように装います。
二度と来なくなるでしょう。


RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} AhrefsBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Baiduspider [NC,OR]
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} Yeti [NC]
RewriteRule !^robots.txt$ - [G]

親サイトに URL 変更する

上記の処理で飽き足りない場合は、
"R=301" を返して、ファイルが永久に親サイトに移転したように書き換えて飛ばします。
次回から、ロボットは、直接親サイトにアクセスするようになります。


RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} AhrefsBot [NC]
RewriteRule !^robots.txt$ http://ahrefs.com/ [R=301,L]

RewriteCond %{HTTP_USER_AGENT} Baiduspider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Baiduspider+ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} BaiduMobaider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} BaiduImagespider [NC]
RewriteRule !^robots.txt$ http://www.baidu.jp/ [R=301,L]

RewriteCond %{HTTP_USER_AGENT} Yeti [NC]
RewriteRule !^robots.txt$ http://www.naver.com/ [R=301,L]

".htaccess" によるアクセス制限の詳細は、.htaccess - URL の書き換え を参考にしてください。

Google Sponsored

コメント

このページに関する、ご感想やご質問をお寄せください。
お名前と都道府県名は、正確にお書きください。 - 泰山 -

お名前: *必須
都道府県: *必須
コメント: *必須
No.000041 泰山 ノンカイ 2015-03-09 00:52:12
>この指定では、例えばrobots.txtで「/imgの読み取りは禁止だけど/diaryは許可」というような指定をしていた場合でも、・・・

ここのテーマは、あくまでも"撃退方法"です。
"robots.txt" の書き方と設置でも、「拒否したい "User-agent" を、"Disallow: /"(全てのアクセスを拒否)にします。」と前提しています。
従いまして、「/diaryは許可」を持ち込まれても困ります。

>.htaccessで蹴飛ばす時点で「話し合いは通用しないみたいだから拒絶する」という意味なんだから、robots.txtに書き込む意味はないわけですね。

書き込む意味はあります。robots.txtで拒否されたロボットがそれを遵守すれば、話し合いで解決した事になり、他のページにはアクセスしません。従って、.htaccessの設定は実行されませんからサーバーの負担が軽減されます。

>また、いちいち相手側サーバを指定するのも手間がかかりすぎ

"robots.txt"を無視したアクセスを、何処に返すかは、設置者の考えで全く宜しいかと思います。
問題のあるロボットは、親会社が共通しています。先ずは親から叱って貰った方が良いのではないかと。

"ななしさん"は、勘弁してくださいね。もっと自分に自信を持ってください。
No.000040 ななしさん 相模国 2015-03-08 23:38:56
>なぜなら、そのクローラがロボット法を遵守する
>紳士的なクローラであれば、この "RewriteRule"
>が適用されずに済みますから。

んん?
この指定では、例えばrobots.txtで「/imgの読み取りは
禁止だけど/diaryは許可」というような指定をしていた
場合でも、robots.txt以外は.htaccessの方で一切読ませ
ない指定をしているんだから、紳士的なロボットであっても
robots.txt以外は読めないことになる。

.htaccessで蹴飛ばす時点で「話し合いは通用しない
みたいだから拒絶する」という意味なんだから、
robots.txtに書き込む意味はないわけですね。

また、いちいち相手側サーバを指定するのも手間がかかりすぎ。

RewriteRule ^(.*) http://%{REMOTE_ADDR}/\1 [R=301,L]
とか
RewriteRule ^(.*) http://127.0.0.1/\1 [R=301,L]
で良いんじゃないかな。