Search Console のインデックス作成レポートに、こんな項目が出ることがあります。
「送信された URL に noindex タグが追加されています」
まず、対象ページを検索結果に出したいのか、意図してnoindexにしているのかを確認します。
意図したnoindexならサイトマップから外し、意図しないnoindexならページ側の設定を直します。
この報告だけでは、noindexの設定ミスかサイトマップの不整合かは判別できません。
本稿では、意図したnoindexのページがサイトマップに残っている場合を扱います。
この記事では、なぜそうなるのかと、設定に合わせて自動で外す方法をまとめます。
なぜ起きるのか
WordPress 5.5 から、本体が wp-sitemap.xml を自動で出すようになりました。
標準サイトマップは公開投稿や分類の一覧を生成しますが、SEO SIMPLE PACKの個別noindex設定と自動で同期するわけではありません。
少なくとも、ページのHTMLやHTTPヘッダーを取得して、最終的なnoindex指示を検査する仕組みではありません。
この例ではSEOプラグインがnoindexを出しています。
ほかにも、WordPressの設定や独自コード、サーバーのHTTPヘッダーから出る場合があります。
SEO SIMPLE PACK なら、設定画面の「投稿ページ」や「タクソノミー」にトグルがあります。
つまり、この2つは別々の仕組みです。
- サイトマップ … 「このURLを見に来てください」という申告
- noindex … 「このページは検索結果に載せないでください」という指示
両方を同時に出している状態になります。
検索に載せたいURLの一覧に、検索結果へ載せない指示のあるURLが混ざっている状態です。
noindexはアクセスやクロールを禁止する指示ではありません。
どれくらい起きているか
当方で運用しているサイトを数えてみました。
7サイト・22インストール、2026年9月時点の実測です。
| サイトマップの総数 | noindex が載っていた数 | 割合 |
|---|---|---|
| 3,899件 | 181件 | 4.6% |
| 2,131件 | 293件 | 13.7% |
| 999件 | 25件 | 2.5% |
| 162件 | 44件 | 27.2% |
| 117件 | 13件 | 11.1% |
| 105件 | 34件 | 32.4% |
| 104件 | 1件 | 1.0% |
合計で591件ありました。
サイトマップの3分の1が noindex だったサイトもあります。
特徴として、記事は1件も含まれていませんでした。
全部が分類ページ(カテゴリ・タグ・カスタム分類)と著者ページです。
どれも「検索結果には出さない」と決めて noindex にしてあるものでした。
この観測例ではnoindexは意図どおりで、サイトマップの生成条件と一致していませんでした。
キャッシュが古い場合だけでなく、設定を参照しない生成処理でも同じ不整合が起こります。
自分のサイトで数える
手順は3つです。
robots.txtのSitemap行と、Search Consoleで送信した索引URLを確認する。宣言がなくてもサイトマップが存在する場合はあります- そのサイトマップを開いて、載っているURLを集める
- 各URLの応答と最終URLを確認し、robots・googlebotメタとHTTPのX-Robots-Tagを調べる
数が少なければブラウザだけでもできます。
代表URLのソースでrobots・googlebotメタを確認し、ブラウザーの開発者ツールのNetworkでも対象文書の応答ヘッダーを確認します。
HTMLだけを見て「noindexなし」と判断しないでください。
ただ、数が増えると手では追えません。
収録URLを順に取得する補助スクリプトを後半に掲載しています。
全URLへの取得を試みることと、すべてのインデックス制御を判定できることは別です。
数えるときに引っかかった3つ
当方はここで3回、判断を誤りました。
同じところで止まらないよう、先に書いておきます。
1. robots メタは1ページに何本も出る
WordPress 本体と SEO プラグインが、それぞれ別に出します。
しかも引用符が違います。
<meta name='robots' content='max-image-preview:large' /> ← WordPress本体
<meta name="robots" content="noindex"> ← SEOプラグイン片方だけを探すと見落とします。
当方はシングルクォートだけを見て、「noindex になっていない」と誤って判断しました。
1本目で止めず、そのページの robots メタを全部集めてください。
2. 転送されたページの中身で判断しない
著者ページを無効にしていると、開いた先がトップページに転送されることがあります。
SEO SIMPLE PACK の「著者ページを無効化する」がこれにあたります。
転送先のトップページにnoindexがあるかどうかは、そのページの設定によります。
いずれにしても、転送先の指示を元URLの指示として数えないようにします。
それを読んで「noindex ではないのに外れた」と勘違いしました。
取得したあと、最終URLが最初に指定したURLと同じかを先に見てください。
def get(url):
"""飛ばされた先の中身で判断しないよう、最終URLも返す。"""
req = urllib.request.Request(url, headers=UA)
res = urllib.request.urlopen(req, timeout=60)
return res.read().decode("utf-8", "replace"), res.url
html, final = get(u)
if final.rstrip("/") != u.rstrip("/"):
# 転送された。転送先の robots を読んでも意味がない
print("転送される:", u, "→", final)
continue3. 取得に失敗したものを「問題なし」に数えない
タイムアウトした分を握りつぶすと、件数が実際より少なく出ます。
当方はこれで10件を取りこぼし、あとから数が合わなくなりました。
失敗した件数は、0件でも必ず表示させたほうがよいです。
放置してよいのか
この報告だけで順位への影響は判断できません。
検索に出したい記事が意図せずnoindexになっていないかを先に確認し、意図した除外であればサイトマップとの不整合を整理します。
Googleがページをクロールしてnoindexを読める状態であることが必要です。
設定直後に検索結果から消えるとは限らず、robots.txtでクロールを拒否すると指示を読めません。
Googleのnoindexの説明を参照してください。
ただ、2つ困ることがあります。
1つは、レポートが読みにくくなることです。
本当に見るべきエラーが、この項目に埋もれます。
当方の場合、1サイトで293件がこれで埋まっていました。
もう1つは、載せる意味のないURLを毎回渡していることです。
検索に出したいURLをサイトマップにまとめるため、意図して検索対象から外したURLは収録範囲から除きます。
ただし、サイトマップから外すだけでは検索結果からの削除指示にはなりません。
サイトマップの生成元に合わせて直す
ここで扱うSEO SIMPLE PACKと標準サイトマップの組み合わせでは、noindex設定を参照する除外処理を追加します。
ほかのプラグインまで同じ動作とは限りません。
サイトマップを自前で持つプラグインを使っている場合は、そちらの設定で外せます。
本体の wp-sitemap.xml を使っているなら、フィルタで外すことになります。
WordPress には、そのための入り口が用意されています。
| フィルタ | 外せるもの |
|---|---|
wp_sitemaps_taxonomies | 分類ごと(カテゴリ・タグ・カスタム分類) |
wp_sitemaps_post_types | 投稿タイプごと |
wp_sitemaps_add_provider | 著者ページなど、まとまりごと |
wp_sitemaps_taxonomies_query_args | 分類の中の、特定の用語だけ |
wp_sitemaps_posts_query_args | 投稿タイプの中の、特定の記事だけ |
設定を戻したときの復帰まで考える
ここが一番の注意点です。
「カテゴリを消す」と直接書いてしまうと、あとで設定を index に戻したときに、サイトマップに出てこなくなります。
解除後のサイトマップを確認しないと、欠落が残ることがあります。
サイトマップは普段見ないものなので、間違ったまま何か月も経ちます。
なので、SEO プラグインの設定を読んで判断させます。
トグルを切り替えたら、サイトマップも一緒に変わる形にします。
全体のnoindexより個別のindex指定を優先する
| 確認項目 | 確認結果・判断 |
|---|---|
| 全体index・個別未設定 | サイトマップに残す。個別noindexだけを除外する |
| 全体noindex・個別index | 個別設定を優先して残す。投稿タイプや分類ごと丸ごと消すと、この例外まで失われる |
| 既存のmeta_query | 新しい条件をANDで加える。他のコードによる絞り込みを上書きしない |
| 著者ページ | noindexと無効化のどちらも確認する。転送したURLは転送先のrobotsと分けて集計する |
| 確認した環境 | WordPress 7.1.2、SEO SIMPLE PACK 3.7.0。実DBの投稿・用語クエリー、標準サイトマップのURL一覧、解除後の復旧を確認 |
修正版の掲載コードはWordPress標準サイトマップ用です。
別のSEOプラグインが生成するサイトマップ、ssp_output_robotsによる追加変更、WordPress全体の非公開設定は別途確認してください。
公開サイトの設定を変える前に、検証環境で代表URLを比較します。
貼付先はCode SnippetsのPHPスニペット、または子テーマのfunctions.phpです。
既存の同目的コードと二重に有効化しないでください。
Code Snippetsでは先頭の<?phpを付けません。
戻すときは追加したスニペットを停止するか、追加した関数と3つのadd_filterを削除します。
停止後に掲載URLを再取得して元の状態へ戻ったかを確認します。
使うのは投稿クエリー、分類クエリーと著者プロバイダーのフィルターです。
後半の検査コードは、対象のサイトマップURLを指定し、noindex・転送・取得失敗を別に報告します。
適用前と、検索対象へ戻すときの確認
除外前のURL一覧を保存し、残す記事と除外するページを代表例として選びます。
変更後は件数だけでなくURLの差分を比較し、意図しない欠落がないか確認してください。
キャッシュがある場合は、現在の設定を反映したXMLとページ応答を比較します。
検索に戻すページは、個別設定だけでなく全体設定やHTTPヘッダーにもnoindexが残っていないか確認します。
公開ページから指示が消え、対象URLがサイトマップへ戻ったことを確かめ、Search ConsoleのURL検査で取得状況を確認します。
再クロールや検索登録は即時には保証されません。
後半の検査コードは、取得したHTMLと複数のHTTPヘッダーを調べ、noindexとnoneを検出します。
対象クローラーの指定や日時を含むヘッダーは手動確認に分けます。
JavaScript実行後の指示やGoogleの取得結果は判定しないため、検出0件を全URLの検索登録可能判定として使わないでください。
仕様はGoogleのrobotsメタタグとHTTPヘッダーの説明で確認できます。
複数サイト向けの例は、管理画面で確認した既存IDを指定してコードを更新する方式です。
名前検索による自動選択、新規作成、自動有効化は行いません。
変更前コードのハッシュと保存直前の状態を照合し、バックアップを残します。
まず検証環境1件で確認してください。
2026年10月20日、Pythonの検査・更新例を改修しました。
ローカルHTTP再現とモックAPIの計12テスト、および運用サイトが公開するAPIルート仕様を確認しています。
今回、実サイトへのスニペット投入・有効化やPHP本体の再試験は行っていません。
ここから先(有料部分)
以下を掲載しています。
- 検証環境で適用を確認するコード全文(3つのフィルタ)
- 設定キーの落とし穴(カテゴリだけ名前が違います)
- 個別に noindex にしたページも拾う書き方
- 効いたかどうかを全数で確かめるスクリプト
- 複数サイトの確認済みスニペットを更新する方法
- 入れる前後で必ず見る3点
2026年9月の運用例に加え、2026年10月2日に個別のindex指定と既存の絞り込み条件を保持する修正版を検証しました。
この記事だけ読みたい方は単品購入、ほかの有料記事も読みたい方は購読プランをご確認ください。
購読対象の記事・料金は、下のプラン案内で確認できます。
役に立った記事を、ブログやSNSで紹介しませんか?
紹介制度の対象記事・購読プランを購入した方は、codocで専用リンクと報酬条件を確認できます。
専用リンク経由で購入されると、設定された紹介報酬が発生します。
購読プランの紹介報酬は初回課金のみが対象です。
紹介時は、広告・PRであることが読者に分かるように明記してください。



