SEOプラグインでサイトマップが404になる

実測 に検証

Search Console が「サイトマップを読み取れませんでした」と言っている。 前は読めていたのに、心当たりは SEO プラグインを入れたことだけ。

WordPress 本体のサイトマップと、SEO プラグインのサイトマップは URL が違います。 入れた瞬間に切り替わるため、前に送信した URL は使えなくなります。 Yoast SEO(28.5)と All in One SEO(5.0.1.1)で実測しました。

実測 1: 入れる前(WordPress 本体だけ)#

URL結果
/wp-sitemap.xml200
/sitemap.xml301 → /wp-sitemap.xml
/sitemap_index.xml404

WordPress 本体のサイトマップ

本体のサイトマップ。中身は 4 つの子サイトマップへのリンク

robots.txt はこうなっています。

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

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

実測 2: Yoast SEO を入れた直後#

設定は何も変えていません。有効化しただけです。

URL入れる前入れた後
/wp-sitemap.xml200301 → /sitemap_index.xml
/wp-sitemap-posts-post-1.xml200301 → /post-sitemap.xml
/sitemap_index.xml404200

Yoast SEO のサイトマップ

同じサイトのサイトマップ。URL も中身の構成も変わっている

本体のサイトマップは無効になり、古い URL は 301 で新しい URL に飛ばされます。

ここが誤解しやすいところです。301 で飛ぶなら大丈夫、ではありません。

  • Search Console に登録済みの /wp-sitemap.xml は、その URL 自体としては 200 を返さなくなります
  • 送信済みのサイトマップが「取得できませんでした」「読み取れませんでした」になるのはこのためです
  • 新しい URL(/sitemap_index.xml)を送信し直す必要があります

robots.txt が丸ごと置き換わる#

これは気づきにくい変化です。実測した全文です。

# START YOAST BLOCK
# ---------------------------
User-agent: *
Disallow:

Sitemap: http://example.com/sitemap_index.xml
# ---------------------------
# END YOAST BLOCK

Disallow: /wp-admin/ と Allow: /wp-admin/admin-ajax.php が消えています。 代わりに空の Disallow:(= 何も禁止しない)が入ります。

WordPress の robots.txt は実ファイルではなく動的生成なので、 プラグインが内容を差し替えられます。 「robots.txt を編集した覚えがないのに変わっている」はこれです。

noindex 設定との関係も変わる#

設定 > 表示設定 >「検索エンジンがサイトをインデックスしないようにする」を 入れた状態(blog_public = 0)で比べました。

本体だけYoast あり
サイトマップ404(機能ごと無効)200 のまま
記事の meta robotsnoindex, nofollownoindex, nofollow

Yoast のサイトマップは、この設定では止まりません。 「サイトマップは出ているから公開設定は大丈夫」と判断すると外します。 判定に使うのは meta robots です。 → 検索結果に出てこない

実測 3: 2 つ入れると重複する#

Yoast を入れたまま All in One SEO も有効化しました。

head に出た数Yoast だけ2 つとも
rel="canonical"12
og:title12
<link rel="canonical" href="http://example.com/2026/09/12/post-31/" />
<link rel="canonical" href="http://example.com/2026/09/12/post-31/" />

同じ URL でも 2 本出ます。どちらも wp_head に出力するためです。 値が食い違えば、検索エンジンはどちらを正規とみなすか選べません。

サイトマップの取り合いも起きました。

URL2 つとも有効なとき
/sitemap.xml200(All in One SEO)
/sitemap_index.xml302 → /sitemap.xml
/post-sitemap.xml200(Yoast のものが残る)

robots.txt には Sitemap 行が 3 本並びました。

Sitemap: http://example.com/sitemap.xml
Sitemap: http://example.com/sitemap.rss

# START YOAST BLOCK
...
Sitemap: http://example.com/sitemap_index.xml
# END YOAST BLOCK

SEO プラグインは 1 つだけにします。乗り換えるときは、 古いほうを止めてから新しいほうを入れます。

実測 4: 外すと今度は新しい URL が 404 になる#

両方を削除したあとの状態です。

URL結果
/wp-sitemap.xml200(本体が復活)
/sitemap_index.xml404

robots.txt も既定の内容に戻りました。

プラグインを外したら、今度は /sitemap_index.xml が 404 です。 Search Console にはそちらを登録してあるので、また送信し直しになります。

入れるときも外すときも、サイトマップの URL は変わる。 これが「Search Console のサイトマップが急に読めなくなる」の正体です。

確認の順番#

# 1. どの URL が生きているか
for u in /wp-sitemap.xml /sitemap_index.xml /sitemap.xml; do
  printf '%-22s %s\n' "$u" "$(curl -s -o /dev/null -w '%{http_code}' "https://example.com$u")"
done

# 2. robots.txt が何を指しているか
curl -s https://example.com/robots.txt | grep -i sitemap

# 3. canonical が 2 本出ていないか
curl -s https://example.com/ | grep -c 'rel="canonical"'
観測意味
送信済みの URL が 301 か 404SEO プラグインの導入・削除で URL が変わった。送信し直す
robots.txt の Sitemap 行が 2 本以上SEO プラグインが 2 つ動いている
canonical が 2 本同上。1 つに絞る
サイトマップは 200 なのに検索に出ないmeta robots の noindex を見る

robots.txt の Sitemap 行が、そのサイトで有効なサイトマップです。 まずそこを見れば、どの URL を送ればいいかが分かります。

再現手順#

wp option update blog_public 1

# 入れる前
curl -s -o /dev/null -w '%{http_code}\n' http://localhost:8080/wp-sitemap.xml   # 200
curl -s http://localhost:8080/robots.txt

wp plugin install wordpress-seo --activate

# 入れた後(設定は触らない)
curl -s -o /dev/null -D - http://localhost:8080/wp-sitemap.xml | grep -iE '^HTTP|^location'
# → 301 / Location: http://localhost:8080/sitemap_index.xml
curl -s http://localhost:8080/robots.txt        # Disallow: /wp-admin/ が消える

# noindex 設定との関係
wp option update blog_public 0
curl -s -o /dev/null -w '%{http_code}\n' http://localhost:8080/sitemap_index.xml  # 200 のまま
wp option update blog_public 1

# 2 つ同時
wp plugin install all-in-one-seo-pack --activate
curl -s http://localhost:8080/2026/09/12/post-31/ | grep -c 'rel="canonical"'     # 2
curl -s -o /dev/null -D - http://localhost:8080/sitemap_index.xml | grep -i location
# → Location: http://localhost:8080/sitemap.xml

# 後片付け
wp plugin deactivate all-in-one-seo-pack wordpress-seo
wp plugin delete all-in-one-seo-pack wordpress-seo
curl -s -o /dev/null -w '%{http_code}\n' http://localhost:8080/sitemap_index.xml  # 404 に戻る

検証で入れた 2 つのプラグインは削除し、blog_public も元の値に戻してあります。