robots.txtのAllowはDisallowより先に書くべき? RFCと互換性のベストプラクティス

Tadashi Shigeoka ·  Sat, July 5, 2025

Webサイトのクロールを制御する robots.txt。その記述方法について、「Allowディレクティブは、包括的なDisallowより先に書くべきだ」という指摘を受けたことはありませんか?

このプラクティスは多くの現場で“常識”として扱われていますが、その技術的な背景を正確に理解しているでしょうか。

結論から言うと、この指摘は 「最新のRFCに準拠したクローラだけを考慮するなら誤り」 であり、 「あらゆるクローラとの互換性を最大化する観点では正しい」 と言えます。

本記事では、この一見矛盾した結論の背景にあるrobots.txtの解釈ルールと、実務におけるベストプラクティスをご紹介します。

robots.txt の仕様: 順序は関係ない

現在、GoogleやBingといった主要な検索エンジンが準拠している robots.txt の仕様は、RFC 9309 (Robots Exclusion Protocol) として標準化されています。

この仕様におけるルールの適用優先順位は、ディレクティブの記述順ではありません。以下のルールで決定されます。

  1. クローラは、自身のUser-agentに一致するグループ内の AllowDisallow をすべて評価します。
  2. 対象URLに対して、最もパスの文字数が長い(=最も具体的な)ルールが優先されます。
  3. もしパスの長さが同じルールが複数ある場合は、AllowDisallow よりも優先されます。

例えば、以下の2つの robots.txt は、RFC 9309に準拠したクローラにとっては全く同じ意味になります。

# パターンA: Disallowが先
User-agent: *
Disallow: /
Allow: /assets/
# パターンB: Allowが先
User-agent: *
Allow: /assets/
Disallow: /

どちらのパターンでも、/assets/styles.css というURLを評価する場合、Disallow: /(パス長: 1)よりも Allow: /assets/(パス長: 7)の方が具体的であるため、/assets/ ディレクトリへのクロールは許可されます。

Googleの公式ドキュメントもこの「具体性」に基づく評価ロジックを説明しており、行の順序については言及していません。つまり、主要な検索エンジンを対象とする限り、AllowDisallow の順序はクロールの結果に影響を与えないのです。

なぜ「Allowを先に」と言われるのか?

この慣習の背景には、robots.txt の歴史と、世の中に存在する多様なクローラの存在があります。

robots.txt の解釈ルールには、歴史的に大きく2つの方式が存在しました。

  1. 具体性ルール (Specificity) 前述の通り、現在の標準であり、Googleなどが採用している方式です。パスの長さで優先度を決定します。

  2. 最初の一致ルール (First Match) 古い、あるいは独自実装のシンプルなクローラが採用していた方式です。ファイルを上から順に読み、URLに最初に一致したルールを適用して評価を終了します。

この「最初の一致」ルールのクローラにとって、記述順は決定的に重要です。先ほどのパターンAを見てみましょう。

# パターンA: Disallowが先
User-agent: *
Disallow: /  # ←ここで全てが一致してしまう
Allow: /assets/ # ←この行は評価されない

このクローラが /assets/styles.css を評価すると、最初の Disallow: / に一致した時点で「クロール不可」と判断し、後続の Allow: /assets/ は無視されてしまいます。結果として、意図せずサイト全体のクロールを拒否することになります。

このような悲劇を避けるため、あらゆるクローラで意図通りに動作させるための防衛的な記述として、「例外的な許可(Allow)を先に書き、包括的な拒否(Disallow)を後に書く」というプラクティスが生まれ、広まってきたのです。

実務上の robots.txt の推奨事項

以上の背景を踏まえると、私たちの取るべきアクションは明確です。

対象順序の影響推奨される書き方
Google/Bingなど主要検索エンジン影響なしどちらでも可
古いクローラや未知のボット影響を受ける可能性AllowDisallow の順が安全
コードの可読性・メンテナンス性人間の解釈しやすさ「例外を先に、一般ルールを後に」と書くAllowDisallow の方が直感的

まとめ

robots.txtAllow/Disallow の記述順について、改めてポイントを整理します。

  • RFC 9309(標準仕様)と主要クローラでは、行の順序は評価に影響しません。 最も具体的なパスが優先されます。
  • 「Allowを先に書く」という慣習は、古い「最初の一致」ルールを採用するクローラとの互換性を確保するためのベストプラクティスです。
  • 互換性に加え、可読性の観点からも「例外(Allow)を先に、一般(Disallow)を後に」という順序は理にかなっています。

したがって、「順序を変えないと動かない」という指摘は技術的には不正確な場合がありますが、最大限の互換性を確保し、意図しない挙動を防ぐための極めて有効なアドバイスであると言えます。特別な理由がない限り、この安全なプラクティスに従うと良いのではないでしょうか。

以上、改めて robots.txt の仕様について学び直した、現場からお送りしました。

参考情報