Menu
テーマ切り替え
ほのぼの情報サイト
ほのぼのゲーム情報GAME PON-POO
無料画像素材

WordPressサイトマップのエラー「XML declaration allowed only at the start of the document」の対処法

WordPressサイトマップのエラー「XML declaration allowed only at the start of the document」の対処法

WordPressサイトマップのエラー「XML declaration allowed only at the start of the document」の対処法

WordPressサイトで、Google XML Sitemapsなどのプラグインを使って生成したサイトマップ(通常は sitemap.xml など)を確認しようとした際に、ブラウザの画面に以下のようなエラーメッセージが表示されることがあります。

This page contains the following errors: error on line ○ at column ○: XML declaration allowed only at the start of the document Below is a rendering of the page up to the first error.

このエラーメッセージを日本語に翻訳すると、概ね以下のようになります。

「このページには次のエラーが含まれています。

○行目の○列目のエラー:XML宣言はドキュメントの先頭でのみ許可されます

以下は最初のエラーまでのページのレンダリングです。」

このエラーは、サイトマップファイル(XML形式)の一番最初にあるべき `` といったXML宣言の前に、**余計な空白や改行、あるいは何らかの文字が出力されてしまっている**場合に発生します。

WordPressサイトでは、テーマファイルやプラグインのPHPファイルが実行された結果としてHTMLやXMLが出力されます。これらのPHPファイルのどこかで、XML宣言より前に意図しない出力があると、サイトマップが不正な形式になってしまい、このエラーが表示されるのです。

このエラーが発生する主な原因

この「XML declaration allowed only at the start of the document」というエラーの最も一般的な原因は、以下のいずれか、または複数の組み合わせです。

  • PHPファイルの終了タグ ?> の後の空白や改行: functions.php やその他のテーマファイル、プラグインファイルの末尾にある ?> タグの後に、半角スペース、タブ、改行などの余計な文字が存在する場合、それがXML宣言の前に出力されてしまいます。
  • PHPファイルの開始タグ <?php の前の空白や改行: ファイルの先頭にある <?php タグの前に、余計な空白や改行が存在する場合も同様にエラーの原因となります。
  • 意図しないPHPの出力: テーマやプラグインのコードの中で、デバッグ用などで echoprint_r などを使って直接文字列を出力している箇所が、XML宣言より先に実行されてしまう場合にも発生します。
  • BOM付きUTF-8エンコーディング: PHPファイルが「バイトオーダーマーク (BOM)」付きのUTF-8で保存されている場合、このBOMがXML宣言の前に出力されてエラーを引き起こすことがあります。

特に、`functions.php` ファイルは多くの処理の起点となるため、このファイルの末尾にある ?> の後の余分な改行や空白が原因であることが非常に多いです。

具体的な対処方法

エラーの原因を探し、修正するための具体的なステップを順に試してみましょう。

Step 1: functions.php の末尾を確認する(最も多い原因)

FTPクライアントソフトやレンタルサーバーのファイルマネージャーを使って、WordPressのインストールディレクトリ内の wp-content/themes/ フォルダを開きます。現在有効化しているテーマ、または子テーマのフォルダへ進み、その中にある functions.php ファイルをテキストエディタで開いてください。

ファイルの一番最後の行を確認します。もし最終行が ?> で終わっている場合、**その ?> の後に改行や半角スペース、タブなどが一切入っていないか**を慎重に確認してください。もし余計な文字があれば、それを全て削除して保存します。

参考として、以前の記事で使われていた原因箇所の画像がこちらです。

サイトマップエラー時の対処

もし functions.php ファイルの最終行が ?> で終わっておらず、PHPコードがそのまま終わっている場合(これはWordPressで推奨される書き方です)、その末尾に余計な改行や空白が入っていないかを確認してください。

Step 2: PHP終了タグ ?> を省略する(推奨)

PHPでは、ファイルの末尾がPHPコードで終わる場合、**終了タグ ?> は省略することが推奨**されています。終了タグを省略すれば、その後に意図しない改行や空白が入ってしまうこと自体が物理的に不可能になるため、この種のエラーを根本的に回避できます。

もし `functions.php` やその他のテーマ・プラグインのPHPファイルが ?> で終わっている場合は、そのタグを削除して保存することを強く推奨します。

<?php
// ファイルの先頭

// 何らかのPHPコードの記述...

// ファイルの末尾(修正前)
// ?> は使わない方が安全です
// ?> <!-- ファイル末尾に意図しない改行や空白 -->

// ファイルの末尾(修正後 - 推奨)
// PHP終了タグを削除

補足: コード例の中で ?> を表示させるために、ここではコメントとして記述しました。実際のコードではこのコメントも含め、 ?> は全て削除してください。

Step 3: functions.php の先頭を確認する

`functions.php` ファイルの先頭、 <?php タグの前に余計な改行や空白がないかも確認し、もしあれば削除してください。

Step 4: ファイルのエンコーディングを確認する

使用しているテキストエディタで、`functions.php` ファイルのエンコーディング設定を確認してください。「BOM付きUTF-8」になっている場合は、「BOMなしUTF-8」または単に「UTF-8」として保存し直してください。多くのモダンなテキストエディタでは、保存時のオプションで選択できます。

Step 5: 他のテーマファイルやプラグインを確認する

もしあなたが `functions.php` 以外にもテーマファイルを編集したことがある場合(特に `header.php` など)、または最近新しいプラグインをインストールしたり既存プラグインを更新したりした場合は、それらのPHPファイルも同様に、終了タグ ?> の後の空白・改行や、開始タグ <?php の前の空白・改行を確認してみてください。特に、自作または改変したファイルが怪しい可能性が高いです。

それでも解決しない場合の切り分け

上記の一般的な原因と対処法を試してもサイトマップのエラーが改善されない場合は、問題の原因が特定のプラグインやテーマにある可能性が高くなります。以下の手順で原因を切り分けてみましょう。

  1. 全てのプラグインを停止する: WordPress管理画面から「プラグイン」を開き、全てのプラグインを選択して一括で「停止」を選択し実行します。その後、再度サイトマップにアクセスしてエラーが解消されているか確認します。

    • \\エラーが解消した場合:\\ プラグインのいずれかが原因です。プラグインを一つずつ有効化し直し、サイトマップを確認する、という作業を繰り返して、どのプラグインがエラーの原因となっているかを特定します。
    • \\エラーが解消しない場合:\\ プラグインが原因ではない可能性が高いです。
  2. テーマを一時的に切り替える: WordPressに標準で搭載されているテーマ(例: Twenty Twenty-Fourなど)に一時的に切り替えて、サイトマップにアクセスしてエラーが解消されているか確認します。

    • \\エラーが解消した場合:\\ 現在使用しているテーマ(またはその子テーマ)が原因です。テーマファイルの中に、前述のような余計な出力がある箇所がないか、詳細に確認する必要があります。特に子テーマを使っている場合は、親テーマではなく子テーマのファイルを確認してください。
    • \\エラーが解消しない場合:\\ WordPress本体やサーバー環境など、より専門的な調査が必要な可能性があります。

原因となっているプラグインやテーマが特定できたら、そのファイル内で怪しい箇所(特にPHPタグの前後)を探したり、可能であれば作者に問い合わせたりといった次のステップに進むことができます。

まとめ

サイトマップで「XML declaration allowed only at the start of the document」というエラーが表示されるのは、XML宣言の前に予期しない文字(空白、改行、PHPの出力など)が出力されてしまうことが原因です。この問題の多くは、`functions.php` や他のPHPファイルの終了タグ ?> の後の余分な空白・改行によって引き起こされます。

最も確実な対処法は、ファイルの末尾がPHPコードで終わる場合に**PHP終了タグ ?> を省略する**ことです。これにより、終了タグ後に何も出力されないことが保証されます。

もし終了タグの省略や空白・改行の削除で解決しない場合は、プラグインやテーマ自体が原因である可能性があるため、それらを一つずつ無効化して原因箇所を特定する切り分け作業が有効です。

このエラーはWordPressでは比較的よく発生するものですが、原因と対処法を理解しておけば、落ち着いて対応することができます。この記事が、あなたのサイトマップエラー解決の一助となれば幸いです。

RU DESIGN
AUTHOR

RU DESIGN

個人でWeb制作をしています。一般からナイト系まで幅広く対応し、実践的なノウハウや自作ツールをこのブログで公開中。制作のご相談もお気軽にどうぞ。

この記事をシェア: