はてなブックマーク
X
Bluesky
Facebook
Pocket

robots.txt の書き方、アクセス禁止や制限について

更新:

robots.txt は、ウェブサイトを自動的に巡回しにくるボットのアクセスを禁止したり、制限したりなどの命令を記述するためのファイル。 ボット(Bot)は、ロボット(Robot)、クローラー(Crawler)、スパイダー(Spider)など呼び方はいろいろある。

robots.txt を使う目的は人それぞれだと思うが、多くの人は不要なボットのアクセスを禁止・制限するために使用している。 サーバーのアクセスログをチェックするとGoogleやBingのボットだけでなく、多くのボットがアクセスしてきていることが分かる。 ひどいときは、ユーザーのアクセス数よりボットのアクセス数の方が多いこともある。

世の中行儀の良いボットばかりでなく、クロール間隔が短かったり、単に情報を収集するだけで自サイトに何も恩恵をもたらさないボットも数多く存在する。 そもそもGoogleとBing以外のボットはほぼ不要と言っても過言ではない。

ボットがサーバーにアクセスするとユーザーのアクセスと同様にサーバーには負荷がかかる。 ページ数が多く、更新頻度が高いサイトであれば、ボットが多くのページを頻繁に巡回するためかなり負荷がかかる。

書き方の例

設置場所

robots.txt はウェブサイトのトップの階層(ルートディレクトリ)に設置する。 URLが https://example.com/ の場合、https://example.com/robots.txt となる。

ただし、robots.txt を設置したからといってボットがその内容に従ってくれるとは限らない。 悪質なボットは命令を無視することもある。 ただ、robots.txt の内容を守らなければいけないというルールもない。

また、robots.txt に記述した内容をボットがすぐに実行してくれるとは限らない。 命令が反映されるまで時間がかかる場合がある。

全てのボットに対する制御

全てのボットに対して全てのページへのアクセスを禁止する場合は以下のように書く。 「*」はワイルドカードで、全てのボットのユーザーエージェントにマッチする。 Disallowは許可しないということ。

User-agent: *
Disallow: /

また、全てのボットに対して全てのページへのアクセスを許可する場合は以下のようにDisallowに何も書かない。

User-agent: *
Disallow:

昔はDisallowのみ使うのが一般的だったが、現在はAllow(許可)を解釈できるボットもある。 以下は全てのボットのアクセスを許可する例。

User-agent: *
Allow: /

全てのボットに対して特定のディレクトリやページへのアクセスを禁止する場合は以下のように書く。

User-agent: *
Disallow: /cgi-bin/
Disallow: /data/
Disallow: /test/test.html
Disallow: /abc/*.gif$
Disallow: /memo*/

上の例は以下の場所へのアクセスを禁止している。

  • cgi-bin ディレクトリ
  • data ディレクトリ
  • test/test.html のページ
  • abc ディレクトリにある全てのGIFファイル(ファイルの末尾が.gifのもの)
  • memo で始まるすべてのディレクトリ(memotest、memoabc など)

ドルマーク($)は末尾を表す。 なお、ワイルドカード(*)やドルマーク($)を使った正規表現のような書き方が無効なボットも存在する。

ここでは User-agent や Disallow など頭文字を大文字で書いているが、user-agent や disallow のように小文字で書いても良い。

特定のボットに対する制御

User-agent: にはボットのユーザーエージェントをそのまま全て記述するのではなく、ボットの名称など一部の文字列を記述する。 ユーザーエージェントトークンなどと呼ばれる。 例えば、Googleのボットは種類がたくさんあるが、最も一般的なユーザーエージェントトークンは「Googlebot」。

ユーザーエージェントはサーバーのアクセスログなどに記録されているので、それを参考にする。 行儀の良いボットであればユーザーエージェントにボットの説明が書かれたページのURLが記されているので、そのページを参考にすると良い。

User-agent: Googlebot
Disallow: /cgi-bin/

TestBot に対してアクセスを禁止する場合は以下のように記述する。 ただし、TestBot 以外はアクセス可能。

User-agent: TestBot
Disallow: /

TestBot と exampleBot のアクセスを禁止する場合は以下のように記述する。 TestBot と exampleBot 以外はアクセス可能。

User-agent: TestBot
Disallow: /

User-agent: exampleBot
Disallow: /

複数のボットを指定したい場合は複数書けば良い。 以下のように書くこともできる。

User-agent: TestBot
User-agent: exampleBot
Disallow: /

複数のボットを記述する場合、どのようにまとまって(グループ化されて)解釈されるかに注意する。 ボットの仕様によるが、最後の Disallow や Allow が命令の最後と解釈し、もし Disallow や Allow がない場合は、前後の User-agent にも命令が影響することがある。

また、逆に TestBot と exampleBot だけアクセスを許可する場合は以下のように記述する。 TestBot と exampleBot 以外はアクセス不可。

User-agent: TestBot
Disallow:

User-agent: exampleBot
Disallow:

User-agent: *
Disallow: /

ボットがクロールする間隔を遅くする(長くする)

サーバーのアクセスログをよくチェックしている人は見たことがあると思うが、ボットによっては1秒間に何ページもクロールしているものがある。 [F5]キーを連打してページのリロードを何度も行っているのと同じようなもので悪質。 サーバーに負荷がかかる。

Bingbot(msnbot)のクロール間隔は現在は多少マシになったが、今でもかなり短い間隔で無駄にクロールを行っている場合がある。 特にページ数が多いサイトだと、どのボットも短い間隔でクロールする傾向がある。 マイナーなボットはアクセスを拒否すれば良いが、そこそこ利用者がいる検索エンジンのボットは拒否しにくい。 そういったボットのアクセス間隔を調節したい場合は、Crawl-delay を記述すると良い。

User-agent: bingbot
Crawl-delay: 10

Crawl-delay はボットがクロールする間隔を秒数で指定し、この例では10秒を指定している。 最低10秒は空けてから次にアクセスしてくださいという意味。

Bingbotは一応Crawl-delayが有効。 ボットの中にはCrawl-delayが無効な場合もある。 GooglebotはCrawl-delayに対応していない。

コメント、コメントアウト

robots.txt 内にコメントを書きたい場合やコメントアウトしたい場合は # を使用する。

# Search Engine
User-agent: bingbot
Crawl-delay: 10

改行コード

改行コードは特に決まりがなく、LF、CR、CR+LF どれでも良い。 一般的には LF にしておく方が無難。

参考

以下のGoogle検索セントラルの情報が参考になる。


はてなブックマーク
X
Bluesky
Facebook
Pocket