robots.txtの検証方法:無料チェッカーと7つのエラー

robots.txtは、クローラーがサイトに触れる前に最初に読むファイルで、しかも容赦がありません。文字を1つ書き間違えればサイト全体がGoogleから姿を消し、ルールを1つ置き違えれば非公開フォルダがGPTBotにそっと開かれてしまいます。クローラーはこのファイルを文字どおりに解釈するだけで、問題を報告してくれることは決してないため、ルールが意図どおりに動いているかを知るには検証するしかありません。このガイドで解説するのは、構文ルール、AllowとDisallowのどちらが勝つかを決める最長一致の仕組み、空のDisallowの本当の意味、AIクローラーのルールのテスト方法、そして最もよくある7つのエラーです。いずれも無料のRobots.txt Validatorで確認できます。

有効なrobots.txtとは実際どういうことか

検証は3つの階層で行われ、ファイルはそのすべてに合格しなければなりません。

  • 構文——すべての行が、クローラーが認識できるディレクティブとして解析できること。壊れた行は黙って無視されます。
  • 意味——ルールが意図した結果を生んでいること。完璧に解析できるファイルでも、ランディングページをブロックしたり、阻止するつもりのクローラーを通してしまったりすることがあります。
  • 到達可能性——対象のホストとプロトコルのルートに、小文字のrobots.txtが存在すること(https://example.com/robots.txt)。プレーンテキストで200を返し、500 KiB未満であること——これがGoogleのサイズ上限で、超過分は無視されます。URLは大文字小文字を区別し(Robots.TXTは404=全許可)、ホストごとに必要です。example.com、www.example.com、blog.example.comにはそれぞれ1つずつ置く必要があります。

ステータスコードも、中身と同じくらい重要です。404はエラーではありませんし、401や403も同様です。Googleは429を除くすべての4xxを「robots.txtが存在しない」=制限なしとして扱うため、Basic認証のかかったステージングサイトが401を返しても、ブロックされているのではなく、ルールがない状態なのです。危険なのは429と5xxです。RFC 9309では、クローラーはこれらを完全かつ一時的なdisallowとして扱うと定められており、エラーを返すrobots.txtはサイト全体のクロールを止めてしまいかねません。リダイレクト(httpからhttpsへ、裸ドメインからwwwへ)はフォローされます——最低5ホップまでは。

すべてのrobots.txtが守るべき構文ルール

フォーマット自体は小さなものです。1行に1つのディレクティブ、ディレクティブと値の間にはコロンを置きます。認識されるディレクティブはUser-agent、Allow、Disallow、Sitemap、Crawl-delayで、それ以外は無視されます。きれいなファイルの例:

# Rules for all crawlers
User-agent: *
Disallow: /admin/
Disallow: /cart
Allow: /cart/help

Sitemap: https://example.com/sitemap.xml

解析できるかどうかを左右する細かい点:

  • ルールはUser-agent:行の後に置く必要があります。User-agent:行より上にあるルールは完全に無視されます。
  • User-agent:行は、次のUser-agent:行が現れるまで、その下にあるすべてのルールに適用されます。空行でグループが終わることはありません。
  • 連続するUser-agent:行は、その下のルールを共有する1つのグループになります——GPTBotとClaudeBotに同じポリシーを与える方法はこれです。
  • ディレクティブ名は大文字小文字を区別しませんが、パスは区別します。Disallow: /Admin/は/admin/をブロックしません。
  • Sitemap:はどこに置いてもかまいませんが、値は絶対URLでなければなりません。

AllowとDisallowの関係:最長一致のルール

大半のファイルがつまずくのがここです。ルールは書かれた順に適用されるわけではなく、最後の行が勝つわけでもありません。マッチングは2段階で行われます。第一に前方一致です。パターンはURLの最初の文字から比較されるため、Disallow: /cartは/cartoonsや/cart/helpもブロックします。第二に最長一致です。マッチしたルールのうち、最も長いパスが勝ちます。長さが同じ場合はAllowが勝つ——これがGoogleが定め、RFC 9309が採用したタイブレークです。

User-agent: *
Disallow: /search
Allow: /search/faq
Disallow: /*.pdf$

3つのURLで考えます。

  • /search/results?page=2——/search(7文字)にマッチ。ブロックされます。
  • /search/faq——/search(7文字)と/search/faq(11文字)にマッチ。長い方が勝ち、許可されます。
  • /files/report.pdf——/*.pdf$にマッチ。*は任意の連続する文字にマッチし、$はマッチの末尾を固定します。1つ落とし穴があるとすれば、マッチングにはクエリ文字列も含まれることです。そのため/*.pdf$は/report.pdf?utm_source=xを取りこぼします。このURLは.pdfで終わっていないからです。

次に、値を空にするケースです。値のないDisallow:は「このユーザーエージェントにはすべてを許可する」を意味する有効なパターンで、Google自身の公式例でもそのように使われています。

User-agent: *
Disallow: /private/

User-agent: GPTBot
Disallow:

他のすべてのクローラーは/private/から締め出されますが、GPTBotにはすべてが明示的に許可されます——特定のクローラー1つだけブロックを解除する、標準的な方法です。一方、空のAllow:は何もしません。

無料チェッカーでrobots.txtを検証する方法

無料のRobots.txt Validatorは、3つの階層すべてを一度にチェックします。行番号付きで指摘する構文チェック、上で説明した最長一致エンジンによる意味チェック、そして到達可能性です。

ステップ1:ファイルをツールに入れる

タブを選びます。Paste textはドラフト用です。Check URLは本番サイトからhttps://yoursite.com/robots.txtを取得するので、クローラーが受け取るものをそのまま検証できます。404と、HTMLページが返ってくるケース(404ハンドラーの設定ミス)はどちらもフラグが立ちます。また、上記のステータスコードのルールがそのまま適用されます。401/403は「ルールなし」、5xxは「すべて不許可」です。

ステップ2:検証結果を読む

結果の先頭には合格・警告・エラーの3つのカウンターがあり、各指摘は1行で表示され、行番号と修正案のタグが付きます。エラーは、見た目が示す動作が実際にはできない行のことです(コロンがないルール、絶対URLでないSitemap URL、スペースを含むパス)。ファイルの残りの部分は引き続き解析されます。警告は、有効だが危険なパターンです(User-agent: *ブロックがない、Sitemapディレクティブがない、Googlebotが無視するCrawl-delayなど)。エラーが0で警告を確認し終えた状態が健全です。

ステップ3:ルールに対して実際のURLをテストする

結果の下にあるクロールテストパネルは、あなたのルールをクローラーと同じように適用します。パスとクローラーを選びましょう。Googlebot、Bingbot、GPTBot、ClaudeBot、PerplexityBotは組み込みで用意され、ファイル内のすべてのユーザーエージェントが表示され、ファイルにUser-agent: *ブロックがあれば*(その他すべてのクローラー)エントリもリストされます。*がない場合、ファイルにはデフォルトグループが存在しません。専用グループを持たないクローラーはすべて「全許可」にフォールスルーします。判定はALLOWEDまたはBLOCKEDと、勝ったルールとその行番号を表示します。収益ページ、管理パス、編集したばかりのパターンをテストしましょう。

ステップ4:修正し、再実行し、デプロイする

指摘された行を修正し、きれいになるまで再検証し、デプロイしたら、本番ファイルに対してURLチェックを実行します。1から作り直すなら、無料のRobots.txt Generatorがきれいな構造を組み立ててくれるので、同じツールで再検証できます。

よくあるrobots.txtの7つのエラー

1. User-agent行より前に置かれたルール

すべてのUser-agent:行より上にあるDisallowは無視されます。多くは、ブロックを削除した後に取り残されたルールです。修正方法:User-agent: *で始め、すべてのルールをブロックの中に収めます。

2. コロン漏れとディレクティブのスペルミス

disallow /admin/(コロンなし)、User agent: *(ハイフンがスペースに)、Dissalow:——これらが指摘されることは決してありません。行はスキップされ、パスは開いたままになります。修正方法:すべての行をDirective: valueの形にします。バリデーターは、それに従わない行にフラグを立てます。

3. Disallowに書かれた絶対URL

Disallow: https://example.com/admin/は何にもマッチしません。パスは常にホスト相対だからです。ルールは黙って失敗し、/admin/はクロール可能なままです。修正方法:パスだけを使います。対照的に、Sitemap行は絶対URLでなければなりません。

4. Disallow: / によるサイト全体のブロック

User-agent: *の下にたった1行のDisallow: /があるだけで、サイト全体が検索から消えます。典型的な原因は、ステージングのファイルを本番にコピーしたこと、またはWordPressの「検索エンジンがサイトをインデックスしないようにする」(Discourage search engines)設定を公開後もオンのままにしたことです。この設定は仮想robots.txtを出力するため、削除すべき行は存在しません。Settings → Readingでオフにするか、サイトのルートに物理的なrobots.txtをアップロードして仮想ファイルを上書きしましょう。その後、Search ConsoleのURL検査で主要ページの再クロールをリクエストすると、復旧が早まります。

5. 意図と逆に動く空の値

値のないAllow:は何もしません。値のないDisallow:はすべてを許可します。修正方法:「何もブロックしない」なら、空のDisallow:を正しいグループの中に書きます。パスをブロックするなら、そのパスを追加します。

6. パス内のスペース

RFC 9309の文法では、パスは最初のスペースで終わります。そのためDisallow: /my folder/はDisallow: /myに劣化し、すべての/my* URLを黙って過剰ブロックします。修正方法:/my%20folder/のようにパーセントエンコードします。

7. Sitemapディレクティブの欠落

解析エラーではありませんが、機会の損失です。Sitemap: https://example.com/sitemap.xmlがなければ、発見はSearch ConsoleやBing Webmaster Toolsへの手動送信、または外部リンクに依存します。修正方法:絶対URLを追加しましょう——XML Sitemap Generatorで作成できます。Crawl-delayは解析こそされるものの、Googlebotには無視されます。信頼できる負荷調整の手段には決してなりません。

AIクローラーのルールをテストする:GPTBot、ClaudeBot、PerplexityBot

robots.txtが再び編集されるようになったのはAIクローラーの存在ですが、彼らは多くの人が見落とすルールを1つ加えます。クローラーに独自の名前付きグループがあるとき、適用されるのはそのグループだけで、そのクローラーに対して*ブロックは完全に無視されるのです。クローラーはどうやって自分のグループを見つけるのでしょうか。部分文字列です。Googleは、グループのユーザーエージェント値がクローラー自身のトークンの中に現れたらそのグループにマッチし、最も具体的なマッチが勝ちます。したがって、googlebot-newsグループが存在しなければ、GooglebotグループはGooglebot-Newsも統治します。また、User-agent: GoogleはすべてのGooglebotバリアントを捕まえます——通常は意図より広い範囲です。ここから、意外な失敗パターンが生まれます。

User-agent: *
Disallow: /admin/
Disallow: /internal/

User-agent: GPTBot
Disallow: /internal/

一見、「GPTBotは/admin/ブロックを継承する」と読めます。違います。GPTBotは自分のグループにマッチし、*のルールは適用されないため、/admin/はGPTBotに開かれたままです。一般的な制限を継承させたいなら、GPTBotグループの中で制限を繰り返し書きます——ClaudeBot、PerplexityBot、その他の名前付きエージェントも同様です。

クロールテストはまさにこのチェックのためにあります。機密性の高いパス1つを2回——1回は*として(ファイルに*ブロックがあればリストされます)、1回はGPTBotとして——実行し、判定を比べます。意図せず異なっていれば、グループをマージしましょう。本番サイトがどのAIクローラーを許可しているかを監査するには、バリデーターをAI Crawler Checkerと併用します。

よくある質問

robots.txtが有効かどうかはどう確認できますか?

ファイルを無料のRobots.txt Validatorに貼り付けるか、ドメインを入力して本番ファイルを取得します。行番号と修正案付きの合格・警告・エラーのカウントに加え、指定したクローラーに対してURLが許可されているかブロックされているかを示すクロールテストが得られます。エラー0はファイルが解析できることを意味し、クロールテストが意図どおりの動作を確認します。

空のDisallowは何を意味しますか?

値のないDisallow:は、その上に名前のあるユーザーエージェントにすべてを許可する、有効なパターンです。他は制限的なファイルの中で、特定のクローラー1つだけブロックを解除する標準的な方法です。一方、空のAllow:はまったく何もしません。

ページをdisallowするとGoogleから削除されますか?

いいえ。robots.txtはフェッチ(取得)を制御するもので、インデックスを制御するものではありません。他のページからリンクされていれば、ブロックされたURLでもGoogleは検索結果に表示できます——内容を読めないというだけで。ページをインデックスから削除するには、クローラーがフェッチできるようにしたうえで、noindexタグかヘッダーを使います。URLをブロックすると、Googleはnoindexを見ることすらできなくなります。

Crawl-delayはGooglebotを遅くしますか?

いいえ。GooglebotがCrawl-delayを尊重したことは一度もありません。BingbotやYandexなど、他の一部のクローラーはサポートしています。バリデーターがCrawl-delay行を警告として指摘するのは、まさにこのためです。Googlebotの負荷が問題なら、修正はGoogle Search Consoleのクロールレート設定にあり、robots.txtにはありません。

Googleがrobots.txtの変更に気づくまでどれくらいかかりますか?

Googleはrobots.txtを最大24時間キャッシュするため、修正が効果を出すまで約1日かかることがあり、その後で再クロールが続きます。デプロイ後ではなくデプロイ前にドラフトを検証しましょう——無料のバリデーターは、本番に届く前に貼り付けたファイルをチェックできます。