RSS用のXMLでエラーが発生する原因と解決方法の1つ
私のブログはMovable Typeで作成しているのだが、いつの頃からか、RSS用のXMLでエラーが発生していることに気づいた。
例えば、Google Chrome、Internet ExplorerでMovable Typeで自動生成されたRSS用のXMLファイル(atmo.xml)を開くと、以下のようなエラーメッセージが表示されてしまっていた。
Google Chromeでのエラーメッセージ
This page contains the following errors:
error on line 111 at column 348: EntityRef: expecting ';'
Below is a rendering of the page up to the first error.
Internet Explorerでのエラーメッセージ
Internet Explorer ではこのフィードを表示できません
このフィードにはコード上のエラーが含まれています。
前のページに戻る。
詳細情報
セミコロン ( ; ) が必要です。
行: 111 文字: 348
Internet Explorerのエラーメッセージ画面に表示されている「詳細情報」をクリックすると、エラーとなっている箇所が表示された。
最近書いたブログ記事本文内に個別に貼り付けていたアフィリエイト用の広告バナーのhtmlソースのどこかでエラーとなっているようだったので、ブログ記事本文内から個別のアフィリエイト用の広告バナーのhtmlソースを削除してみた。
すると、XMLファイルのエラーの箇所が変わり、別の記事のアフィリエイト用の広告バナーのhtmlソースがエラーとして指摘された。
htmlソースを眺めていると、W3C Validator的な問題(W3C文法的な問題)を解決することで、XML構文の問題も解決できるのかも、と考え、W3Cのバリデートチェックでよく引っかかるパターンを修正してみることにした。
広告バナーのhtmlソースの中に、URLの記述があり、URLの中にアンパサンド(アンドの記号)が
&
の1文字で表記されていたので、文字実体参照としての5文字での表記
&
に変更してみた。
(「&」と「&」は実際には全角文字ではなく半角文字となることに注意。)
これでXMLでのエラーが解消された。
エラーが解消されたのはいいけれど、今後、広告バナーを記事本文内に貼る時には、文字実体参照を気にしないといけないのはとても面倒だなぁ...。
かと言って、Movable Typeのプログラムを改修するような気力は全くない。
記事本文内に広告を設置したい時は、諦めてアンパサンドの箇所を手作業で修正するか、なるべく広告は設置しない...ということにしようかなぁ。
(2017年10月1日追記)
にほんブログ村にping送信をしてもにほんブログ村の「更新情報」に情報が反映されないのでおかしいと思って確認してみると、今度はYouTubeの埋め込みコードでXMLエラーが発生していたことが分かった。
IE11でRSSのページ(atom.xml)を開くと「無効な文字が含まれた名前です。」というエラーが出ていた。
YouTubeの埋め込みタグのどこを修正すれば解決するのかはよく分からなかったのと、たとえ修正方法が分かっても、今後、またこのエラーに付き合うのが面倒になってしまったので、atom.xmlにはブログ本文は出力しないようにした。
Movable Typeのテンプレート編集画面でatom.xml内から
<$mt:EntryBody escape="xml"$>
というタグを削除することで、本文は出力されなくなり、エラーは解消された。
本文を出力しないことでデメリットはあるのだろうけれど、エラーと付き合うことに疲れた。
もう私の個人ブログであるから、これでエラーから逃げておこう...。