この記事の要点:
- robots.txtはクロールしてよいURLをクローラーに伝えるファイルで、検索結果に出すかどうか(インデックス)を直接決めるものではない
- 検索結果から外したいページは、robots.txtで止めずにクロールを許可してnoindexを付ける
- パスは前方一致で大文字・小文字を区別し、使える記号は「*」と「$」だけ。ファイルはホストごとにルートへ置く
- AIクローラーは学習用と検索・回答用で名前が分かれていることがあり、各社の公式の説明を確かめてから指定する
- 変更後はSearch Consoleのrobots.txtレポートとURL検査で、意図どおりに読まれているかを確かめる
robots.txtとは
robots.txtとは、サイトのどのURLを取得(クロール)してよいかを、クローラーに伝えるテキストファイルです。サイトのルート(例:https://example.com/robots.txt)に置き、検索エンジンやAIのクローラーは、ページを取得する前にこのファイルを読みます。
クローラーとは、Webページを自動で巡回して取得するプログラムです。仕組みは「クローラーとは」で説明しています。robots.txtは、そのクローラーへの「お願い」を書く場所であり、強制力のあるアクセス制限ではありません。
robots.txtでできること・できないこと
robots.txtが制御するのは「クロール」です。検索結果に載せるかどうか(インデックス)を直接決めるものではありません。この違いを押さえると、設定の誤りの多くを防げます。
| やりたいこと | robots.txtで足りるか | 使う方法 |
|---|---|---|
| 意味の薄いURLが大量にあり、クロールの負荷を減らしたい | 向いている | robots.txtのDisallow |
| ページを検索結果に出したくない | 向いていない | noindex(クロールは許可したまま) |
| 重複するページの評価を1つにまとめたい | 向いていない | canonical、または301リダイレクト |
| 社外に見せたくないページを守りたい | 向いていない | パスワード保護(ベーシック認証など)、IPアドレスの制限 |
| サイトマップの場所を伝えたい | 向いている | Sitemapの行(あわせてSearch Consoleでも送信) |
| 画像・動画ファイルを検索結果に出したくない | 向いている | 該当ファイルのパスをDisallow |
robots.txtで止めても、検索結果に出ることがある
robots.txtでクロールを止めても、ほかのページからリンクされていると、中身を読まないままURLだけが検索結果に表示されることがあります。Search Consoleの「ページのインデックス登録」レポートでは、「robots.txt によりブロックされましたが、インデックスに登録しました」という状態として表示されます。
検索結果から外したいページは、クロールを許可したうえでnoindexを付けます。robots.txtで止めてしまうと、Googleはページを読めないため、noindexにも気づけません。「Disallowとnoindexを両方付ける」のは、よくある逆効果の設定です。
当サイトの実例
当サイト(seoagent.jp)では、記事がまだ無い一覧ページが検索対象になりうる状態でした。このときは、robots.txtで止めるのではなく、一覧ページにnoindexを付け、XMLサイトマップからも外しました。範囲外のページ番号は404を返し、反映のたびにnoindex・404・301を確認しています。検索結果から外す目的にはnoindex、という使い分けの例です。
基本の書き方と記述ルール
robots.txtは、「どのクローラーに(User-agent)」「何を許可・禁止するか(Allow・Disallow)」をまとめた「グループ」を並べて書きます。
User-agent: *
Disallow: /search/
Allow: /search/help/
Sitemap: https://example.com/sitemap.xml
| 項目 | 意味 | 書き方の注意 |
|---|---|---|
| User-agent | 対象のクローラーの名前。「*」はすべてのクローラー | 名前の大文字・小文字は区別されない |
| Disallow | クロールしないでほしいパス(URLの「/」以降) | 「Disallow:」の後を空にすると、何も禁止しない意味になる |
| Allow | Disallowの中で、例外としてクロールを許可するパス | Disallowより具体的なパスを書く |
| Sitemap | サイトマップの場所 | 絶対URLで書く。グループの外に書いてよく、複数書ける |
パスの一致のルール
- パスは前方一致です。「Disallow: /blog」は /blog/ だけでなく /blog-news/ や /blog.html にも当てはまります。フォルダだけを指すなら「/blog/」と書きます。
- パスは大文字・小文字を区別します。「/Search/」と「/search/」は別のパスです。
- 使える記号は「*」(0文字以上の任意の文字)と「$」(URLの末尾)だけです。正規表現は使えません。
- AllowとDisallowの両方に当てはまる場合、Googleはパスが長い(より具体的な)ルールを優先します。長さが同じなら、制限の少ないAllowを優先します。
- クローラーは、自分の名前に最も具体的に当てはまるグループを1つだけ使います。Googlebot向けのグループがあれば、Googlebotは「User-agent: *」のグループを読みません。
置き場所とファイルの条件
- ファイル名は小文字の「robots.txt」で、サイトのルートに置きます。/blog/robots.txt のような下の階層に置いても読まれません。
- ファイルは、プロトコル・ホスト・ポートごとに1つです。https://example.com と https://shop.example.com は別のファイルが必要で、サブドメインには引き継がれません。
- 文字コードはUTF-8のテキストにします。Googleが読むのは先頭から500KiBまでです。
- Googleは、取得したrobots.txtを通常最大24時間キャッシュします。書き換えてもすぐには反映されません。
- Googleはcrawl-delayの行や、robots.txtの中のnoindexの行をサポートしていません。
目的別の記述例
次の例は説明用です。自社のURLの構造に合わせて、パスを置き換えてください。
例:WordPressの標準の内容
WordPressでは、robots.txtのファイルを置かなくても、次のような内容が自動で返されます(バージョン5.5以降は、標準のサイトマップの行も入ります)。
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Sitemap: https://example.com/wp-sitemap.xml
管理画面(/wp-admin/)は止め、画面の動作に使われるadmin-ajax.phpだけを許可しています。SEOプラグインを使っている場合は、プラグインのサイトマップのURLに変わることがあります。サーバーに実際のrobots.txtのファイルを置くと、そちらが優先されます。
例:並べ替え・絞り込みのパラメータURLを止める
例:ECサイトや製品カタログで、「?sort=price」「?color=red&size=m」のように条件の組み合わせでURLが大量に増える場合です。
User-agent: *
Disallow: /*?sort=
Disallow: /*&sort=
Disallow: /*?sessionid=
Disallow: /*&sessionid=
パラメータは「?」の直後に来る場合と、「&」の後に来る場合があるため、両方を書きます。ただし、検索結果に出したい絞り込みページ(例:「/products/?category=pumps」のような分類ページ)まで止めていないかを確認します。止めたURLにはcanonicalの指定も読まれないため、評価をまとめたいページはrobots.txtで止めず、canonicalで扱います。
例:サイト内検索の結果ページを止める
User-agent: *
Disallow: /search/
Disallow: /*?s=
サイト内検索の結果は、入力された語の数だけURLが生まれます。読者にとって検索結果からの入り口として意味が薄く、クロールの無駄になりやすいページです。Google が「クロール バジェット」をどう説明し、どんなサイトが気にすべきかは「クロールバジェットの記事」で説明しています。WordPressの検索は「?s=」の形になります。
例:ステージング(公開前の検証環境)
# staging.example.com/robots.txt(本番には置かない)
User-agent: *
Disallow: /
これはクロールを止めるだけで、URLを知っている人やクローラー以外のプログラムは閲覧できます。検証環境は、ベーシック認証などのパスワード保護をかけるのが確実です。また、本番に反映するときにこのファイルまでコピーしてしまう事故が多いため、反映の手順に「robots.txtの確認」を入れておきます。
例:特定のフォルダの画像だけを止める
User-agent: Googlebot-Image
Disallow: /images/internal/
Googlebot-Imageは画像の取得に使われるクローラーです。このグループは画像のクローラーだけに適用され、通常のGooglebotには影響しません。
AIクローラーの制御
AIの学習や回答に使われるクローラーも、多くはrobots.txtの指定に従います。ただし、「学習に使うもの」と「検索・回答の表示に使うもの」が分かれていることがあり、名前と用途は各社の公式の説明で確かめてから設定します。
| 名前(User-agent) | 提供元 | 用途(公式の説明の要約) | 止めたときの影響 |
|---|---|---|---|
| Googlebot | Google検索のクロール。AIによる概要などの検索の機能も含む | Google検索に表示されなくなる | |
| Google-Extended | Googleが取得したコンテンツを、Geminiのモデルの学習などに使ってよいかの指定。独立したクローラーではなく、取得は既存のクローラーが行う | Google検索への掲載や順位には影響しない | |
| GPTBot | OpenAI | OpenAIの生成AIモデルの学習に使われうるコンテンツの取得 | 学習に使わないという指定になる。ChatGPTの検索結果への表示とは別 |
| OAI-SearchBot | OpenAI | ChatGPTの検索機能で、サイトを表示するための取得 | ChatGPTの検索結果に表示されにくくなる |
| ChatGPT-User | OpenAI | 利用者がChatGPTで依頼したときに、ページを取りに行くためのアクセス。自動の巡回ではない | 利用者の操作によるアクセスのため、robots.txtが適用されない場合があるとOpenAIは説明している |
例:「AIの学習には使われたくないが、Google検索とChatGPTの検索には表示されたい」という方針の場合です。
User-agent: GPTBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: *
Allow: /
OAI-SearchBotとGooglebotは「*」のグループに従うため、取得を許可したままになります。OpenAIは、robots.txtの変更が検索に反映されるまで24時間ほどかかることがあると説明しています。
Google検索のAIによる概要やAIモードでの表示を制限したい場合は、Google-Extendedではなく、nosnippetなど検索向けの指定で扱います。止めすぎるとAI検索での露出の機会も減るため、事業の方針と合わせて判断します。AI向けのファイルとして話題のllms.txtは、robots.txtとは別のもので、クロールの許可・禁止を伝えるものではありません。
よくある間違い7つと直し方
| 間違い | 起きること | 直し方 |
|---|---|---|
| 1. 制作中の「Disallow: /」を公開後も残している | サイト全体がクロールされず、新しいページが検索に出ない | 公開の手順にrobots.txtの確認を入れる。ステージングとはファイルを分ける |
| 2. 検索結果から外すためにDisallowを使う | URLだけが検索結果に残り、noindexも読まれない | クロールを許可し、noindexを付ける。外れたのを確かめてから、必要ならDisallowを検討する |
| 3. 重複ページの整理にDisallowを使う | 重複したURLの評価がまとまらない | canonicalか301リダイレクトを使う |
| 4. CSS・JavaScript・画像のフォルダを止める | Googleがページを正しく表示できず、内容やモバイル対応を誤って判断する | 表示に必要なファイルはクロールを許可する。URL検査の「公開URLをテスト」で表示を確かめる |
| 5. Googlebot用のグループを作ったのに「*」のルールも効くと思っている | 「*」に書いた禁止がGooglebotに適用されない | 個別のグループには、必要なルールをすべて書き直す |
| 6. 正規表現で書く | 「.*」や「[0-9]」が意図どおりに解釈されない | 使える記号は「*」と「$」だけ。例:PDFだけ止めるなら「Disallow: /*.pdf$」 |
| 7. メインのドメインのrobots.txtで、サブドメインも制御しようとする | サブドメインのURLは制御されない | サブドメインごとに、そのルートへrobots.txtを置く |
このほか、robots.txtが5xxのエラーを返し続けると、Googleはサイトのクロールを控えることがあります。サーバーの移転やCDNの設定変更の後は、robots.txtが200で返ることを確かめます。なお、robots.txtが存在しない(404)こと自体は問題ではなく、その場合Googleはすべてのクロールを許可されたものとして扱います。
設置と確認の手順
1. 公開前に確認する
- 変更前のrobots.txtを保存し、変更点を書き出します。
- 止めたいURLと、止めてはいけない重要なURL(トップ、製品ページ、記事、CSS・JavaScript)を数個ずつ選び、どのルールに当てはまるかを紙の上で確かめます。
- サイトのルートにアップロードし、ブラウザで https://example.com/robots.txt を開いて、内容が表示されることを確認します。
- コマンドで応答のステータスを確かめます。
curl -I https://example.com/robots.txt
# HTTP/2 200 と content-type: text/plain が返ることを確認
2. Search Consoleのrobots.txtレポートで確認する
- Search Consoleの「設定」を開き、「クロール」の欄にある「robots.txt」の「レポートを開く」を選びます。
- Googleが見つけたrobots.txtの一覧(ホストごと)、最後に確認した日時、取得の状態、記述の問題(エラー・警告)を確認します。
- 重要なページのブロックを解除したときなど、急いで反映させたい場合は、該当のファイルのメニューから再クロールをリクエストします。
以前の「robots.txtテスター」は提供が終わり、現在はこのレポートで確認します。
3. URL検査で個別のURLを確認する
URL検査に確かめたいURLを入力し、「ページのインデックス登録」の詳細にある「クロールを許可しますか?」を見ます。robots.txtで止まっていれば「いいえ」と表示されます。
クロールやインデックスに関する設定の全体は「テクニカルSEOの記事一覧」にまとめています。
よくある質問
robots.txtの中身は、誰でも見られますか。
はい。robots.txtは公開されたファイルなので、URLを開けば誰でも読めます。Disallowに書いたパスも見えるため、社外秘のページの場所を書くのは逆効果です。見せたくないページはパスワード保護などで守ります。
サーバーの負荷が高いとき、robots.txtで一時的にクロールを止めてもよいですか。
Googleは、急いでクロールを減らしたいときは、robots.txtではなく、クロールのリクエストに500・503・429のステータスコードを短期間返す方法を案内しています。長く続けると検索での表示に影響するおそれがあるとも説明しているため、負荷が下がったらすぐ元に戻します。
WordPressでは、robots.txtをどこで編集しますか。
ファイルを置いていない場合は、WordPressが自動で内容を返しています。SEOプラグインによっては、管理画面からrobots.txtを編集できるものがあります。サーバーのルートに実際のファイルを置くと、そちらが優先されます。どの方法でも、編集後はブラウザでrobots.txtを開いて内容を確かめます。
ページ単位で検索結果から外したいときも、robots.txtを使いますか。
使いません。robots.txtはクロールを止める指定で、止めたページはnoindexも読まれなくなります。ページ単位で外したい場合は、そのページにnoindexを付け、robots.txtではクロールを許可したままにします。
SEOAGENTでできること
SEOAGENTの「AI検索・表示速度の診断」では、robots.txtを1日1回読み、検索の表示に使われるクローラーと、学習に使われるクローラーを分けて示します。診断機能であり、robots.txtを自動で書き換えることはありません。


