2026年5月20日

2026年5月20日

WordPressのrobots.txtの設定方法|仮想robots.txtの仕組みと書き方の注意点

robots.txtは、検索エンジンのクローラーに「どのURLを巡回してよいか」を伝えるファイルです。WordPressは、サイトのルートに robots.txt というファイルがなくても、自動で内容を出力します(仮想robots.txt)。この記事では、WordPressが出力する内容と、書き換える方法、書くときの注意点を説明します。

robots.txtでできること・できないこと

robots.txtで制御できるのは、クローラーの巡回(クロール)です。検索結果に表示させない(インデックスさせない)仕組みではありません。Googleのドキュメントでも、robots.txtでブロックしたページでも、ほかのサイトからリンクされていれば、説明文のないURLだけの状態で検索結果に出ることがあると説明されています。

検索結果に出したくないページには、robots.txtではなく noindex を使います。noindex はクローラーがページを読み込んで初めて伝わるため、同じページをrobots.txtでブロックすると、noindex が読まれなくなります。

現在のrobots.txtを確認する

# ステータスコードとヘッダーを確認
curl -sI https://example.com/robots.txt

# 内容を確認
curl -s https://example.com/robots.txt

robots.txtは、ホスト名の直下(https://example.com/robots.txt)に置く必要があります。https://example.com/blog/ のようにサブディレクトリにWordPressを入れている場合、WordPressの仮想robots.txtはルートで応答しないので、ルートに物理ファイルを置きます。

ステータスコードにも注意します。Googleは、robots.txtが404などの4xxを返す場合は制限なしとして扱い、5xxを返す場合はクロールを一時的に止めます。PHPのエラーで仮想robots.txtが500を返していると、サイト全体のクロールに影響します。

WordPressが出力する仮想robots.txt

サイトのルートに物理ファイルがなければ、WordPressの do_robots() 関数が次のような内容を出力します。

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

Sitemap: https://example.com/wp-sitemap.xml
  • /wp-admin/ の巡回を禁止し、フロント側の機能でも使われる admin-ajax.php だけを許可している
  • Sitemap: の行は、WordPress 5.5で加わった本体のXMLサイトマップが有効なときに追加される

「設定」→「表示設定」の「検索エンジンでの表示」で「検索エンジンがサイトをインデックスしないようにする」にチェックを入れた場合、WordPress 5.3以降はrobots.txtに Disallow: / を出力しません。代わりに、各ページに noindex の meta タグを出力します。このとき本体のサイトマップは無効になるので、Sitemap: の行も出力されません。

# 1 = 検索エンジンに表示を許可、0 = インデックスしないよう求める
wp option get blog_public

本番サイトで意図せず 0 になっていないか確認してください。

書き換える方法は2つ

方法 特徴
robots_txt フィルター WordPressの仮想robots.txtに行を足す。サイトマップの行など、本体やプラグインが加える内容を生かせる
物理ファイル サイトのルートに robots.txt を置く。WebサーバーがWordPressを通さずに返すので、フィルターやプラグインの設定は効かなくなる

両方を同時に使うと、物理ファイルだけが使われます。SEOプラグインの設定画面でrobots.txtを編集している場合も、どこで管理しているかを1か所に決めておきます。

robots_txt フィルターで行を足す

子テーマの functions.php か、自作のプラグインに書きます。次の例は、サイト内検索の結果ページの巡回を止める行を、Allow: /wp-admin/admin-ajax.php の直後に差し込みます。

<?php
add_filter( 'robots_txt', function ( $output, $public ) {
	if ( ! $public ) {
		return $output;
	}

	$allow = 'Allow: ' . wp_parse_url( admin_url( 'admin-ajax.php' ), PHP_URL_PATH ) . "\n";
	$extra = "Disallow: /*?s=\n" . "Disallow: /search/\n";

	return str_replace( $allow, $allow . $extra, $output );
}, 10, 2 );

本体のサイトマップの Sitemap: 行は、優先度 0 で先に追加されます。末尾に文字列を足すと Sitemap: 行より後ろに並ぶため、この例では Allow 行の直後に差し込んでいます。$public が偽(インデックスしない設定)のときは何もしません。

物理ファイルを置く

物理ファイルにする場合は、WordPressの既定の内容をもとに書きます。

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /*?s=
Disallow: /search/

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

Sitemap: には、実際に使っているサイトマップのURLを書きます。WordPress本体のサイトマップなら /wp-sitemap.xml です。SEOプラグインがサイトマップを出力している場合はURLが異なるので(例: Yoast SEO は /sitemap_index.xml)、ブラウザで開いて表示されるURLを書きます。

書くときの注意点

CSSやJavaScriptのディレクトリを遮断しない

/wp-includes/、/wp-content/plugins/、/wp-content/themes/ を Disallow にする設定例を見かけますが、これらにはページの表示に使うCSSやJavaScriptが入っています。Googleは、これらがないとページを正しく理解できない場合は遮断しないよう案内しています。画像が入っている /wp-content/uploads/ も遮断しません。

検索結果ページの扱い

サイト内検索の結果(/?s=キーワード や /search/キーワード/)は、クローラーが巡回しても検索結果として役に立たないことが多く、上の例のように巡回を止めることがあります。Googleのrobots.txtは *(任意の文字列)と $(URLの末尾)に対応しているので、Disallow: /*?s= のように書くと、/page/2/?s=… のようなURLにも当てはまります。

ただし、検索結果ページに noindex を付けて検索結果から外している場合、robots.txtで巡回を止めると noindex が読まれなくなります。すでにインデックスされている検索結果ページを外したいときは、先に noindex で外れるのを待ち、robots.txtでの遮断はその後にするか、どちらか一方だけを使います。

特定のクローラーを止める

ほかのクローラーには、User-agent を分けて書きます。2026年10月時点で、次の名前が各社の公式ドキュメントに記載されています。

# SEOツールのクローラー
User-agent: AhrefsBot
Disallow: /

User-agent: SemrushBot
Disallow: /

# OpenAI のクローラー
User-agent: GPTBot
Disallow: /

# Google の生成AIでの利用を制御するトークン(Google検索のクロールには影響しない)
User-agent: Google-Extended
Disallow: /

robots.txtは守るかどうかがクローラー側に任されている仕組みで、従わないクローラーには効きません。アクセスそのものを止めたい場合は、Webサーバーやファイアウォールで遮断します。

Googleが対応していない記述

Googleが解釈するのは user-agent、allow、disallow、sitemap の4つです。crawl-delay は無視されます。ファイルサイズの上限は500KiBで、それを超えた部分は読まれません。

Search Consoleで確認する

以前あった「robots.txtテスター」は、2023年11月に新しい「robots.txtレポート」への置き換えが発表され、廃止されました。2026年10月時点では、次の方法で確認します。

  • robots.txtレポート: Search Consoleの「設定」から開く。Googleが最後にrobots.txtを取得した日時、取得の成否、解析で見つかったエラーと警告が表示される。修正後に再クロールをリクエストすることもできる
  • URL検査: 個別のURLを調べ、robots.txtでブロックされているかを確認する

robots.txtレポートは、ドメインプロパティか、パスを含まないURLプレフィックスのプロパティ(例: https://example.com/)で使えます。Googleはrobots.txtを通常最長24時間キャッシュするので、書き換えた内容がすぐに反映されないことがあります。

まとめ

  • robots.txtはクロールの制御で、インデックスを防ぐ仕組みではない。検索結果から外すには noindex を使い、そのページはrobots.txtでブロックしない
  • WordPressは物理ファイルがなければ仮想robots.txtを出力する。本体のサイトマップが有効なら Sitemap: 行も入る
  • 書き換えは robots_txt フィルターか物理ファイルのどちらか一方で行う
  • /wp-includes/・/wp-content/plugins/・/wp-content/themes/ は遮断しない
  • Sitemap: には実際に使っているサイトマップのURLを書く
  • 確認はSearch Consoleのrobots.txtレポートとURL検査で行う

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲