タグアーカイブ Yoast SEO

XMLサイトマップで「XML 宣言はドキュメントの先頭でのみ許可されています」エラーの直し方

XMLサイトマップで「XML 宣言はドキュメントの先頭でのみ許可されています」エラーの直し方

XMLサイトマップのURLを開いたときに「XML 宣言はドキュメントの先頭でのみ許可されています」というエラーが表示された場合、原因はほぼ確実に出力の先頭に空行や余計な改行が混入していることにある。この症状は、PHPファイルの末尾の閉じタグ ?> のあとの空白や、プラグイン・テーマが意図せず出力した文字がXML宣言より前に現れることで発生する。解決には、サイトのキャッシュを完全にクリアしたうえで、すべてのプラグインを停止し標準テーマに切り替えて原因を切り分け、問題のファイルから不要な空白を取り除く手順を踏む。

なぜXMLサイトマップに「XML 宣言は先頭でのみ許可」エラーが出るのか

なぜXMLサイトマップに「XML 宣言は先頭でのみ許可」エラーが出るのか

XMLサイトマップはブラウザや検索エンジンが読み取る形式で、文書の最初に <?xml version="1.0" encoding="UTF-8"?> という宣言がなければならない。ところが、この宣言よりも前に空白や改行が1文字でも出力されると、パーサーが「XML宣言はドキュメントの先頭でのみ許可されています」という旨のエラーを返す。

WordPress環境では、PHPスクリプトが実行されて最終的なXMLを生成するが、意図しない場所で echo?php 外の空白が出力されると、それが先頭に紛れ込む。代表的なのは、テーマの functions.php やプラグインファイルの末尾に閉じタグ ?> を書いたうえでその後に改行が入っているパターンだ。PHPファイルでは閉じタグを省略することが推奨されており、記述すると余計な空白が出力されるリスクが常につきまとう。

❌ エラー状態の出力
← ここに空白行が存在する
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https...</loc></url>
</urlset>
✅ 正常な出力
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https...</loc></url>
</urlset>
エラー状態  正常な状態

この図のように、たった1行の空行がXML宣言の前に置かれるだけでサイトマップ全体がエラーになる。実際に自分のサイトのサイトマップURLを開き、ページのソースを表示(ブラウザの「ページのソースを表示」機能)すると、1行目に空行が入っていないか容易に確認できる。

空白行の混入源を特定する手順

空白行の混入源を特定する手順
STEP 1 キャッシュを完全にクリアする
STEP 2 全プラグインを無効化し標準テーマに切り替える
STEP 3 サイトマップを開きエラーが消えたか確認
STEP 4 原因のプラグインかテーマを特定する

STEP 1 キャッシュを完全にクリアする

まず、キャッシュ系プラグイン(WP Super CacheやW3 Total Cacheなど)のキャッシュをすべて削除する。サーバー側のキャッシュが有効な場合、そちらも管理パネルからクリアする。さらにブラウザのキャッシュも念のため削除しておくと、変更がすぐに反映される。

STEP 2 全プラグインを無効化し標準テーマに切り替える

プラグイン画面からすべてのプラグインを一括で無効化する。その際、SEOプラグイン(Yoast SEOなど)も例外なく停止する。その後、外観→テーマで「Twenty Twenty-Five」など公式の標準テーマを有効化する。この状態がいわゆる「切り分けの初期状態」になる。

もし管理画面にすら入れない障害がある場合は、FTPソフトやレンタルサーバーのファイルマネージャーで /wp-content/plugins/ ディレクトリごとリネームする方法でも一括無効化できる。

STEP 3 サイトマップを開きエラーが消えたか確認する

プラグインを無効にして標準テーマの状態で、Yoast SEOのサイトマップURL(通常 /sitemap_index.xml)にアクセスする。この時点でエラーが消え、正常なXMLが表示されれば、テーマやプラグインのいずれかが原因だと確定できる。

STEP 4 原因のプラグインかテーマを特定する

1つずつプラグインを有効化しながらサイトマップを確認し、エラーが再発するタイミングを探る。エラーが出た時点で最後に有効化したプラグインが原因だ。テーマの場合は、標準テーマで問題が消えた段階で疑いが濃くなる。自作ブロックテーマやカスタムブロックを使っているなら、そのテーマの functions.php に余計な空白がないかも確認しよう。

空白を出力しているファイルを修正する具体的方法

空白を出力しているファイルを修正する具体的方法

原因が特定できたら、実際のPHPファイルを編集して不要な空白を取り除く。典型的な作業は次のとおりだ。

閉じタグ ?> を削除する PHPファイルの末尾に ?> が記述されていると、その後の改行が出力の先頭に混入する。ファイルの最終行が ?> で終わっている場合は、この閉じタグをまるごと削除する。PHPではファイル末尾の閉じタグが省略可能で、むしろ推奨されていない。削除後に空行が残っていればそれも取り除く。

ファイルの先頭と末尾の空白を確認する <?php の前や、ファイルの最終行より後ろに空白がないかエディタで確認する。改行やスペースが残っている場合はそれらを削除する。複数の開発者が触るテーマでは、意図せず混入していることが多い。

プラグインやテーマのファイルを直接編集する FTPクライアントやレンタルサーバーのファイルマネージャー、あるいはWordPress管理画面の「プラグインファイルエディター」「テーマファイルエディター」を使って該当ファイルを開き修正する。編集後は必ず再度キャッシュをクリアしてからサイトマップを確認する。

キャッシュとPHP設定が影響するケース

キャッシュとPHP設定が影響するケース

空白行が混入していなくても、キャッシュが原因でエラーが表示され続けることがある。ページキャッシュがXML出力の古い状態を保持していると、修正後もエラーが消えないように見える。以下の点を必ず実施しよう。

WP Super Cacheなどキャッシュプラグインのキャッシュを完全に削除する

キャッシュプラグインの設定画面にある「キャッシュを削除」「全キャッシュを削除」といったボタンで全データをクリアする。さらに、サイトマップURLにクエリパラメータ(例 ?nocache=1)を付けてアクセスすることでキャッシュを通さずに表示し、エラーの有無を確認できる。

PHPのメモリ制限は256MBあれば十分だが512MBにしても直らない

メモリ不足が原因で似たエラーが出ることはあるが、今回の「XML宣言は先頭のみ」というエラーはメモリとは無関係であることがほとんどだ。実際に256Mから512Mに増やしても改善しなかったという報告も多い。メモリ増加で解決しなかった場合は迷わず空白行の調査に戻る。

よくある質問

サイトマップのエラーが特定の投稿タイプ(例 商品)でのみ発生するのはなぜか

WooCommerceの商品サイトマップなど、特定の投稿タイプだけ別のファイルで生成される場合、その処理を行うプラグインやテーマの該当部分に空白が混入している可能性が高い。原因箇所を特定するには、SEOプラグインが生成する個別のサイトマップURL(product-sitemap.xmlなど)に直接アクセスし、同じ手順で切り分けを行う。

空白行を削除してもエラーが直らない場合に次に試すことは

キャッシュの削除漏れや、サーバー側のVarnishやCDNがXMLをキャッシュしている可能性を疑う。また、wp-config.php ファイルの先頭や末尾に空白が入っているケースも、サイト全体の出力に影響を及ぼすため確認する。さらに、PHPの出力バッファリングが影響している場合もあるが、まずは wp-config.php まで含めた全ファイルの空白確認を徹底する。

Health Checkトラブルシューティングプラグインは役に立つのか

Health Check & Troubleshootingプラグインは、管理画面からセッションベースでプラグインの停止やテーマの切り替えを安全に行えるため、切り分け作業を効率化できる。有効化して「トラブルシューティングモード」に入れば、他の訪問者には影響を与えずにテストできる。ただし、空白行の直接の修正までは行わないため、あくまで原因特定の補助ツールとして使う。

Yoast SEOのXMLサイトマップキャッシュを個別にクリアする方法は

Yoast SEOはサイトマップの生成結果をキャッシュしないが、外部のキャッシュプラグインと競合することがある。Yoast SEO側で直接キャッシュをクリアする機能はないため、前述のようにサイト全体のキャッシュを削除し、可能ならSEOプラグインを一度無効化してから再度有効化すると、内部のトランジェントが更新されて問題が解消されることもある。

オリジナルブロックテーマを使っているが、どこに注意すればよいか

ブロックテーマでは functions.php の末尾に空白が入っていないか、そしてカスタムブロックのプラグインとしてのPHPファイル(ブロックの動的レンダリング部分)に閉じタグ ?> と空白が残っていないかを必ずチェックする。自作ブロックは開発時にテストを繰り返すため、ファイル末尾の処理が甘くなりがちで、意外な場所から空白が出力されることがある。

この記事のポイント

  • エラーの直接原因はXML宣言より前に出力された空白行か改行である
  • キャッシュを完全にクリアし、全プラグイン無効化と標準テーマ切り替えで切り分ける
  • PHPファイル末尾の閉じタグ ?> とその後ろの空白を削除する
  • wp-config.php の先頭・末尾や自作テーマのファイルも忘れずに確認する
  • メモリ増加ではこのエラーはまず直らないため空白行調査に集中する
Yoast SEOが原因でWordPress 7.0の編集画面が読み込めない時の対処

Yoast SEOが原因でWordPress 7.0の編集画面が読み込めない時の対処

WordPress 7.0 の編集画面で、改訂(リビジョン)を視覚的に比較できる新機能が使えなくなったり、iFrame 版エディターの読み込みに問題が出るケースがある。これは、Yoast SEO のクラシックメタボックスが存在すると、WordPress 7.0 が新機能を意図的に無効化する仕様になっているためだ。Yoast SEO の設定を残したまま問題を回避したい場合は、該当の投稿タイプに対して Yoast SEO のメタボックスを設定からオフにすればよい。

なぜ Yoast SEO が有効だと WordPress 7.0 の新エディター機能が使えなくなるのか

なぜ Yoast SEO が有効だと WordPress 7.0 の新エディター機能が使えなくなるのか

WordPress 7.0 では、ブロックエディターが iFrame 版に移行し、改訂の比較画面がこれまでより直感的な UI に変更された。ところが、Yoast SEO に限らず、ひとつでもクラシックメタボックスが有効な状態だと、WordPress はこれらの新機能を自動的にオフにして旧来の改訂画面にフォールバックする。これは WordPress の意図的な挙動であり、Yoast SEO 単体のバグや不具合ではない。

クラシックメタボックス経由で保存された値(SEO タイトルやメタディスクリプションなど)は、現状の仕組みでは改訂を復元する際に正しく戻せない。そのため、互換性を保証できないメタボックスがある場合は、改訂のビジュアル比較のような高度な機能をまるごと制限する方針がとられている。

全メタボックスをコードで削除する対処がおすすめできない理由

全メタボックスをコードで削除する対処がおすすめできない理由

一部のユーザーは do_meta_boxes フックを使って投稿画面からメタボックスをすべて除去するコードを導入しているが、この方法には大きな副作用がある。公開ボックスだけを残して他の全メタボックスを削除してしまうため、Yoast SEO の SEO 設定が編集画面から消えるだけでなく、入力した値が保存されなくなる。結果として、検索エンジン向けの重要な情報が失われてしまう。

さらに、他のプラグインが提供するメタボックスも同時に削除されるため、カスタムフィールドや追加の設定パネルが一斉に使えなくなり、サイトの運用に支障をきたす可能性が高い。

Yoast SEO の SEO 設定を残したまま問題を解決する手順

Yoast SEO の SEO 設定を残したまま問題を解決する手順

Yoast SEO の開発チームは、特定の投稿タイプでのみ SEO コントロールを無効にする標準的な方法を用意している。この手順を使えば、他の投稿タイプには影響を与えず、該当の編集画面でのみ Yoast SEO メタボックスを非表示にできる。

ただし、現時点ではメタボックスを無効にすると、Yoast SEO の SEO タイトルやメタディスクリプションといった設定欄そのものが編集画面から消える点に注意が必要だ。編集画面のサイドバーにある Yoast SEO のパネルは、内部でメタボックスに依存しているため、メタボックスをオフにするとサイドバーも機能しなくなる。

STEP 1 WordPress 管理画面の左メニューから「Yoast SEO」→「設定」を開く
STEP 2 「コンテンツタイプ」タブを選択し、対象の投稿タイプ(投稿、固定ページ 等)を見つける
STEP 3 「SEO コントロールとアセスメントを有効にする」のトグルをオフにして変更を保存する

この設定変更は該当の投稿タイプにのみ適用され、他の投稿タイプでは引き続き Yoast SEO の全機能を利用できる。もし WordPress 7.0 の新エディター機能をどうしても優先したい場合の現実的な手段といえる。

メタボックスを非表示にした後、SEO 設定はどこで操作するのか

メタボックスを非表示にした後、SEO 設定はどこで操作するのか

この問題について Yoast チームは、現在メタボックスに依存している構造を刷新する作業を進めていると明かしている。将来的には、メタボックスをオフにしてもサイドバーから SEO 設定を操作できるようになる見込みだが、現時点では具体的な対応時期は公表されていない。

また、WordPress 7.1 で導入が検討されているリアルタイム共同編集機能への対応についても、Yoast チームは前向きな姿勢を示している。しかし、多数のアドオンが複雑に連携するエコシステム全体との互換性を保つ必要があるため、拙速なリリースは避け、慎重に開発を進めている段階だ。

一時的な回避策としてメタボックスを残しつつ運用するには

一時的な回避策としてメタボックスを残しつつ運用するには

SEO 設定を引き続き編集画面で操作したい場合、現時点では Yoast SEO のメタボックスを有効にしたまま、WordPress 7.0 の新改訂機能を使わずに従来の改訂画面で作業を続けることになる。これは不具合ではなく WordPress の設計上の制限であるため、Yoast SEO 側のアップデートを待つのが最も安全な対応といえる。

よくある質問

Yoast SEO 以外のプラグインでも同じ現象は起きるのか

起きる。クラシックメタボックスを提供しているプラグインであれば、どのプラグインでも同様の理由で WordPress 7.0 の新エディター機能が制限される。特定のプラグインに限った問題ではない。

設定をオフにした投稿タイプの SEO データは消えてしまうのか

保存済みの SEO タイトルやメタディスクリプションなどのデータが削除されることはない。設定を再度オンにすれば、以前のデータはそのまま復帰する。

コードで特定のメタボックスだけを削除することは可能か

技術的には可能だが、公式に推奨されている方法ではない。Yoast SEO の内部構造に依存するため、アップデートで動作しなくなるリスクが高い。どうしてもコードで対処する場合は、上書きした設定が保存されなくなる副作用を十分に理解したうえで行う必要がある。

この問題は Yoast SEO のアップデートで解決されるのか

Yoast チームはメタボックスへの依存を解消する改修を進めている。時期は未定だが、いずれはメタボックスを無効にしてもサイドバーから全機能を利用できるようになる予定だ。

この問題は WordPress 6.7 以前のバージョンでも発生するのか

発生しない。WordPress 7.0 で新たに導入された仕様であり、6.7 以前のバージョンではクラシックメタボックスが存在していても改訂機能が制限されることはない。

この記事のポイント

  • WordPress 7.0 で Yoast SEO のメタボックスが原因となり新エディター機能が制限されるのは、WordPress の意図的な仕様である
  • 全メタボックスをコードで削除する対処は SEO 設定の消失を招くため推奨されない
  • Yoast SEO の設定画面から特定の投稿タイプの SEO コントロールをオフにすることで問題を回避できる
  • メタボックスをオフにすると SEO 設定欄そのものが使えなくなる点に注意が必要
  • Yoast チームはメタボックス依存の解消を進めており、将来的には問題が根本的に改善される見込み