robots.txt の設定方法、User-agent、Disallow の書き方、迷惑なロボットのアクセスを禁止する例。
robots.txt とは、検索エンジンのロボットを制御するためのファイルです。 ロボット(Robot)は、ボット(Bot)、クローラー(Crawler)、スパイダー(Spider)など、呼び方はいろいろあります。
robots.txt を使う目的は人それぞれだと思いますが、私は不要なボットのアクセスを禁止するために使用しています。 アクセスを禁止する対象は、やたらとサイト内を巡回し、サーバに負荷をかけるロボットです。 サーバのログを調べてみると、「ユーザーのアクセス数よりロボットのアクセス数の方が多かった」なんてこともあります。 ロボットのアクセスは、ユーザーのアクセスと同様、サーバに負荷がかかります。 ページ数が多く、更新頻度が高いサイトであれば、ロボットが多くのページを頻繁に巡回するため、結構な負荷になります。
日本でよく使われている検索エンジンは、Google、Yahoo の2つで、次点で Bing です。 その他の検索エンジンはあまり使われていないので、個人的にはサイトにロボットが来なくても全く問題がないと考えています。 Yahoo! Japan で使用しているエンジンは Google なので、実質 Google と Bing の2種類ということになります。
robots.txt はサイトのトップの階層に置きます。
robots.txt を用意したからといって、ロボットが正しく動作してくれるとは限りません。 悪質なロボットは robots.txt を無視します。 ただ、robots.txt の内容を守らなければいけないというルールもありません。
robots.txt で定義した内容をロボットが即守ってくれるとは限りません。 反映されるまで時間がかかる場合があります。
全てのロボットに対して、全てのページへのアクセスを禁止する場合は以下のように書きます。
User-agent: * Disallow: /
全てのロボットに対して、全てのページへのアクセスを許可する場合は以下のように書きます。
User-agent: * Disallow:
全てのロボットに対して、特定のディレクトリやページへのアクセスを禁止する場合は以下のように書きます。
User-agent: * Disallow: /cgi-bin/ Disallow: /data/ Disallow: /test/test.html Disallow: /abc/*.gif$ Disallow: /memo*/
上の例は以下の場所へのアクセスを禁止しています。
ただし、ワイルドカード(*)やドルマーク($)を使った正規表現のような書き方は、Googleなど一部のロボット以外は無視される場合があります。
TestBot に対してアクセスを禁止する場合は以下のように書きます。 ただし、TestBot 以外はアクセスできます。
User-agent: TestBot Disallow: /
TestBot と exampleBot のアクセスを禁止する場合は以下のように書きます。 TestBot と exampleBot 以外はアクセスできます。
User-agent: TestBot Disallow: / User-agent: exampleBot Disallow: /
このように複数の User-agent: を書く場合は、改行だけの行を1行入れます。
また、逆に TestBot と exampleBot だけアクセスを許可する場合は以下のように書きます。 TestBot と exampleBot 以外はアクセスできません。
User-agent: TestBot Disallow: User-agent: exampleBot Disallow: User-agent: * Disallow: /
User-agent: で使用するロボットの名称は、ロボットのユーザーエージェントに含まれている文字列を指定します。 例えば、Google のロボットのユーザーエージェントは、「Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)」なので、robots.txt では以下のようになります。
User-agent: Googlebot Disallow: /cgi-bin/
ユーザーエージェントはアクセスログなどに記録されているので、それを参考にします。 行儀の良いロボットであれば、ユーザーエージェントにボットの説明が書かれたページの URL が記されているので、そのページを参考に robots.txt を記述します。
アクセスログをよく見る人はご存知かと思いますが、ロボットによっては1秒間に何ページもクロールしていくものがあります。 [F5]キーを連打してリロードを繰り返すのと似たようなもので、ある意味DoS攻撃のようなものです。
Google に次いで利用者が多いと思われる Bing のアクセスはかなりひどく、1秒間に何ページも見て回ることがあります。 Google も結構ひどいですが・・・。 マイナーなロボットはアクセスを拒否すれば良いですが、そこそこ利用者がいる検索エンジンのロボットはできれば拒否したくありません。 そういったロボットのアクセス間隔を調節したい場合は、以下のように Crawl-delay を記述します。
User-agent: bingbot Crawl-delay: 10
Crawl-delay は秒数で指定し、この例では10秒を指定しています。 最低10秒は空けてから次にアクセスしろ、という意味になります。
私のサイトでは、bingbot(msnbot)が Crawl-delay を守っているのを確認しました。 bingbot は複数のホスト名があり、1ホストにつき10秒空けてアクセスしていました。 複数のホスト名があり、ホストごとにルールが適用される場合は、ホストの数や自サイトのページ数などを考慮して秒数を調整すると良いかもしれません。
Googlebot には無効なので、Googlebot のクロールをコントロールしたい場合は Google サーチコンソールで設定します。
robots.txt 内にコメントを書きたい場合やコメントアウトしたい場合は行頭に # を書きます。
# 2017-07-09 User-agent: bingbot Crawl-delay: 10
改行コードは特に決まりはないようですが、いくつか大手のサイトを見たところ LF が多いようで、CR+LF のサイトもありました。 一応 LF で記述した方が無難かもしれません。
robots.txt については、 The Web Robots Pages(robotstxt.org)、 Robots Exclusion Standard(Wikipedia)、 The robots.txt file(w3.org) などが参考になります。