Domain 2 / 225
robots.txt は Googlebot にクロール可否を伝えるファイル
robots.txt の要点
robots.txt は Googlebot のクロール可否を伝えるファイル。Disallow してもインデックスから消えず URL だけ検索結果に出る場合あり。ホストごとに 1 つ、ルートに置く必要がある。Googlebot 用 group があると `*` の指定は無視される
なぜこれを学ぶか
robots.txt は 1 行のミスでサイト全体が検索結果から消える 事故を起こせる、危険度の高いファイル。 逆に正しく使えばクロール予算を節約し、重要ページにクローラーのリソースを集中できる。 SEO 担当者・Web ディレクター・コンサルが最初に押さえるべきトピックで、ここを理解せず Search Console を触るのは事故のもと。
学ばないと起きること
| よくある事故 | 被害 |
|---|---|
開発時の Disallow: / がリリース後の本番に残ったまま | サイト全体が検索結果から消えてオーガニック流入がゼロになる |
| ステージング環境を robots.txt の Disallow だけで守る | 被リンクから URL が発見され、ステージング URL が「説明なし」のまま検索結果に張り付く |
| インデックスから消したいページに Disallow を追加 | noindex タグがクロールされず、インデックスは残ったまま |
| CSS / JS を Disallow | Googlebot がレンダリング失敗、モバイル対応判定もずれてランキング影響 |
| robots.txt が 5xx を返し続ける | Google が 12 時間で全クロール停止、その後 30 日は古い版で動く |
学ぶメリット
- 全クロール停止の事故を未然に防げる(自分の手でも、レビューを受けるクライアントの手でも)
- 大規模サイトでクロール予算を最適化し、重要ページのインデックス速度を上げられる
- ステージング・テスト環境を「robots.txt + noindex」の正しい組み合わせで守れる
- 商談で「Disallow とインデックス削除の違い」を即答できれば、SEO 担当としての信頼を得やすい
仕組み
robots.txt とは何か
サイトのルートに置くプレーンテキストファイル。Googlebot は他のページをクロールする前にこのファイルを取得・解析し、「どの URL をクロールしていいか」を決める。
中身はシンプルで、Google が解釈するフィールドは 4 種類だけ。
| フィールド | 意味 | 例 |
|---|---|---|
user-agent | ルールの対象クローラー | Googlebot / *(すべて) |
disallow | クロール禁止のパス | /admin/ |
allow | クロール許可のパス(disallow 内の例外指定で使う) | /admin/public/ |
sitemap | サイトマップの絶対 URL | https://example.com/sitemap.xml |
crawl-delay 等のフィールドは Google では無視される。クロール頻度は Search Console から調整する。
ファイルの配置場所
ホスト・プロトコル・ポート単位で 1 つ。サブディレクトリの robots.txt は読まれない。
| URL | 有効な範囲 |
|---|---|
https://example.com/robots.txt | https://example.com/ 配下すべて |
https://www.example.com/robots.txt | www.example.com のみ。example.com(www なし)には適用されない |
https://example.com/folder/robots.txt | 無効。サブディレクトリの robots.txt は読まれない |
https://example.com:8181/robots.txt | 非標準ポート 8181 のみ。標準ポートのサイトには適用されない |
HTTP ステータスコード別の挙動
robots.txt の取得結果ごとに Google の対応が変わる。これを知らずにサーバートラブルを起こすと、意図せずクロール停止になる。
| ステータス | Google の挙動 |
|---|---|
| 2xx | robots.txt を正常処理する |
| 3xx | 5 ホップまでリダイレクトを追跡、それ以上は 404 扱い |
| 4xx(429 を除く) | robots.txt が存在しないとみなす(クロール制限なしで動く) |
| 429 | リトライする |
| 5xx | 最初の 12 時間: 全クロール停止 / その後 30 日: 直近の有効版を使用 / 30 日経過後: 「robots.txt なし」扱いに切り替わる |
| DNS・ネットワークエラー | 5xx と同じ扱い |
robots.txt のレスポンスは Google 側で最大 24 時間キャッシュされる。Cache-Control: max-age でキャッシュ寿命を短縮できる
キー概念
Disallow と「インデックス削除」は別物
最も多い誤解。robots.txt の Disallow は「クロールしない」だけで、被リンク経由で URL が発見されれば検索結果に「説明なし URL」として出る場合がある。
検索結果から確実に消したい場合の正しい順序:
- まず meta robots
noindex(またはX-Robots-Tag: noindex)でインデックスを外す - インデックス削除を確認した後で、必要なら robots.txt の Disallow を追加する
逆順にすると、クローラーが noindex を読みに来られず、インデックスが永久に残る
ワイルドカード(* と $)
| 記号 | 意味 |
|---|---|
* | 任意の文字列 0 個以上 |
$ | URL の末尾 |
例:
disallow: /*.pdf$
これは「.pdf で終わる URL すべて」を禁止する。
/file.pdf?ref=email のようにパラメータ付きの URL は対象外になる(末尾が .pdf ではないため)
優先順位のルール
複数ルールが衝突した場合のルール:
- まず「最も長く一致するルール」が勝つ
- 同じ長さで衝突した場合は「制限の緩い方(allow)」が勝つ
例:
allow: /folder
disallow: /folder
→ 同じ長さで衝突するので allow 側が勝ち、/folder はクロールされる。
allow: /page
disallow: /*.htm
→ /page.htm に対しては /*.htm の方が長く一致するので disallow 側が勝つ
user-agent の優先順位
Google のクローラーは「最も具体的に一致する user-agent グループ」だけを見る。
* グループと Googlebot グループの両方があれば、Googlebot は Googlebot グループだけを見て * は無視する。
User-agent: *
Disallow: /admin/
User-agent: Googlebot
Disallow: /api/
→ Googlebot は /api/ のみ Disallow。/admin/ には何の制限もない(* を無視する)
* の制限を Googlebot にも効かせたければ、Googlebot グループにも明示的に書く必要がある
よくある誤解
| よくある誤解 | 実際のところ | 出典 |
|---|---|---|
| Disallow すれば検索結果から消える | URL は被リンクで発見され、説明なしで検索結果に出ることがある | robots.txt の概要 |
| Disallow と noindex を一緒に書けば確実 | NG。Disallow するとクローラーが noindex を読みに来られない | noindex の使い方 |
| Crawl-delay でクロール頻度を制御できる | Google は crawl-delay を無視。頻度調整は Search Console から | Google が robots.txt を解釈する方法 |
| サブディレクトリの robots.txt も読まれる | 読まれない。ルートに 1 つだけ | 同上 |
User-agent: * の制限は Googlebot にも効く | Googlebot 用 group があると * は無視される | 同上 |
| robots.txt が 503 を返しても何もしないのが安全 | 12 時間で全クロール停止、30 日経つと「robots.txt なし」扱いで全許可になる | 同上 |
| 大文字小文字は区別されない | path は case-sensitive。/Fish と /fish は別 URL | 同上 |
| ファイルサイズに制限はない | 500 KiB の上限あり、超過分は無視される | 同上 |
実務での適用
新規サイト・リリース前のチェックリスト
- 開発用の
Disallow: /が本番に残っていないか - CSS / JS / 画像ディレクトリを誤って Disallow していないか(レンダリング失敗の原因)
User-agent: *とUser-agent: Googlebotのグループ分けが意図通りかSitemap:で本番サイトマップの絶対 URL を宣言したか(複数行で複数指定可能)- 5xx を返さないか(CDN・WAF が Googlebot を遮断していないか)
- ファイルが UTF-8 / 500 KiB 以下になっているか
サンプル: BtoB SaaS サイトの robots.txt
# 全クローラー共通: 管理画面と内部 API は禁止
User-agent: *
Disallow: /admin/
Disallow: /api/internal/
Disallow: /*?session=
# Googlebot は明示的にも書く(* を継承しないため)
User-agent: Googlebot
Disallow: /admin/
Disallow: /api/internal/
Disallow: /*?session=
Sitemap: https://example.com/sitemap.xml
Sitemap: https://example.com/blog/sitemap.xml
トラブル別の対処
| 症状 | 確認すべきこと |
|---|---|
| Search Console「robots.txt によりブロック」が急増 | 直近の robots.txt 変更/ CDN・WAF が Googlebot を遮断していないか/ サーバーが 5xx を返していないか |
| 公開したページがクロールされない | robots.txt の URL 検査ツールで「ブロック」表示になっていないか確認 |
| ステージング URL が検索結果に出ている | robots.txt の Disallow だけでは漏れる、noindex も追加する |
| インデックスから消したいのに消えない | Disallow を一旦解除し、noindex でインデックスを外してから再 Disallow する |
| robots.txt のキャッシュが古い | Google は最大 24 時間キャッシュ、Cache-Control: max-age で短縮可 |
公式ソース
- robots.txt の概要(intro)
- Google が robots.txt の仕様を解釈する方法
- robots.txt ファイルの作成方法
- noindex でページのインデックス登録をブロックする
- Google クローラの一覧
- RFC 9309 - Robots Exclusion Protocol
自己テスト
Q1. robots.txt で Disallow すれば検索結果から消えるか?
消えない。被リンクで URL が発見されると、説明なし URL として検索結果に出ることがある。 確実に消したいときは noindex を使う。Disallow と併用するなら「先に noindex でインデックスを外し、その後 Disallow」の順序が正しい
Q2. サブディレクトリ /shop/robots.txt は有効か?
無効。robots.txt はホストのルート(/robots.txt)にしか置けず、サブディレクトリにあっても Googlebot は読まない
Q3. Crawl-delay でクロール頻度を制御できるか?
Google は無視する。クロール頻度の調整は Search Console の設定から行う
Q4. 同一ホストで `User-agent: *` と `User-agent: Googlebot` の両方を書いた場合、Googlebot はどちらに従うか?
User-agent: Googlebot グループだけに従う。* グループは無視される。
* で禁止していたルールを Googlebot にも効かせたいなら、Googlebot 側にも明示的に書く必要がある
Q5. robots.txt が 5xx を返し続けると Google はどう振る舞うか?
最初の 12 時間は全クロール停止。その後 30 日間は直近の有効な robots.txt を使用。30 日経過後は「robots.txt なし」扱いになり、全クロール許可状態に切り替わる
Q6. `disallow: /*.pdf` と `disallow: /*.pdf$` の違いは?
前者は .pdf を含む URL すべて。後者は .pdf で終わる URL のみ。
パラメータ付き URL(/file.pdf?ref=email)は前者では禁止対象、後者では対象外
Q7. robots.txt の path 指定で大文字小文字は区別されるか?
区別される(case-sensitive)。/Fish と /fish は別 URL として扱われる。
ただし user-agent フィールド名と値は case-insensitive
これらの内容を採点付きで挑戦したい場合は、本ドメインのプロ試験で 5 問形式で確認できる。