robots
robots.txt
概要(サマリー)
robots(正式には robots.txt)とは、Webサイトのトップページがあるフォルダ(ルートディレクトリ)に置く、検索エンジンのクローラー(自動ロボット)向けの「案内板」となるテキストファイルである。
お店の「関係者以外立入禁止」や「撮影禁止」の看板にたとえられる。クローラーに対して、「このフォルダの中は個人情報や管理画面が入っているから見にこないでね」「この部分はどんどん巡回して宣伝してね」と伝えることで、サイトのインデックスを適切に整理してもらい、余計なアクセスによるサーバー負荷を減らすことができる。
公開中のサイトにどのようなrobots.txtが置かれているかを確認したい場合は、チェックツールを使うと、Disallow、Allow、Sitemapなどの指定を見やすく確認できる。
詳細解説
robots.txtとは何か
robots.txt は、インターネット標準のプロトコル(ロボット排除規約)に基づいたファイルである。
クローラーはWebサイトを巡回する前に、サイトのルート(例:https://example.com/robots.txt)にあるこのファイルを確認し、そこに書かれた指示を参照してから中を巡回することが多い。結果はしばらく保存されるため、ページを見るたびに毎回読み直すわけではない。
robots.txtの基本的な書き方
robots.txt は非常にシンプルなテキストファイルである。記述される主な指示項目は以下の通りである。
- User-agent: 指示を与えるクローラーの種類を指定する。
*と書けば「すべてのクローラー」を指す。 - Disallow: クロールを「禁止する」パス(フォルダやファイルの場所)を指定する。
- Allow: クロールを「許可する」パスを指定する(Disallowの例外を作るときに使う)。
- Sitemap: クローラー向けのサイトマップ(XMLファイル)のURLを提示して、サイトの構造を伝える。
具体的な記述のコード例
# すべてのクローラーに適用する指示
User-agent: *
# 管理画面(/admin/)と一時ファイル(/temp/)へのアクセスを禁止する
Disallow: /admin/
Disallow: /temp/
# 上記以外のページのクロールは許可(省略しても基本は許可されます)
Allow: /
# サイトマップの場所をクローラーに伝える
Sitemap: https://example.com/sitemap.xml
なぜrobots.txtが必要なのか
- クロール効率の最大化(クロールバジェットの節約):
検索エンジンが一日にWebサイトを巡回できる限界量には限りがある。無駄なページ(管理画面、重複ページ、システム内の中間ファイルなど)の巡回を拒否することで、検索結果に載せたい重要なコンテンツを優先的にクロールしてもらえる。 - サーバー負荷の軽減:
大規模なサイトやプログラム処理が重いページにクローラーが頻繁に来ると、一般のユーザーがサイトを開く速度が遅くなることがある。これを防ぐためにアクセス制限をかける。
robots.txtの限界と注意点
- 強制力がない:
robots.txtは「お願い」であり、悪質なクローラー(スパムやコピーサイト制作用のロボット)はこれを平気で無視して侵入してくる。 - パスが公開されてしまう:
robots.txtは誰でもブラウザから直接中身を見ることができる。そのため、Disallow: /secret-admin-folder-xyz/などと書くと、逆に「ここに秘密の管理画面がある」とハッカーに教えてしまう結果になり危険である。重要な場所はパス名だけで隠そうとせず、パスワード認証(Basic認証)などで技術的に保護するべきである。
AIコーディングとの関係
Webサイト(特にWordPressなどのCMSや、独自のフレームワークを用いたサイト)を構築して公開する際、AIを使ってそのサイトに最適な robots.txt を自動生成させることができる。
- 構成に合わせた自動生成指示:
AIに対して、「Laravelで作ったWebアプリケーションの一般的な構成に合わせた、セキュリティ上適切でクロール効率の良いrobots.txtを書いてください」や「WordPressサイト用の一般的なrobots.txtの内容を教えて」と指示する。
これにより、自作したり手動で調べたりしなくても、適切な除外ディレクトリが含まれたファイルを即座に作成できる。
WordPress向けにAIに作成させた robots.txt の例:
User-agent: *
# 管理画面のクロールを拒否
Disallow: /wp-admin/
# フロント側から使われる admin-ajax.php は許可する
Allow: /wp-admin/admin-ajax.php
# サイトマップの指定
Sitemap: https://example.com/wp-sitemap.xml
CSSやJavaScriptは、多くの場合 /wp-content/ や /wp-includes/ にある。そこまで Disallow すると、検索エンジンがページの見た目を正しく読めなくなることがある。Googleは、必要なCSSとJavaScriptまで塞がないよう案内している。
よくある勘違い
robots.txtで禁止すれば、検索結果(Google)から完全に消える?
消えないことがある。
robots.txt の Disallow は、あくまでクローラーが「そのページを巡回して中身を読むこと」を禁止するだけである。もし他のWebサイトからそのページへ大量のリンクが貼られていた場合、Googleは中身を読まないまま「URLとページのタイトルだけ」を検索結果に登録してしまうことがある。
検索結果から完全にページを消去したい場合は、robots.txt で拒否するのではなく、HTMLの <head> に noindex のメタタグを設定し、クローラーにそのページを一度読み込ませて「登録しない」という指示を理解させる必要がある(両者を併用すると、クローラーがページにたどり着けず noindex タグを読めなくなるため、消去したい場合は robots.txt で Disallow にしてはならない)。
robots.txtは必ず作らないとエラーになる?
なくてもWebサイトは正常に動作するし、Googleなどの検索エンジンも通常通りインデックスしてくれる。
ファイルがないと、クローラーが robots.txt を確認したときに「404 Not Found」が記録されることがある。ページを見るたびに毎回取りにいくわけではない。中身として拒否したい場所がない場合は、次のような「特に拒否しない」ファイルを置いておくと、意図が伝わりやすい。
User-agent: *
Disallow:
robots.txtに書けばAIの学習用クローラーも止められる?
公式の学習用クローラーの多くは、robots.txt の指示に従う。OpenAIのGPTBot、AnthropicのClaudeBot、Common CrawlのCCBotのように、名前を指定して Disallow できるものがある。
ただし、robots.txt に強制力はない。指示を無視するボットは止まらない。検索エンジンが保存したページの二次利用まで、robots.txt だけでは止められないこともある。非公開にしたい情報は、認証やアクセス制限で守る。
まとめ
robots.txtは、検索エンジンのクローラーに対して、サイトのどの部分を巡回すべきかを指示するテキストファイル。- サイトのルートディレクトリに配置され、クローラーが最初に読み込む。
- クロール効率の向上や、無駄な通信によるサーバー負荷の軽減に役立つ。
- 「お願い」に過ぎず強制力はないため、非公開の重要なデータはパスワード認証等で保護する必要がある。
情報ソース
より詳しくAIに聞いてみよう
- WordPressの主要なフォルダ(wp-content, wp-includesなど)について、それぞれ robots.txt でクロールを禁止すべきかどうか、Googleの最新の推奨事項とあわせて教えてください。
robots.txtのDisallow設定と、HTML内の<meta name="robots" content="noindex">(noindexタグ)の使い分けについて、検索結果から非公開ページを消したい場合の正しい手順を含めて解説してください。- 独自のスクレイピングロボット(ボット)を開発する際、アクセス対象のサイトにある
robots.txtをプログラムで読み込んで解析し、その指示に従うお行儀の良い実装方法を教えてください。 - 特定のクローラー(例:AIの学習用ボットであるGPTBotなど)からのアクセスだけを拒否し、Googleなどの一般検索は許可する
robots.txtの書き方を教えてください。 robots.txtに文法上の間違いがないかテスト・検証するためのツール(Google Search Consoleなど)の使い方について教えてください。