robots.txt の Allow と Disallow の優先順位|* と $ の意味
robots.txt で同じ URL に Allow と Disallow の両方が当てはまるとき、どちらが使われるのか。「上に書いたほうが優先」と思われがちですが、Google の読み方は違います。この記事では、Google が採用している「いちばん長く一致したルールが勝つ」仕組み、ワイルドカード「*」と末尾の「$」の意味、「/fish」と「/fish/」の違い、大文字小文字や日本語の URL の扱いを、例を使って解説します。
基本ルール:いちばん長く一致したルールが勝つ
Google は、URL のパスに一致する Allow と Disallow をすべて集め、その中でパターンの文字数がいちばん長いルールを使います。長いパターンほど「具体的な指示」とみなす考え方です。書いた順番は関係ありません。この読み方は、robots.txt の標準仕様(RFC 9309)にも書かれています。
| robots.txt | URL | 結果 | 理由 |
|---|---|---|---|
| Disallow: /blog//Allow: /blog/public/ | /blog/public/a.html | 許可 | Allow(13文字)が Disallow(6文字)より長い |
| Disallow: /blog//Allow: /blog/public/ | /blog/secret.html | ブロック | 一致するのは Disallow: /blog/ だけ |
| Allow: /blog//Disallow: /blog/private/ | /blog/private/x | ブロック | Disallow のほうが長い。上に Allow があっても関係ない |
| Disallow: //Allow: /$ | / | 許可 | /$ は / より長い($ も1文字に数える) |
| Disallow: //Allow: /$ | /about | ブロック | /$ はトップページだけに一致 |
なお、Bing もおおむね同じ読み方をしますが、古いクローラーや一部のツールには「上から読んで最初に一致したルールを使う」ものもあります。どのクローラーにも同じ結果になってほしいときは、Allow を Disallow より上に書いておくと安全です。
パスは前方一致:「/fish」と「/fish/」の違い
Allow・Disallow に書いたパスは、URL の先頭からの一致(前方一致)で比べます。そのため、末尾のスラッシュがあるかないかで止まる範囲が大きく変わります。
| パターン | 一致する例 | 一致しない例 |
|---|---|---|
| /fish | /fish、/fish.html、/fish/salmon.html、/fishheads | /Fish.asp、/catfish、/?id=fish |
| /fish/ | /fish/、/fish/salmon.html、/fish/?id=1 | /fish、/fish.html、/Fish/Salmon.asp |
| / | サイトのすべての URL | — |
| (空) | 何にも一致しない(Disallow: だけなら全部許可) | — |
「Disallow: /admin」と書くと /admin/ のほかに /administrator や /admin-guide.html まで止まります。フォルダの中だけを止めたいなら「Disallow: /admin/」と末尾にスラッシュをつけます。WordPress の標準の「Disallow: /wp-admin/」が /wp-admin-guide/ を止めないのも、この違いによるものです。
「*」と「$」の意味と使い方
Google と Bing は、パターンの中で2つの記号を特別に扱います。「*」は0文字以上のどんな文字列にも一致し、「$」はパターンの最後に置いたときだけ「URL の終わり」を意味します。
| パターン | 意味 | 一致する | 一致しない |
|---|---|---|---|
| /*.php | 途中に .php を含む | /index.php、/a.php?x=1、/a.php5 | /windows.PHP |
| /*.php$ | .php で終わる | /index.php、/dir/a.php | /a.php?x=1、/a.php5 |
| /*.pdf$ | .pdf で終わる | /files/manual.pdf | /files/manual.pdf?download=1 |
| /*? | クエリ(?)がつく | /?a=1、/items?color=red | /items |
| /*?*sort= | クエリの中に sort= を含む | /items?color=red&sort=price | /items?color=red |
| /fish* | /fish と同じ(末尾の * は意味なし) | /fish、/fishheads | /catfish |
- 「$」は最後に置いたときだけ特別な意味になります。「/a$b」のように途中に置いた $ は、ただの文字として扱われます。
- 「**」は「*」1つと同じです。
- 「*bot」のように User-agent の名前にワイルドカードは使えません。「*」が使えるのは「User-agent: *」の形だけです。
- パターンは「/」か「*」で始めます。「Disallow: private/」のように / を書き忘れると、どの URL にも一致しません。
検索結果・パラメータつき URL をクロールから外す例
サイト内検索の結果や、並べ替え・絞り込みのパラメータがついた URL は、組み合わせしだいでほぼ無限に増えます。クロールの無駄を減らすために robots.txt で外すことがよくあります。
- 1
Disallow: /search
/search と /search?q=靴 を止めます。前方一致なので /search-tips のような URL も止まる点に注意します。
- 2
Disallow: /*?s=
WordPress のサイト内検索(/?s=キーワード、/blog/?s=…)を止めます。
- 3
Disallow: /*?*sort=
クエリのどこかに sort= を含む URL を止めます。/items?color=red は止めず、/items?color=red&sort=price は止めます。
- 4
Allow: /search/help
/search のブロックの中で、ヘルプページだけを許可します。Allow のほうが長いので、書く順番に関係なく許可になります。
パラメータの順番が変わると一致しなくなる書き方もあるので、「/*?sort=」より「/*?*sort=」のように間に * を入れておくと漏れを減らせます。実際の URL を何種類か並べて、テスターで結果を確かめてから公開してください。
大文字小文字と日本語の URL の扱い
- パスは大文字小文字を区別します。「Disallow: /Admin/」は /admin/ を止めません。URL に大文字が混ざる CMS では、両方を書くか実際の URL に合わせます。
- User-agent の名前は大文字小文字を区別しません。「googlebot」でも「Googlebot」でも同じです。
- 日本語のパスは、「Disallow: /カテゴリ/」のように日本語のまま書いても、「Disallow: /%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA/」のように %エンコードしても、Google は同じものとして扱います。ファイルは UTF-8 で保存します。
- %エンコードの英字(%E3 と %e3)の大文字小文字は区別されません。
テスターも Google と同じく、日本語のパスと %エンコードを同じ URL として比べます。どちらの書き方でも結果が変わらないことを、実際の URL で試しておくと安心です。グループの選ばれ方はUser-agent の書き方とグループの選ばれ方、書いたのに効かないときの原因はrobots.txt の確認方法も参考にしてください。
よくある質問
- robots.txt は上に書いたルールが優先されますか?
- Google では書いた順番は関係ありません。一致したルールのうちパターンがいちばん長いものを使い、同じ長さなら Allow を使います。上から順に読むクローラーにも対応したいときは、Allow を先に書いておくと安全です。
- robots.txt の $ はどういう意味ですか?
- パターンの最後に置いた「$」は「URL の終わり」を意味します。「Disallow: /*.pdf$」は .pdf で終わる URL だけを止め、/a.pdf?download=1 のようにクエリが続く URL は止めません。
- Disallow: /admin と Disallow: /admin/ は違いますか?
- 違います。「/admin」は前方一致なので /administrator や /admin.html も止めます。「/admin/」はフォルダの中だけを止め、/admin(スラッシュなし)は止めません。
- Allow: / と Disallow: / を両方書くとどうなりますか?
- どちらもパターンの長さが1文字で同じなので、Google は Allow を使い、全部許可になります。サイト全体を止めたいなら Allow: / を消してください。
この記事で紹介したツール
あわせて読みたい
robots.txt の User-agent の書き方|* と Googlebot を両方書くと
robots.txt に「User-agent: *」のグループと「User-agent: Googlebot」のグループの両方を書くと、Googlebot は「*」のルールを使わなくなります。これを知らずに Googlebot 用のグループを足して、止めていたはずのページがクロールされるようになった、というトラブルはよくあります。この記事では、クローラーがどのグループを使うかの決まり方、Googlebot-Image や AdsBot-Google などの特別な扱い、グループのまとめ方と書き間違いやすい点を解説します。
記事を読む →robots.txt と noindex の違い|検索結果から消す正しい方法
「robots.txt でブロックしたのに検索結果に出てくる」「Search Console に『robots.txt によりブロックされましたが、インデックスに登録しました』と出た」。こうした悩みの多くは、robots.txt と noindex の役割の違いから来ています。この記事では、クロールとインデックスの違い、検索結果から消したいときの正しい手順、robots.txt の Noindex や Crawl-delay が効かない理由、Search Console でよく見るメッセージと書き間違いの直し方をまとめます。
記事を読む →AI クローラーをブロックする robots.txt|GPTBot・ClaudeBot
自分のサイトの文章や画像を AI の学習に使われたくない、という声が増えています。robots.txt に AI のクローラーの名前を書けば、各社のクローラーに取得をやめるよう伝えられます。ただし、AI のクローラーには「学習用」「AI 検索用」「ユーザーの指示で開くもの」があり、どれを止めるかで影響が大きく変わります。この記事では、主な AI クローラーの名前と役割、目的別の robots.txt の書き方、止めるときの注意点をまとめます。
記事を読む →