とある技術者の備忘録的情報

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サイトマップを確認しようと思い、下記の箇所をクリックした。

Yoast SEOでXMLサイトマップを表示させようとする

そうしたところ、下記のように、冒頭で伝えたエラーメッセージが表示されたのだ。

sitemap.xmlのエラー

解決方法

このエラーを解決しようと、検索したところ、

xmlファイルは、1行目に空白があってはダメで、1行目は必ず<?xml から始まるべき。

それが、

?>

<?php

の間に空白があると、xmlファイルの生成時にその空白が残ってしまってエラーが起きるというもの。

php終了タグと開始タグの間に空白があるとダメ

このエラーが出たときには、

・functions.phpの終わりに空白がないか

・functions.phpに?>と<?phpとの間に空白がないか

をチェックし、削除しましょう。

というもの。

functions.phpの終わりに空白がないかチェック

WordPressのメニューで「外観」->「テーマファイルエディター」で、「テーマのための関数(functions.php)」を選択。

そのとき、下記のように ?> でphpを終えたあと、無意味な空白行がないか、チェックします。

もしあるのであれば、削除します。

fuunctions.phpの終わりに空行がないか

下記のように一番最後が ?> になるようにする。

functions.phpで?>でphpコード閉じたあとに空白・空行がないようにする。

functions.phpで?> <?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でそれを読み込むようにする。

これで無事に解決することができた。

この問題にハマったとき、ほとんど情報が出てこなく、とても苦労しました。

この記事が同じ問題にあたった誰かのためになれば幸いです。

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

スポンサードリンク