Movable Typeでサイトマップ用XMLファイルを生成すると500 Internal Server Errorとなる問題を解決した

昨年の秋頃から、個人的に利用しているMovable Typeの500 Internal Server Errorには悩まされており、昨年、いくつかの対策を行ったところ、一定期間は効果があったように見えたが、その後、記事公開時または記事更新時には100%の発生確率で500 Internal Server Errorが発生するようになってしまった。

root権限を有していないレンタルサーバであるから原因特定の調査が困難であるとか、プライベートな時間に難しいことを考えたくない、といった言い訳や、今年度末頃に実施されるらしいレンタルサーバ(XREA)のスペック増強によって自然解決するかもしれない、といった期待もあったし、そもそも記事の公開・更新には成功していたので、500 Internal Server Errorが発生する問題については放置していた。

それが、昨日、偶然ではあるが、ようやく原因が分かり、100%の確率で発生していた500 Internal Server Errorが一切発生しなくなったので、以下にメモとして記載しておく。

昨日、ブログを更新していると、sitemap.xmlの作成に失敗したといった趣旨のエラーメッセージが画面に表示された。

sitemap.xmlというファイルは、私がMovable Typeのマニュアルを参考にして過去に組み込んだもので、Google検索ロボットに当サイトのURL一覧を教えるためのXMLファイルである。

ここでピンときた。

長年使用してきたMovable Typeで、ある日以降発生するようになってしまった500 Internal Server Errorは、サーバのスペック不足が怪しい可能性がある。
sitemap.xmlには、当ブログのURL全てを記載する仕様としたから、URLの数が増えれば増えるほど、sitemap.xmlの作成に要する時間は長くなると考えられる。
sitemap.xmlを作成するためのCGIプログラム実行時間が長くなると、レンタルサーバの管理会社が定義したCGI実行可能時間を超過し、実行可能時間内にCGIプログラム処理が終わらないことから、500 Internal Server Errorが発生する...かもしれない。

「デザイン」>「テンプレート」からsitemap.xmlの中身を見ると、「ブログ」のURL一覧の下に「ウェブページ」のURL一覧が掲載されるような仕様になっていた。

試しに、「ウェブページ」のURL一覧を生成する記述を削除してみる。
記事の公開・更新を試してみると、500 Internal Server Errorが発生しなくなった。

ウェブページの記事数分のURL一覧を作成しなくてよくなった分、sitemap.xmlの作成に要する時間が短縮され、レンタルサーバのCGI実行可能時間内でCGIプログラムの実行処理が完了できるようになったのであろう...と推測した。

参考までに、当サイトのブログとウェブページの記事数は2017年2月5日現在、以下となる。
・ブログの記事数:3177件
・ウェブページの記事数:698件

ウェブページの記事数は、記事数全体の約18%を占めていたので、ウェブページの記事全てをサイトマップ用ファイルのURL一覧から除外するだけで、サイトマップ用ファイルの生成処理に要する時間は単純に約18%は短縮される。
この効果は大きかったのであろう。

sitemap.xmlからウェブページの記事全てを削除したが、このままにはしておけない。
ウェブページのURL一覧もGoogleの検索ロボットには伝えたいため、「デザイン」>「テンプレート」でsitemap2.xmlを作成し、そこでウェブページのURL一覧を作成するようにした。
つまり、もともと存在したsitemap.xmlという1つのファイルを2つに分割したことになる。
sitemap2.xmlについては、Google Search Consoleの「クロール」>「サイトマップ」で追加登録した。こうしないと、Googleの検索ロボットがsitemap2.xmlについて認識できないからだ。

これで大丈夫だ...と思ったらそうはならなかった。
また、500 Internal Server Errorが発生してしまった。
記事の公開・更新時に、sitemap.xmlとsitemap2.xmlの両方に更新がかかるようで、これではファイルを分割していても意味がないようであった。

そこで、サイトマップ用XMLファイルの生成タイミングを変更することにした。
「デザイン」>「テンプレート」でsitemap.xmlとsitemap2.xmlのそれぞれの「テンプレートの設定」>「公開」に設定されていた「スタティック」を「手動」に変更した。
これで、記事の公開・更新時に、sitemap.xmlとsitemap2.xmlの両ファイルの更新が行われることはない。

sitemap.xmlとsitemap2.xmlの中身を更新したくなったら、今後は手動で更新すればよい。
手動で更新したい場合、それぞれのテンプレート編集画面下部にあるボタン「保存と再構築」から簡単に行える。

ブログを更新した時にはsitemap.xmlを手動更新し、ウェブページを更新した時にはsitemap2.xmlを手動更新する、という運用にした。

これまで、記事を公開または更新するたびに500 Internal Server Errorが発生していて、毎回、イライラとしていたがそのイライラする思いがなくなったので、とても嬉しかった。

今年度末にレンタルサーバ(XREA)のスペック増強が行われると、手動更新を自動更新に戻しても500 Internal Server Errorは発生しなくなるかもしれないので、スペック増強が行われた後に、自動更新に戻せるかどうかは試してみたいと思う。
(もう手動更新でもそこまで不便ではないので、このままでもいいかもしれないけれど。)

《関連リンク》
Movable Typeでアイテム一覧ページ等で500 Internal Server Errorが出る問題を解決した方法
Movable Typeでの記事公開時に500エラーが頻発するのでCommunity.packアドオンを削除した
Movable Typeで記事を再構築すると500 Internal Server Errorが発生する問題を解決した

前へ

綾瀬駅から徒歩9分の銭湯・玉の湯に入った感想

次へ

東芝Dynabookの上に座る猫-ゆきお