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 を DisallowGooglebot がレンダリング失敗、モバイル対応判定もずれてランキング影響
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サイトマップの絶対 URLhttps://example.com/sitemap.xml

crawl-delay 等のフィールドは Google では無視される。クロール頻度は Search Console から調整する。

ファイルの配置場所

ホスト・プロトコル・ポート単位で 1 つ。サブディレクトリの robots.txt は読まれない。

URL有効な範囲
https://example.com/robots.txthttps://example.com/ 配下すべて
https://www.example.com/robots.txtwww.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 の挙動
2xxrobots.txt を正常処理する
3xx5 ホップまでリダイレクトを追跡、それ以上は 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」として出る場合がある。

検索結果から確実に消したい場合の正しい順序:

  1. まず meta robots noindex(または X-Robots-Tag: noindex)でインデックスを外す
  2. インデックス削除を確認した後で、必要なら 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 の上限あり、超過分は無視される同上

実務での適用

新規サイト・リリース前のチェックリスト

  1. 開発用の Disallow: / が本番に残っていないか
  2. CSS / JS / 画像ディレクトリを誤って Disallow していないか(レンダリング失敗の原因)
  3. User-agent: *User-agent: Googlebot のグループ分けが意図通りか
  4. Sitemap: で本番サイトマップの絶対 URL を宣言したか(複数行で複数指定可能)
  5. 5xx を返さないか(CDN・WAF が Googlebot を遮断していないか)
  6. ファイルが 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 で短縮可

公式ソース

自己テスト

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 問形式で確認できる。