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検査で行う
関連記事: