なんでもなんでも2HTMLの書き方利用上の注意リンク集ホーム

ロボット対策

アクセス制限の仕方も参照せよ。


要約

検索エンジンなどのロボットをブロックするためには以下のような方法がある:

可能ならばこれらの全ての方法を併用すれば良いであろう。


/robots.txt

ウェブサーバーの管理者に頼んで、 http://domain/robots.txt でアクセスできる場所に以下のような内容の robots.txt という名のファイルを作成してもらうと、 /robots.txt を参照してくれる紳士的なロボットのそのウェブサーバーへのアクセスをブロックできます:

User-Agent: * 
Disallow: / 

最終行は空行でなければいけません。

ウェブサーバー全体ではなく、 http://domain/dir1/ と http://domain/dir2/以下のファイルへの紳士的なロボットのアクセスをブロックしたければ robots.txt に次のように書いておきます:

User-Agent: * 
Disallow: /dir1
Disallow: /dir2

ただし、この方法は /robots.txt を無視しない紳士的なロボットのみに効果がある方法です。

参考になるロボット対策:


META

HTML ファイルの中の <head> </head> の間に以下の一行を挿入しておくと、そのファイルの内容は紳士的な検索エンジンに登録されず、さらに紳士的な検索エンジンのロボットがそのファイル内のリンク先を覗くのを止めるようになります:

<meta name="robots" content="noindex,nofollow">

そのファイルの内容は検索エンジンに登録して欲しいが、そのファイル内のリンクをたどって欲しくない場合は次のように書きます:

<meta name="robots" content="index,nofollow">

ただし、以上の方法は <meta name="robots" ...> を無視しない紳士的な検索エンジンのみに効果があります。

さらに詳しい説明が LYCOS:ロボットによる索引化をさける方法に書いてあります。 HTML Author's Guide to the Robots META tag も参照せよ。

補足: Google によるキャッシュを避ける方法

困ったことに Googleウェブページをキャッシュしてしまいます。だから、読まれたくないファイルをハード・ディスク上から削除しても、 Google のキャッシュを利用されると読まれてしまうことになります。しかし、 HTML ファイルの中の <head> </head> の間に以下の一行を挿入しておくと、 Google はキャッシュするのを止めてくれるようです:

<meta name="robots" content="noarchive">

ただし、この方法で実際にキャッシュが消えるまでにはひと月程度待って Google のロボットが見に来てくれるのを待たなければいけません。それより早くキャッシュを削除してもらいたい場合は japanese@google.com 宛に英文で削除依頼のメールを書かなければいけないようです。


mod_rewrite

ウェブサーバーが Apache の 1.2 以上であり、 mod_rewrite が使用可能に設定してあれば、以下の方法も使えます。この方法は、紳士的でないロボットであっても、他と区別可能な user agent を名乗っている限り効果があります。

.htaccess に以下のように書いておけば、 user agent の中に文字列として Bad_Robot1, Bad_Robot2, Bad_Robot3 が含まれているようなアクセスを全てブロックできます:

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} Bad_Robot1 [OR]
RewriteCond %{HTTP_USER_AGENT} Bad_Robot2 [OR]
RewriteCond %{HTTP_USER_AGENT} Bad_Robot3
RewriteRule ^.*$ - [F]

問題はロボットの user agent 名の情報を手に入れなければいけないことなのですが、それについては自分で工夫して下さい。

ここで、 [OR] は論理的な or を意味し、 [F] はアクセス禁止 (forbidden) を意味しています。

もしくは以下のように書くことによって、特定のブラウザのアクセスのみを許すようにもできます:

RewriteCond %{HTTP_USER_AGENT} !^Mozilla/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^iCab [NC]
RewriteCond %{HTTP_USER_AGENT} !^w3m/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^Lynx/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^Emacs-W3 [NC]
RewriteCond %{HTTP_USER_AGENT} !^Letscape/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^WWWC/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^Wget/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^DoCoMo/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^NATSU-MICAN/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^Cuam [NC]
RewriteCond %{HTTP_USER_AGENT} !^Palmscape/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^WannaBe [NC]
RewriteCond %{HTTP_USER_AGENT} !^NCSA [NC]
RewriteCond %{HTTP_USER_AGENT} !^Playstation [NC]
RewriteCond %{HTTP_USER_AGENT} "!^sharp pda browser/" [NC]
RewriteCond %{HTTP_USER_AGENT} !^Morpheus [NC]
RewriteCond %{HTTP_USER_AGENT} !^JustView/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^Opera/ [NC]
RewriteCond %{HTTP_USER_AGENT} "!^Hatena Antenna/" [NC]
RewriteCond %{HTTP_USER_AGENT} !^Emacs-w3m/ [NC]
RewriteRule ^.*$ - [F]

このように書いておけば、 Mozilla, iCab, w3m, Lynx, Emacs-W3, Letscape, ... 以外のブラウザではアクセスできなくなり、これらのブラウザを詐称してない限り、ロボットはアクセスできなくなります。ただし、 Mozilla を詐称する困りもののロボットも存在するので、さらに以下のように設定しておいた方が良いでしょう:

RewriteCond %{HTTP_USER_AGENT} archiver [NC,OR]
RewriteCond %{HTTP_USER_AGENT} crawler [NC,OR]
RewriteCond %{HTTP_USER_AGENT} robot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} slurp [NC,OR]
RewriteCond %{HTTP_USER_AGENT} spider [NC,OR]
RewriteCond DUMMY CONDITION
RewriteRule ^.*$ - [F]

以上の応用として CGI を先読みしまくる MSIECrawler の CGI へのアクセスをブロックするために、上に追加して (最低限 RewriteEngine on の行は必要) 次のように .htaccess に書いておくこともできます:

RewriteCond %{HTTP_USER_AGENT} MSIECrawler
RewriteRule ^.*\.(cgi|pl)$ - [F]

mod_rewrite で referer をチェックすることもできます。例えば、 RewriteEngine on に加えて次のように書いておけば、 http://host1.subdom1.domain1/, http://host2.subdom2.domain2/, 以下にあるファイルからのリンクをたどったアクセスをブロックできます:

RewriteCond %{HTTP_REFERER} ^http://host1\.subdom1\.domain1 [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://host2\.subdom2\.domain2 [NC]
RewriteRule ^.*$ - [F]

ここで、 [NC] は大文字小文字を区別しない (no case) という意味です。この方法を使えば主要な検索エンジン経由のアクセスをブロックできます。しかし、ブックマークスに登録した後で直接アクセスされるとそのブロックは無効になります。

CGI へのアクセスを http://host.subdom.domain/ からのリンク経由 (およびブックマークス経由) だけに許可し、他のサイトからのリンク経由のアクセスを拒否したい場合には以下のように書いておきます:

RewriteCond %{HTTP_REFERER} !(^$|^bookmarks$|^http://host\.subdom\.domain) [NC]
RewriteRule ^.*\.(cgi|pl)$ - [F]

! はそのパターンにマッチしない場合にその条件が真になることを意味しています。

もちろん、リモート・ホストやリモート・アドレス単位でアクセス制限することもできます:

RewriteCond %{REMOTE_HOST} \.kiraina\.domain\.jp$ [NC,OR]
RewriteCond %{REMOTE_HOST} ^proxy.*\.komatta\.domain\.com$ [NC,OR]
RewriteCond %{REMOTE_ADDR} ^123\.45\.32\. [OR]
RewriteCond %{REMOTE_ADDR} ^124\.84\.21\. [OR]
RewriteCond DUMMY CONDITION
RewriteRule ^.*$ - [F]

リモート・ホストとブラウザの両方が一致している場合にアクセスを禁止することもできます:

RewriteCond %{REMOTE_HOST} \.kiraina\.domain\.jp$
RewriteCond %{HTTP_USER_AGENT} "^Mozilla/3.03 \[ja\] \(Win95; I\)$"
RewriteRule ^.*$ - [F] 

こうしておけば、 *.kiraina.domain.jp からの Mozilla/3.03 [ja] (Win95; I) を用いたアクセスを禁止できます。両方の条件に当てはまる人だけがアクセスできなくなる。大事な点はブラウザ名を "^ $" で囲み、 [ ] ( ) の前に \ を挿入しておくことです。

mod_rewrite は極めて強力です。以上はその最も初歩的な使い方を説明したに過ぎません。より詳しい解説については以下を参照して下さい:

 参考までに、 主要なブラウザのアクセスのみを許すようにするための .htaccess の記述例を以下に掲載しておきます:

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} !^Mozilla/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^iCab [NC]
RewriteCond %{HTTP_USER_AGENT} !^w3m/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^Lynx/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^Emacs-W3 [NC]
RewriteCond %{HTTP_USER_AGENT} !^Letscape/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^WWWC/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^Wget/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^DoCoMo/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^NATSU-MICAN/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^Cuam [NC]
RewriteCond %{HTTP_USER_AGENT} !^Palmscape/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^WannaBe [NC]
RewriteCond %{HTTP_USER_AGENT} !^NCSA [NC]
RewriteCond %{HTTP_USER_AGENT} !^Playstation [NC]
RewriteCond %{HTTP_USER_AGENT} "!^sharp pda browser/" [NC]
RewriteCond %{HTTP_USER_AGENT} !^Morpheus [NC]
RewriteCond %{HTTP_USER_AGENT} !^JustView/ [NC]
RewriteCond %{HTTP_USER_AGENT} !^Opera/ [NC]
RewriteCond %{HTTP_USER_AGENT} "!^Hatena Antenna/" [NC]
RewriteCond %{HTTP_USER_AGENT} !^Emacs-w3m/ [NC]
RewriteRule ^.*$ - [F]

RewriteCond %{HTTP_USER_AGENT} archiver [NC,OR]
RewriteCond %{HTTP_USER_AGENT} crawler [NC,OR]
RewriteCond %{HTTP_USER_AGENT} robot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} slurp [NC,OR]
RewriteCond %{HTTP_USER_AGENT} spider [NC,OR]
RewriteCond DUMMY CONDITION
RewriteRule ^.*$ - [F]

黒木 玄