sitemap.xmlを開いたらエラーが出る
サイトマップ、sitempa.xmlを確認しようとして、https://xxxxx.com/sitemap.xmlを開いたとき、次のようなエラーが出て困ったことはないでしょうか?
This page contains the following errors:
error on line 2 at column 6: XML declaration allowed only at the start of the document
Below is a rendering of the page up to the first error.
筆者は、このエラーに直面し、検索しても有意義な情報がほとんど出てこなく、とても困りました。
それゆえ、同じような問題に直面している人へ、少しでも参考になればと、この記事を書くことにしました。
よければ参考ください。
筆者が直面したときの状況
プラグインにYoast SEOを使用しているが、XMLサイトマップを確認しようと思い、下記の箇所をクリックした。
そうしたところ、下記のように、冒頭で伝えたエラーメッセージが表示されたのだ。
解決方法
このエラーを解決しようと、検索したところ、
xmlファイルは、1行目に空白があってはダメで、1行目は必ず<?xml から始まるべき。
それが、
?>
<?php
の間に空白があると、xmlファイルの生成時にその空白が残ってしまってエラーが起きるというもの。
php終了タグと開始タグの間に空白があるとダメ
このエラーが出たときには、
・functions.phpの終わりに空白がないか
・functions.phpに?>と<?phpとの間に空白がないか
をチェックし、削除しましょう。
というもの。
functions.phpの終わりに空白がないかチェック
WordPressのメニューで「外観」->「テーマファイルエディター」で、「テーマのための関数(functions.php)」を選択。
そのとき、下記のように ?> でphpを終えたあと、無意味な空白行がないか、チェックします。
もしあるのであれば、削除します。
下記のように一番最後が ?> になるようにする。
functions.phpで?> <?phpの間に空白がないかチェック
次のように、?> と <?php の間に空白がある場合も、ダメという。
それでも解決しない
それでfunctions.phpをチェックしました。
だが、それらしい問題箇所はない・・・。
プラグインや何やらに、空白行があるとそれでもアウトらしい。
だが、筆者が直面したwordpressのテーマは、他社が開発した独自のテーマで、その保守管理を任されているもの。
もちろん、開発時にはかかわっておらず、完成後にクライアントから委任されたもので、都度プログラムを解読しながら保守を実施しているもの。
すでに、どこに空白行が紛れ込んでいるのか、探し出すのは困難な状況にある。
それでさらに何か情報はないかと調べたところ、見つけたのが、次の章で紹介する、fix phpである。
修正phpで対処
ようやく見つけたのが、xmlを表示する前に空白行を削除してくれる修正phpを利用するというもの。
これは、rssなど、空白行があると機能しないものにも適用される。
やり方は簡単で、下記から「wejnswpwhitespacefix.php」ファイルを入手し、WordPress直下に置く。
https://github.com/UCSCLibrary/deadnews/blob/master/wejnswpwhitespacefix.php
WordPressのルートディレクトリ
┣ wp-admin
┣ wp-content
┣ wp-includes
┣ index.php
┣ wejnswpwhitespacefix.php
┣ wp-activate.php
┣ …..
┣ wp-config.php
┣ …..
といったようにです。
そして、以下のようにWordPress直下のindex.phpで同ファイルを読み込むようにします。
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define( 'WP_USE_THEMES', true );
/** xmlに残る空白行を削除するファイルのよみ読み込み */
require __DIR__ . 'wejnswpwhitespacefix.php';
/** Loads the WordPress Enviroment and Template */
require __DIR__ . '/wp-blog-header.php';
require __DIR__ . '/wejnswpwhitespacefix.php';
がindex.phpに追加した箇所です。
修正したindex.phpとwejnswpwhitespacefix.phpをサーバーにアップして、改めてsitemap.xmlを開いてみると、下記のように無事に表示されました。
まとめ
サイトマップをチェックしようと、sitemap.xmlを開いたところ、
This page contains the following errors:
error on line 2 at column 6: XML declaration allowed only at the start of the document
Below is a rendering of the page up to the first error.
というエラーが出た。
調べたところ、functions.phpの ?> と <?php の間に空白行があるとこのエラーが出るとのことだが、それでも解決しなかった。
それで、xmlファイルの空白行を削除するプログラム「wejnswpwhitespacefix.php」を入手し、WordPress直下に置き、index.phpでそれを読み込むようにする。
これで無事に解決することができた。
この問題にハマったとき、ほとんど情報が出てこなく、とても苦労しました。
この記事が同じ問題にあたった誰かのためになれば幸いです。
この記事へのコメントはありません。