SUPPORTING
robots.txtの誤判定を防ぐ実務手順:複数グループ結合・最長一致・5xx停止を確認
自作クローラ向けに、robots.txtの取得、同一User-agentに一致する複数グループの結合、最長一致、HTTPエラー処理を確認する手順を解説します。
robots.txtは、ファイルを目視しただけでは対象URLの取得可否を確定できません。自作クローラでは、使用するUser-agent、対象URL、取得時のHTTP状態を入力として、判定過程を記録する必要があります。なお、robots.txtはアクセス認可の仕組みではなく、非公開化やアクセス制御の代替にはなりません。記載したパスは公開され、発見され得ます。RFC 9309
1. 取得条件を固定する
確認対象は、サービスの最上位パスにある小文字の/robots.txtです。RFC 9309ではUTF-8のtext/plainとされ、取得時は少なくとも連続5回のリダイレクトへの追従が推奨されています。別authorityへの転送も対象です。パーサーの解析上限は少なくとも500 KiB必要です。RFC 9309
検証時は取得URL、HTTP状態、確認時刻、リダイレクト先を保存します。Googleは通常robots.txtを24時間までキャッシュし、更新時のタイムアウトや5xxによって長く保持する場合があります。Google Search Central
2. 適用グループを結合する
まず、自分のクローラのproduct tokenに一致するUser-agentを、大文字・小文字を区別せずに抽出します。一致する同一product tokenのグループが複数ある場合は、単一グループだけを選ばず、それらのAllow・Disallow規則を結合してから判定します。RFC 9309
product tokenに一致するグループがなければUser-agent: *を使い、どちらもなければ適用規則はありません。RFC 9309 なお、Googleでは特定User-agentのグループと*グループを結合しません。Google Search Central
テスト用robots.txtには、同じUser-agentを離れた位置に複数回置き、各グループに異なる規則を設定します。両方が判定材料になることを確認すれば、単一グループだけを読む実装を検出できます。
3. 結合後の規則を最長一致で評価する
AllowとDisallowはURIパスの先頭から照合し、大文字・小文字を区別することが推奨されています。複数規則が一致した場合は、オクテット数が最も多い規則を採用し、同じ長さで競合する場合はAllowの採用が推奨されます。一致規則がない場合や対象グループに規則がない場合、そのURIへのアクセスは許可されます。RFC 9309
テストには、短いDisallowの内側に長いAllowを置く例、同じ長さで競合する例、大文字・小文字だけが異なるパスを含めます。#はコメント、$は末尾一致、*は任意文字の0回以上の出現を示すため、それぞれも個別に確認します。RFC 9309
4. HTTPエラーを別系統で処理する
robots.txtが4xxなどのUnavailableなら、RFC上は任意のリソースへアクセスしてよい扱いです。一方、サーバーまたはネットワークエラーで到達不能な場合は全面禁止と仮定する必要があり、HTTP 5xxが例示されています。RFC 9309
Googleには異なる処理があります。5xx発生後の最初の12時間はクロールを停止して再取得を試み、その後は最後に正常取得した版を最大30日間使用します。キャッシュ版がなければクロール制限なしと仮定します。Google Search Central 自作クローラのRFC判定とGoogle固有の挙動を混同しないことが重要です。
5. Pythonの結果だけで完了にしない
urllib.robotparser.RobotFileParserのcan_fetchは、User-agentとURLから取得可否を返します。mtimeでは最終取得時刻も確認できます。Python公式ドキュメント
ただし、can_fetchの真偽値だけをRFC 9309全体への準拠証明にはしません。採用規則、同一product tokenの複数グループ結合、特殊文字、リダイレクト、4xx・5xx処理を独立したテストケースで確認し、入力と最終判定をログに残します。
デメリットと向いていない条件
この確認には、パーサーだけでなくHTTP取得処理まで含むテストが必要です。単発のURL確認だけで済ませたい運用には手間が増えます。また、crawl-delayだけを安全性の根拠にする方法には向きません。Googleのパーサーはcrawl-delayをサポートしていません。Google Search Central
robots.txtは秘密情報の保護にも不向きです。GoogleではDisallowされたページでも、URLだけがスニペットなしで検索結果に表示される場合があります。Google Search Central 接続元IPを変えてもrobots.txtの判定条件は解消されないため、プロキシ購入前にUser-agent、結合後の規則、対象パス、HTTP状態を確認してください。