robots.txt設定ガイド:SEO向け完全版

robots.txtがクロールに与える影響、インデックス登録を制御できない場面、必要なページをブロックせずにディレクティブをテストする方法を解説します。

robots.txtは、サイトのルートに置くプレーンテキストのファイルです。検索エンジンのクローラーに対して、アクセスしてよいセクションと避けてほしいセクションを伝えます。クローラーがサイトを訪れたときに最初に読むファイルで、1994年から使われており、今もクロール制御の事実上の標準です。

robots.txtは推奨であり、強制する仕組みではありません。GooglebotやYandexなど信頼できるボットはディレクティブに従いますが、悪意のあるクローラーやスクレイパーはファイルを無視します。機密データの保護には、robots.txtではなく、サーバー側のアクセス制御と認証を使います。

最大の制約は、Disallowでブロックしたページが自動的にはインデックスから消えない点です。他のサイトからリンクされていれば、Googleはページを訪れなくてもURLをインデックスに登録することがあり、検索結果のスニペットが空になる場合もあります。ページをインデックスから完全に削除するには、別の手段が必要です。

Googlebotの判断フロー。robots.txtはクロールを、meta noindexはインデックス登録を制御します。両者の組み合わせで、結果は4通りになります。

robots.txtとは何か、その限界

robots.txtはドメインのルートに置きます(https://example.com/robots.txt)。サブドメインにはそれぞれ専用のファイルが必要で、blog.example.comならhttps://blog.example.com/robots.txtです。基本のディレクティブはRobots Exclusion Standard(REP)で定められており、GoogleとYandexが独自に機能を拡張しています。

クロール制御

ボットが特定のセクションに入るのを防ぎます。無駄なサーバー負荷を減らし、価値の高いページにクロールバジェットを残せます。

サイトマップの場所を伝える

Sitemapディレクティブを書けば、検索エンジンが追加の設定なしでXMLサイトマップをすぐ見つけられます。

コンテンツは保護しない

robots.txtは誰でも見られます。ページの内容を暗号化も隠蔽もせず、ボットに訪問を控えるよう頼むだけです。

形式と構文

ファイルは「レコード」と呼ばれるブロックで構成されます。各レコードは1つ以上のUser-agentディレクティブで始まり、Disallow、Allow、Crawl-delay、Sitemapの行を何行でも含められます。レコードの区切りは空行で、コメントは#で始めます。

ディレクティブ対応説明
User-agentすべてボットの識別子です。*は「すべてのクローラー」を意味します。1つのブロックに複数のUser-agent行を書けます。
Disallowすべてクロールを禁止するパスです。値が空の場合は何もブロックしません(すべて許可)。
AllowGoogle、YandexDisallowで禁止したセクション内のパスを明示的に許可します。Disallowより優先されます。
Crawl-delayYandex、Bingボットのリクエスト間隔の最小値(秒)です。Googleは無視します。
SitemapGoogle、Yandex、BingXMLサイトマップの絶対URLです。Sitemap行は複数書けます。

ワイルドカード:*と$

GoogleとYandexは、DisallowとAllowのパスで2種類のワイルドカードに対応しています。アスタリスク*は任意の文字列(空文字列を含む)に一致します。ドル記号$はURLの末尾を表し、最後の文字までの完全一致になります。

text
# Block all URLs with the ?sort= parameter
Disallow: /*?sort=

# Block only /page (exact match, not /page/child)
Disallow: /page$

# Block all PDFs across the entire site
Disallow: /*.pdf$
DisallowとAllowが競合した場合は、より具体的なルール(文字数が多いほう)が優先されます。文字数が同じならAllowが優先されます。この挙動はGoogle独自のもので、他のボットでは実装が異なる場合があります。

Sitemapディレクティブはファイル内のどこにでも置けます。特定のUser-agentブロックの中に入れる必要はありません。URLは必ずスキーム付きの絶対URLで書きます。

text
Sitemap: https://example.com/sitemap.xml
サイトマップインデックスを使う場合は、インデックスファイルを指すSitemap行を1行書けば十分です。子サイトマップを1つずつ列挙する必要はなく、検索エンジンがインデックスをたどってすべて見つけます。

シナリオ別の記述例

シナリオ1:シンプルな公開サイト

非公開セクションのない小規模サイトなら、最小限のファイルで足ります。基本はすべて許可し、管理画面と技術的なパスだけをブロックして、サイトマップを宣言します。

text
# robots.txt for example.com — simple public site
User-agent: *
Disallow: /admin/
Disallow: /login
Disallow: /dashboard/

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

シナリオ2:カタログとパラメーター付きページを持つ大規模ECサイト

オンラインストアでは、絞り込み、並べ替え、ページネーションによって数十万のURLが生成されます。その大半は重複ページか、単独では価値のないページです。ワイルドカード付きのDisallowでパラメーター付きURLをブロックし、パラメーターのないカテゴリページと商品ページはクロール可能にしておきます。

text
# robots.txt for e-commerce example.com
User-agent: *

# Technical and admin sections
Disallow: /admin/
Disallow: /checkout/
Disallow: /cart
Disallow: /account/
Disallow: /api/

# Parametric catalogue duplicates
Disallow: /*?sort=
Disallow: /*?filter=
Disallow: /*?page=
Disallow: /*?ref=
Disallow: /search

# Explicitly allow a useful parameter in one section
Allow: /catalog/shoes?size=

Crawl-delay: 1

Sitemap: https://example.com/sitemap.xml
固有のコンテンツを持つパラメーター付きページ(サイズや色を指定した商品など)には、Disallowよりcanonicalタグが向いています。ページを完全に遮断せずに、クロールバジェットを節約できます。

シナリオ3:ステージング用・一時的なページがあるサイト

ウェビナーのランディングページ、下書き、テンプレートページ、ステージング用のセクションは、クロールをブロックしておきます。パスの接頭辞でDisallowを指定し、必要なら特定のボット向けに別のブロックを設けます。

text
# robots.txt for example.com — main site with staging sections
User-agent: *
Disallow: /webinar-drafts/
Disallow: /templates/
Disallow: /staging/
Disallow: /_preview/
Disallow: /thank-you-test

# Block the entire site for a specific bot (e.g. an aggressive crawler)
User-agent: AhrefsBot
Disallow: /

User-agent: SemrushBot
Disallow: /

Sitemap: https://example.com/sitemap.xml
robots.txtでセクションをブロックしても、その内容が機密になるわけではありません。外部サイトからリンクされていれば、ステージングページのURLもインデックスに登録される可能性があります。確実に隔離するには、サーバー側でHTTP Basic認証かIPアドレスの許可リストを使います。

Disallow・meta robots noindex・X-Robots-Tagの違い

この3つは役割の異なる別々の手段です。取り違えると、よくある失敗につながります。robots.txtでブロックしたページにnoindexのmetaタグも付けてしまうケースです。ページがクロールできないため、Googleはmetaタグを読めず、noindexは実行されません。

手段記述場所役割使う場面
robots.txtのDisallowrobots.txtボットがURLを訪れるのを防ぎます。すでにインデックスにあるURLは削除されません。サービス用のセクションをブロックし、不要なクロールバジェットの消費を減らす。
meta robots noindexHTMLの<head>ボットの訪問は許可し、インデックスへの登録だけを禁止します。ボットがタグを読み、指示に従います。特定のページをインデックスから外す(サンクスページ、ページネーション、絞り込みページ)。
X-Robots-TagHTTPレスポンスヘッダーmeta robotsと同じ働きで、PDF、画像、文書などあらゆる種類のファイルに使えます。HTML以外のリソース(PDF、DOCX、画像)のインデックス登録を制御する。
同じページにDisallowとnoindexを併用しないでください。robots.txtでブロックしたページでは、Googleがnoindexを読めず、URLが空のスニペットのままインデックスに残ることがあります。noindexは、クローラーがアクセスできるページにだけ使います。

HTTPレスポンスヘッダーでX-Robots-Tagを指定する例です(Nginxまたはアプリケーションコードで設定します)。

text
# Nginx: prevent indexation of all PDFs
location ~* \.pdf$ {
    add_header X-Robots-Tag "noindex, nofollow";
}

robots.txtのテスト方法

変更は必ず公開前に検証します。タイプミス1つで、サイト全体がクローラーからブロックされることもあります。

  • Google Search Consoleのrobots.txtテスター:GSCに組み込まれています。URLを入力すると、Googlebotなどのボットに許可されているかブロックされているかを確認できます。
  • Yandex Webmasterのrobots.txt解析:Yandex向けの同等のツールです。Yandexのボットがファイルをどう解釈するかを確認できます。
  • Screaming Frog SEO Spider → Configuration → Robots.txt:robots.txtに従ってサイトをクロールし、ブロックされたURLをレポートに一覧表示します。
  • curl:コマンドラインでファイルの内容とHTTPステータスをすばやく確認できます。
上記の推奨事項を反映したrobots.txtの例です。
bash
# Fetch robots.txt and inspect its contents
curl -s https://example.com/robots.txt

# Check HTTP status (must be 200)
curl -I https://example.com/robots.txt

よくあるミスと対処法

ミス症状対処
サイト全体にDisallow: /Googlebotがすべてのクロールを止めます。GSCではページが「robots.txtによりブロック」と表示されます。この行を削除するか、特定のパスに置き換えます。デプロイ時に紛れ込むことがよくあります。
パスに紛れ込んだスペースDisallow: /admin /(スペース入り)のように書くと、ボットはパスをそのまま読むため、何もブロックされません。スペースを削除します。パスは大文字小文字も空白も区別されます。
同じページにnoindexとDisallowを併用ページがインデックスに残り、noindexは実行されません。Disallowを外し、noindexだけにします。タグを読むには、ボットがページを訪れられる必要があります。
ルールの前にUser-agentがない構文エラーになり、ルールはどのボットにも適用されません。Disallow/Allowのブロックの前にUser-agent: *を追加します。
robots.txtが404または500を返す404は「制限なし」として扱われ、500はクロールが一時的に止まります。HTTP 200を返すようにします。空のファイルは「すべて許可」と同じ扱いです。

セキュリティ上の注意

robots.txtは公開されており、検索エンジンにもインデックスされるため、誰でも読めます。管理画面、バックアップ、内部API、設定ファイルのパスをrobots.txtに書くと、サイトの地図を攻撃者に渡すことになります。

機密性の高いセクションの保護を、robots.txtだけに頼らないでください。Disallow: /internal-api/v2/keys/ のような行は、攻撃者に探す場所を正確に教えてしまいます。
  • 機密性の高いパスを書かない:バックアップ(.zip、.sql)、設定ファイル(.env、config.php)、内部APIなど。
  • 機密セクションはサーバー側で保護する:robots.txtではなく、HTTP Basic認証、IPアドレスの許可リスト、OAuthを使います。
  • Disallowの一覧は最小限にする:SEOの観点でクロールから外す必要があるパスだけを書きます。
  • GSCでrobots.txtを定期的に確認する:デプロイでDisallow: /が紛れ込んでいないかを確かめます。

チェックリストと完成例

  • ファイルがhttps://example.com/robots.txtでアクセスでき、HTTP 200を返す
  • UTF-8でエンコードされ、BOM(Byte Order Mark)がない
  • すべてのブロックがUser-agentで始まっている
  • User-agentごとのブロックが空行で区切られている
  • 同じページにDisallowとnoindexを併用していない
  • 機密性の高いパスを公開していない
  • サーバー負荷が高い場合は、Yandex向けにCrawl-delayを設定している
  • Sitemapディレクティブがルートのインデックスファイルを指している
  • GSCとYandex Webmasterでファイルを検証した
  • Screaming FrogでブロックされたURLの数が想定どおりである

コメント付きで、example.com向けのrobots.txtの完成例を示します。ほとんどのシナリオに使える汎用テンプレートです。

text
# robots.txt for example.com
# Updated: 2026-05-15

# Rules for all crawlers
User-agent: *

# Admin and auth sections
Disallow: /admin/
Disallow: /login
Disallow: /dashboard/
Disallow: /account/

# Technical paths
Disallow: /api/
Disallow: /_next/
Disallow: /cdn-cgi/

# Parametric duplicates (e-commerce)
Disallow: /*?sort=
Disallow: /*?filter=
Disallow: /*?ref=
Disallow: /search

# Staging and temporary pages
Disallow: /staging/
Disallow: /webinar-drafts/
Disallow: /templates/

# Explicit allow for a useful API path
Allow: /api/og-image/

# Crawl rate for Yandex
User-agent: Yandex
Crawl-delay: 1

# Aggressive SEO bots (optional)
User-agent: AhrefsBot
Disallow: /

User-agent: SemrushBot
Disallow: /

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

FAQ

robots.txtは検索順位に影響しますか?
間接的に影響します。ファイル自体はランキングシグナルではありませんが、Disallowでブロックしたページはクロールされにくくなります。重要なページをブロックすれば、そのページは検索での露出を失います。重複するパラメーター付きURLをブロックすれば、価値のあるページにクロールバジェットを回せます。
robots.txtが404を返すとどうなりますか?
Googleは、robots.txtが存在しない場合(404)を「制限なし」とみなし、サイト全体をクロールします。500エラーやタイムアウトは一時的なブロックとして扱われ、ファイルが復旧するまでGoogleはクロールを止めます。
1つのファイルでGooglebotとYandexに別々のルールを設定できますか?
できます。User-agentのブロックを2つ作ります。Googlebotは自分用のブロックだけを、Yandexは自分用のブロックだけを読みます。User-agent: *のブロックは、専用のブロックを持たないすべてのボットに適用されます。
Disallow: /でサイト全体がブロックされました。すぐに直すには?
User-agent: *のブロックにあるDisallow: /の行を、置き換えるか削除します。デプロイ後は、GSCのURL検査で確認してください。修正から数日以内に通常のクロールが再開します。
ディレクトリはブロックせず、1つのファイルだけをブロックするには?
末尾のスラッシュを付けない正確なパスを使います(Disallow: /private-doc.pdf)。サイト全体で特定の拡張子をブロックするには、ワイルドカードを使います(Disallow: /*.pdf$)。

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it