Robots Exclusion Standard(RES) または Robots Exclusion Protocol は、クローラやボットがウェブサイト全体またはその一部を走査することを防ぐ規約である。ロボット排除規約、robots.txt プロトコルとも呼ばれる。こういったボットは検索エンジンがウェブサイトの内容を分類しアーカイブするために主に使ったり、ウェブマスターがソースコードを校正するために使ったりする。直接の関係はないが、逆にボットを案内する目的のSitemapsと組み合わせて使うこともできる。
"robots.txt" は、1994年ごろWebCrawlerという検索エンジンで働いていた Martijn Koster が考案したとされている。1994年6月に robots-request@nexor.co.uk というメーリングリストのメンバーが合意して生まれた[1]。"robots.txt" はその翌年AltaVistaなどの検索エンジンが登場すると共に一般化していった。
2007年11月30日、ACAP (Automated Content Access Protocol) v1.0 が Robots Exclusion Standard を補完するものとして登場した[2]。ただしGoogleなど主要検索エンジンは、その採用を表明していない。
2019年、GoogleがIETFでの標準化を進めることを発表し[3]、2022年9月、RFC 9309として提案された[4]。
ウェブサイトの所有者がボットに対して指示したい場合、そのウェブサイトの階層のルートに robots.txt
というテキストファイルを置く(例えば、www.example.com/robots.txt
)。サイト側の指示に従う選択をしているボットは、まずこのファイルにアクセスし、その指示を読み込んで、それに従ってそのウェブサイトの他のファイルの読み込みを行う。このファイルがない場合、ボットはそのサイトの所有者が特に何も指示していないと判断する。
robots.txt はボットに対して特定のファイルやディレクトリを検索しないよう指示する。これは例えば、検索エンジンからプライバシーに関わる情報を守る場合、指定したファイルやディレクトリの内容がサイトの分類をする際に誤解を与える虞がある場合、特定のアプリケーションのみが読み込むことを意図したデータの場合などがある。
下位ドメインがあるウェブサイトでは、各下位ドメインごとに robots.txt ファイルが必要である。example.com
に robots.txt があっても、a.example.com
になければ、example.com
の robots.txt の内容は a.example.com
には適用されない。
このプロトコルは全く拘束力がない。あくまでもボット側が協力することが前提であり、robots.txt で指定したからといってプライバシーが保たれることを保証するものではない。robots.txt で見られたくないファイルを指定したとしても、ウェブブラウザを使えば世界中の誰でもそのファイルを閲覧できる。また、このプロトコルを無視するボットを運用することも可能である。
なお、robots.txt に書かれたパターンは単純にパス名の部分と一致するかどうかで判断されるため、ディレクトリを指定する場合は最後に '/' を付けておかないと同じ文字列を含む任意のファイルとマッチする可能性がある。
ワイルドカード "*" を指定した例。あらゆるボットが全ファイルを走査できる。
User-agent: *
Disallow:
あらゆるボットが全ファイルを走査できないようにした例。
User-agent: *
Disallow: /
あらゆるボットが4つのディレクトリ配下を見ないよう指定した例。
User-agent: *
Disallow: /cgi-bin/
Disallow: /images/
Disallow: /tmp/
Disallow: /private/
特定のクローラが特定のディレクトリ配下に行かないよう指定した例。
User-agent: BadBot # replace the 'BadBot' with the actual user-agent of the bot
Disallow: /private/
あらゆるボットが特定のファイルを見ないよう指定した例。
User-agent: *
Disallow: /directory/file.html
この場合、そのディレクトリ配下の他のファイルはボットから隠蔽されない。
"#" からその行末まではコメントとして扱われる。
# Comments appear after the "#" symbol at the start of a line, or after a directive
User-agent: * # match all bots
Disallow: / # keep them out
いくつかの主要なクローラは Crawl-delay
というパラメータをサポートしている。同一サーバに要求を繰り返す場合に指定された時間だけ待つよう指示するものである[5][6][7]。
User-agent: *
Crawl-delay: 10
いくつかの主要なクローラは Allow
ディレクティブをサポートしており、それに続く Disallow
ディレクティブの逆の作用をする[8][9]。これは、あるディレクトリ全体を隠蔽したいが、その中の一部ファイルだけは隠蔽したくないという場合に使う。標準的実装では常に先に書いてあるディレクティブが優先されるが、Googleは Allow のパターンを全て先に評価し、その後 Disallow のパターンを評価する。Bing は Allow
も Disallow
も最も具体的なものを優先する[10]。
あらゆるボットで互換な動作にするには、あるファイルへのアクセスを許す Allow ディレクティブを先に書き、そのファイルを含むディレクトリについての Disallow ディレクティブを後に書く。以下に例を挙げる。
Allow: /folder1/myfile.html
Disallow: /folder1/
この場合、/folder1/ というディレクトリの /folder1/myfile.html というファイル以外は隠蔽する。Googleに対しては順序は重要ではない。
一部のクローラは Sitemap
ディレクティブをサポートしており、1つの robots.txt の中で複数のSitemapsを指定できる[11]。
Sitemap: http://www.gstatic.com/s2/sitemaps/profiles-sitemap.xml
Sitemap: https://www.google.com/hostednews/sitemap_index.xml
Extended Standard for Robot Exclusion と題してRESの拡張規格が提案されている。追加されたディレクティブとしては Visit-time や Request-rate がある。例えば次のようになる。
User-agent: *
Disallow: /downloads/
Request-rate: 1/5 # maximum rate is one page every 5 seconds
Visit-time: 0600-0845 # only visit between 06:00 and 08:45 UTC (GMT)