≫検索エンジンロボットとは
検索エンジンロボットとは、ロボットといっても2足歩行ロボット(ASIMO)などのように物理的な形はなく、Webサイトの情報をリンクを辿りながら自動的に収集するプログラムです。
検索エンジンロボットは、その名からもわかる通り、Googleやgooといった検索サイトで検索機能を提供するためにWebサイトの情報を集めています(検索以外を目的とするロボットもいますが)。
検索エンジンロボットがWebサイトの情報を集めるためにサイトにアクセスすることを「クロール」とか「巡回」とか言います。
検索エンジンロボットにアクセスされたページが検索結果に反映されることを「インデックスされる」とか言います。
検索エンジンロボットは、その名からもわかる通り、Googleやgooといった検索サイトで検索機能を提供するためにWebサイトの情報を集めています(検索以外を目的とするロボットもいますが)。
検索エンジンロボットがWebサイトの情報を集めるためにサイトにアクセスすることを「クロール」とか「巡回」とか言います。
検索エンジンロボットにアクセスされたページが検索結果に反映されることを「インデックスされる」とか言います。
≫検索エンジンロボットの巡回を知る
検索エンジンの巡回は、Webサーバログやアクセス解析CGIにより知ることが出来ます。
アクセス解析CGIの場合は、ロボット検索エンジンが基本的にWebページのテキスト情報のみを収集し、画像は読み込まないため、イメージタグでアクセス解析を呼び出すタイプではロボットの訪問を知ることができません。
SSI式のアクセス解析を利用しましょう。
Webサーバに残るロボットのアクセスには以下の様なものがあります。
ただ、HTTP_USER_AGENT の値は偽装できるので、REMOTE_HOSTの値もあわせてチェックすると良いでしょう。
アクセス解析CGIの場合は、ロボット検索エンジンが基本的にWebページのテキスト情報のみを収集し、画像は読み込まないため、イメージタグでアクセス解析を呼び出すタイプではロボットの訪問を知ることができません。
SSI式のアクセス解析を利用しましょう。
Webサーバに残るロボットのアクセスには以下の様なものがあります。
-
googlebot
crawler10.googlebot.com - - [05/Dec/2003:13:49:09 +0900] "GET /st/ds/ HTTP/1.0" 200 39464 "-" "Googlebot/2.1 (+http://www.googlebot.com/bot.html)" -
Slurp/cat
j3114.inktomisearch.com - - [05/Dec/2003:21:28:35 +0900] "GET /st/dcp/ HTTP/1.0" 200 9375 "-" "Mozilla/5.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)" -
Infoseek SideWinder
210.148.160.162 - - [05/Dec/2003:11:33:55 +0900] "GET /st/ HTTP/1.0" 200 11311 "-" "Infoseek SideWinder/2.0B (Linux 2.4 i686)" -
FAST-WebCrawler
mmscrm10-2.sac2.fastsearch.net - - [06/Dec/2003:03:06:50 +0900] "GET /robots.txt HTTP/1.0" 200 121 "-" "FAST-WebCrawler/3.x Multimedia (mm dash crawler at fast dot no)" -
ia_archiver
crawl22-public.alexa.com - - [05/Dec/2003:18:05:16 +0900] "GET /st/pdmemo/fileext.html HTTP/1.0" 200 14714 "-" "ia_archiver"
ただ、HTTP_USER_AGENT の値は偽装できるので、REMOTE_HOSTの値もあわせてチェックすると良いでしょう。
≫厄介な検索エンジンロボット
検索エンジンロボットのアクセスを監視すると、意外に厄介なことがわかります。
なぜならば、検索エンジンロボットがプログラムなだけに一時的に集中アクセスを行ってくるのです。
かつて存在した(今もある?) ○-rex というロボットのアクセスは絨毯爆撃と呼ばれるほどひどいものでした。
Webサイト上のページを時間間隔をほとんど空けず根こそぎクロールしていくのです。
ページ数が多く非力なWebサーバだとたちまちダウン寸前に追い込まれそうなほどその振る舞いはひどいものでした(まさにロボットの名前そのものといった感じでした)。
最近の検索エンジンロボットは、一部を除いて集中アクセスに関して随分と礼儀正しくなっています。
また、検索エンジンのロボットに巡回されると意図せず検索エンジンに登録されます。
基本的に非公開のものをWeb上に置くべきではないのですが、様々な条件や理由でこういった意図しない登録を避けたいという場面があると思います。
そういった場合に備えて、100%ではありませんがロボットの振る舞いを制御する方法が用意されています。
なぜならば、検索エンジンロボットがプログラムなだけに一時的に集中アクセスを行ってくるのです。
かつて存在した(今もある?) ○-rex というロボットのアクセスは絨毯爆撃と呼ばれるほどひどいものでした。
Webサイト上のページを時間間隔をほとんど空けず根こそぎクロールしていくのです。
ページ数が多く非力なWebサーバだとたちまちダウン寸前に追い込まれそうなほどその振る舞いはひどいものでした(まさにロボットの名前そのものといった感じでした)。
最近の検索エンジンロボットは、一部を除いて集中アクセスに関して随分と礼儀正しくなっています。
また、検索エンジンのロボットに巡回されると意図せず検索エンジンに登録されます。
基本的に非公開のものをWeb上に置くべきではないのですが、様々な条件や理由でこういった意図しない登録を避けたいという場面があると思います。
そういった場合に備えて、100%ではありませんがロボットの振る舞いを制御する方法が用意されています。
≫ロボットを制御する:METAタグ
HTMLページにMETAタグを記述することにより、そのページにアクセスするロボットの振る舞いを制御できます。
METAタグは<HEAD>〜</HEAD>内に記述します。
ROBOTS や NOINDEX は一般的に大文字が正しい記述とされています。
<META NAME="ROBOTS" CONTENT="NOINDEX">
上記はページを登録させない(NOINDEX)という意味です。
<META NAME="ROBOTS" CONTENT="NOFOLLOW">
上記はページ内のリンクを辿らない(NOFOLLOW)という意味です。
以上ふたつの制御を同時に書く場合は
<META NAME="ROBOTS" CONTENT="NOINDEX,NOFOLLOW">
という風にカンマで区切ってひとつで書くことが出来ます。
また、Googleなどページをインデックスするだけでなくキャッシュ保存するロボットの場合、
<META NAME="ROBOTS" CONTENT="NOARCHIVE">
とするとキャッシュされることを防ぎます。
当然、全てひとつにまとめることも可能です。
<META NAME="ROBOTS" CONTENT="NOINDEX,NOFOLLOW,NOARCHIVE">
以上は、拒否する記述ですが、SEOなどの観点から積極的にロボットの訪問を受け入れたい場合、明示的にインデックスやクロールを許可するように記述しておくことも可能です。
<META NAME="ROBOTS" CONTENT="INDEX,FOLLOW">
ただし、許可に関しては明示しなくても拒否の記述がない限りロボットは勝手に巡回してインデックすると思って間違いありません。
ロボット向け(だけではありませんが)のMETAタグには他にも description や keyword などありますが、ここでは振る舞いに関する name="ROBOT" のみの説明にとどめます。
METAタグは<HEAD>〜</HEAD>内に記述します。
ROBOTS や NOINDEX は一般的に大文字が正しい記述とされています。
<META NAME="ROBOTS" CONTENT="NOINDEX">
上記はページを登録させない(NOINDEX)という意味です。
<META NAME="ROBOTS" CONTENT="NOFOLLOW">
上記はページ内のリンクを辿らない(NOFOLLOW)という意味です。
以上ふたつの制御を同時に書く場合は
<META NAME="ROBOTS" CONTENT="NOINDEX,NOFOLLOW">
という風にカンマで区切ってひとつで書くことが出来ます。
また、Googleなどページをインデックスするだけでなくキャッシュ保存するロボットの場合、
<META NAME="ROBOTS" CONTENT="NOARCHIVE">
とするとキャッシュされることを防ぎます。
当然、全てひとつにまとめることも可能です。
<META NAME="ROBOTS" CONTENT="NOINDEX,NOFOLLOW,NOARCHIVE">
以上は、拒否する記述ですが、SEOなどの観点から積極的にロボットの訪問を受け入れたい場合、明示的にインデックスやクロールを許可するように記述しておくことも可能です。
<META NAME="ROBOTS" CONTENT="INDEX,FOLLOW">
ただし、許可に関しては明示しなくても拒否の記述がない限りロボットは勝手に巡回してインデックすると思って間違いありません。
ロボット向け(だけではありませんが)のMETAタグには他にも description や keyword などありますが、ここでは振る舞いに関する name="ROBOT" のみの説明にとどめます。
≫ロボットを制御する:robots.txt
Webサーバのルート(Webからアクセスできる最上位ディレクトリ)にファイルを置く権限があれば、robots.txt というファイルによって検索エンジンロボットの巡回を制御できます。
ルートにファイルを置く権限がない一般ユーザでも、自分のディレクトリの最上位に置いておけば丁寧なロボットなら見てくれるかもしれません。
しかし、振る舞いを制御したいロボットは多くの場合丁寧ではないロボットなので効果は薄いかもしれません。
robots.txt は単なるテキストファイルです。
パーミションは 604 とか 644 としておけば良いでしょう。
では、肝心な中身ですが、以下のように記述します。
User-Agent: *
Disallow: /cgi-bin/
Disallow: /example.html
全てのロボットに対して /cgi-bin/ ディレクトリとexample.html への巡回を禁止しています。
最下行の Disallow: の下には常に一行改行が必要です。
User-Agent: *
というのが対象ロボットを記述する部分です。
「*」というのはワイルドカードといって全てのロボットを対象にするという意味です。
例えば、Google のロボット Googlebot に対して禁止する場合は
User-agent: Googlebot
と書きます。
Disallow: /cgi-bin/
というのは、対象ロボットに対してディレクトリやファイルへの巡回を禁止する記述です。
Googlebotは正規表現的な表現もきちんと読んでくれますので
Disallow: /*.gif$
としてGIF画像ファイルへのアクセスを制御することも可能です(Googleには画像収集ロボットもある)。
全てのロボットに全てのファイルへのアクセスを禁止したい場合は
User-Agent: *
Disallow: /
と書きます。
複数のロボットに対して制御を記述する場合は
User-Agent: Googlebot
Disallow: /cgi-bin/
Disallow: /*.gif$
User-Agent: Slurp
Disallow: /example.html
という風に記述します。
ロボットごとのくくりは空白行で区切る必要があります。
ロボットの大半はrobots.txt の記述を守ってくれますが、行儀の悪いロボットはrobots.txtを無視してインデックスしまくっていきます。
そういった悪ガキに対処するにはもはやホスト規制しかないかもしれません。
robots.txt を置く時の注意点としては、robots.txt自体が丸見えだということです。
URLに ルート+robots.txt と打つことで robots.txt の中身が読めてしまいます。
そしてその中にはインデックスされたくないファイルの情報が書かれているのです。
ロボットはそれで制御できますが、今度はたちの悪い人間がそいういったところを盗み見て悪さを仕掛けてくることがあります。
この辺の対処には難しい所がありますが、注意した方が良いかもしれません。
METAタグによる制御にしても robots.txt による制御にしても同じですが、ロボットを100%制御できるわけではありません。
METAタグなんてけっこう無視されがちだし、robots.txtでも読まなかったり、見て見ぬふりなんてザラです。
そういった制御をさせない"行儀が悪い"ロボットはホスト規制と連携して弾くのが一番です。
ルートにファイルを置く権限がない一般ユーザでも、自分のディレクトリの最上位に置いておけば丁寧なロボットなら見てくれるかもしれません。
しかし、振る舞いを制御したいロボットは多くの場合丁寧ではないロボットなので効果は薄いかもしれません。
robots.txt は単なるテキストファイルです。
パーミションは 604 とか 644 としておけば良いでしょう。
では、肝心な中身ですが、以下のように記述します。
User-Agent: *
Disallow: /cgi-bin/
Disallow: /example.html
全てのロボットに対して /cgi-bin/ ディレクトリとexample.html への巡回を禁止しています。
最下行の Disallow: の下には常に一行改行が必要です。
User-Agent: *
というのが対象ロボットを記述する部分です。
「*」というのはワイルドカードといって全てのロボットを対象にするという意味です。
例えば、Google のロボット Googlebot に対して禁止する場合は
User-agent: Googlebot
と書きます。
Disallow: /cgi-bin/
というのは、対象ロボットに対してディレクトリやファイルへの巡回を禁止する記述です。
Googlebotは正規表現的な表現もきちんと読んでくれますので
Disallow: /*.gif$
としてGIF画像ファイルへのアクセスを制御することも可能です(Googleには画像収集ロボットもある)。
全てのロボットに全てのファイルへのアクセスを禁止したい場合は
User-Agent: *
Disallow: /
と書きます。
複数のロボットに対して制御を記述する場合は
User-Agent: Googlebot
Disallow: /cgi-bin/
Disallow: /*.gif$
User-Agent: Slurp
Disallow: /example.html
という風に記述します。
ロボットごとのくくりは空白行で区切る必要があります。
ロボットの大半はrobots.txt の記述を守ってくれますが、行儀の悪いロボットはrobots.txtを無視してインデックスしまくっていきます。
そういった悪ガキに対処するにはもはやホスト規制しかないかもしれません。
robots.txt を置く時の注意点としては、robots.txt自体が丸見えだということです。
URLに ルート+robots.txt と打つことで robots.txt の中身が読めてしまいます。
そしてその中にはインデックスされたくないファイルの情報が書かれているのです。
ロボットはそれで制御できますが、今度はたちの悪い人間がそいういったところを盗み見て悪さを仕掛けてくることがあります。
この辺の対処には難しい所がありますが、注意した方が良いかもしれません。
METAタグによる制御にしても robots.txt による制御にしても同じですが、ロボットを100%制御できるわけではありません。
METAタグなんてけっこう無視されがちだし、robots.txtでも読まなかったり、見て見ぬふりなんてザラです。
そういった制御をさせない"行儀が悪い"ロボットはホスト規制と連携して弾くのが一番です。
≫参考
TOP > スクリプト制作メモ > 検索エンジンロボットを制御する