【当サイトはアフィリエイト広告を利用しています】

月別アーカイブページが表示されない→PHP5.4のせい?

月別アーカイブが表示されなくなっちゃった

Disappearing Money
Disappearing Money / Out.of.Focus

んー、なんとも難しいというか、「こんな事があって、原因はコレで、こうしたら解決しました!」みたいな完結記事が書ければベストなんですけど、今もよく分からないので困ってます。

記事タイトルにも書いた通り、「月別アーカイブが表示されなくなっちゃった」という現象で悩みまくりました。

同様の現象で悩んでる方、あるいは解決された方がいないかをGoogleで散々検索し、探ったのですが、全くと言っていいほど記事や解説が見つかりませんでした。私だけが苦しんだのだろうか。

もしもどこかで同じ現象により悩んでらっしゃる方がいたら(いると思うんだけどなぁ…)、と思って今回書いてみます。

発端はバックアップ用プラグインのエラー

事の発端は、WordPressのデータをバックアップするプラグイン「BackWPup」のおかしな挙動でした。

the city of "Why" by Venturist
BackWPupを3.0.Xに上げたらバックアップがおかしくなってた

WordPressのファイルやデータベースをバックアップするプラグイン「BackWPup」。先日バージョンアップして以降、いろいろとおかしな現象が発生しています。

詳細は上の記事で書いた通り。概要を書くと、

【状況】
◆BackWPupのバージョンを「3.0.1」にアップデートしたところ、Dropboxに保存失敗していることが判明。
◆調べるとサーバーへの保存も失敗していた。
◆バージョン「3.0.3」にしても保存できていない。
【原因】
◆BackWPupのバージョンが「3.0.X」以降になって仕様が変わり、プラグイン内で「mysqli」という機能を使うようになった。
◆その「mysqli」は、私が利用しているレンタルサーバ(=ロリポップ)は実装していなかった。
◆この現象が発覚した直後、ロリポップがPHPのバージョン「5.4」に対応。PHP5.4であればロリポップでも「mysqli」に対応していることが判明。
【対処】
バックアップを成功させるためには、以下のどちらかにするしかない。
★プランA:PHPはそのまま(5.3)で、プラグインBackWPupのバージョンを「成功実績のある」古いバージョン(2.1.17)に戻す。
★プランB:ロリポップのPHPを5.4に上げ、プラグインBackWPupのバージョンも最新にする。
→他に影響を及ぼすことが怖かったので、プランAを選択。プラグインを古いバージョンに戻した

というのが、上の記事を書いた3月初旬時点での状況でした。

ここから先は、記事を書いた以降に実施した内容と、その結果としておかしくなった状況になります。時系列で書いていきます。

旧バージョンでも保存エラー発生

【状況】
◆BackWPupの旧バージョン(2.1.17)で、処理ログではエラーが発生していないのに、実際のバックアップファイルが存在しない → やはり処理失敗している。
【改善内容】
◆バックアップ設定を見直し、「バックアップ対象の絞り込み」と「バックアップジョブの細分化(データベースとファイルのバックアップ実行を別々にする、など)を実施。

今まで成功実績があったはずの旧バージョンでもおかしくなってしまいました。バージョンの戻し方をミスったのかもしれません。

設定を見直してしばらく様子を見ましたが、エラーが発生したり、ログ上は成功でもファイルがなかったりと、処理失敗が続きました。

ロリポップのPHPを5.4に、プラグインを最新にアップ

【改善内容】
◆ロリポップのPHPバージョンを「5.4」に変更。
◆BackWPupを最新バージョン(実施当時で確か3.0.4)にアップデート。

旧バージョンでも失敗するなら仕方ない。他のプラグインや処理への悪影響が気になりましたが、バックアップを取らないわけにもいかない。

他のプラグインに変えることも検討しましたが、最終的にはPHPとBackWPupのバージョンを上げることにしました。

screenshot_201304_018

↑まずロリポップでPHPのバージョンアップ。ユーザー専用ページで「WEBツール」→「PHP設定」。

screenshot_201304_020

↑ロリポップにある全てのPHPバージョンを5.3から5.4に変更。

さらにWordPressの管理画面でプラグインBackWPupのバージョンを最新版にアップデート。これで完了です。

旧バージョンでタイムアウトエラーを防止するためにやっていた「処理時間を延長するためのソース修正」が、最新バージョンのBackWPupでは出来なくなった(=カスタマイズ対象のファイルが見当たらなくなった)ので、バックアップジョブを更に細分化し、ファイルサイズを極力小さくするよう努めました。

これらの結果、バックアップがようやく成功するようになりました

ここまでは良かったんです。しかし、懸念していた悪影響が出てしまいました。

月別アーカイブが消えた

【状況】
◆ウェブマスターツールで「サーバーエラー」が発生。
◆調べるとブログの「月別アーカイブページ」が全てエラーで表示されなくなってた。
【改善内容】
◆フッターに表示していた月別アーカイブのウィジェットを停止。

screenshot_201304_021

↑今までエラーなど1つもなかった「サーバーエラー」が、ある日いきなり発生してました。(ウェブマスターツールの「健全性」→「クロールエラー」で確認できます)

screenshot_201304_024

↑見るとエラーになってるURLは全て月別アーカイブのページ

screenshot_201304_023

↑月別アーカイブのリンクは、当ブログの一番下、フッター欄の右端に表示しています。例えば2013年4月のリンクをクリックすると、2013年4月にアップした記事が一覧表示されるようにしてます。

ところがウェブマスターツールでエラーになってるのを知り、月別アーカイブのリンクをクリックしてみると、確かにページが表示されない。「500エラー」になってました。

なぜ突然エラーになり始めたのかが最初は全く分からず、PHPコードを見直したり、書き直したりしてみたけど直らない。仕方ないのでフッターの月別アーカイブを停止。表示させないようにしました。

ところが。それで済むわけもなく。

サーバーエラーは増え続け、更に…

【状況】
◆非表示にした後もサーバーエラーは増え続けた。
◆時を同じくしてGoogle検索からのアクセスが下降を始めた。
◆これまた時を同じくしてアドセンスの単価も急降下。

screenshot_201304_022

↑ウィジェットを非表示にした後も、エラーは減るどころか増え続けていきました。月別アーカイブを消してもクロールには記録が残り続けているせいなのか、ロボットから見ると「ページがどこにもナイじゃないか」という状況のままだと判断されたってことなんでしょうね。

ちなみに、「カテゴリー」や「タグ」など、月別と同じプログラムコードの作り方をしていた他のアーカイブページは正常に表示されてました。月別だけがエラーになっている

日に日にエラーが増え続ける。どうすれば直るのか分からない。

プログラムを作り直し、ローカル環境で再テストをすると成功するのに、Webにアップするとエラーになる。これがパニックに拍車をかけました。後で振り返れば、この時点で気付くべきだったんですけど

更に哀しいことに、エラーが増えていくのと同じ頃から、Google検索による当ブログへのアクセス数が日を追うごとに減っていきました。またアドセンス広告の単価も急降下。クリック数は以前と同じ水準なのに単価がすごく低い。

検索アクセスとアドセンスの件が今回のサーバーエラーと関係あるのか、それとも全然関係ない別の話なのかは現在も分かりません。ただ、「ウェブマスターツール」「検索」「アドセンス」は全てGoogleのものなので、もしかして? と。

アドセンスの単価については他にも要因がありそうです、が今回は本筋ではないので割愛。

ようやく月別アーカイブが表示された

【改善内容】
◆ロリポップのPHPバージョンを「5.3」に戻した。
【状況】
◆月別アーカイブページが表示されるようになった。
◆ウェブマスターツールのサーバーエラーが減り始めた。
◆Googleからの検索アクセス、アドセンス単価とも多少戻ってきた。

「ローカルでは成功するのにWebではエラー」
「エラーが発生し始めたのはいつ頃からだっけ」

と考えていくうちに、「ロリポップのPHPを上げたせいか?」と、ようやく気付きました。

「5.4」に上げていたPHPのバージョンを「5.3」に戻し、フッターのウィジェットを再設定。

screenshot_201304_025

↑月別ページが正常に表示されるようになりました(赤枠で囲っているのは月別アーカイブを表す「パンくずリスト」です)。

ちなみにローカル環境のPHPバージョンは「5.3.8」でした。だからエラーにならなかったんだ。もっと早く気付けよって話。

screenshot_201304_026

↑ウェブマスターツールの最新状況は上のような感じです。

PHPを5.3に戻して以降、いったんエラーが減少傾向になったのですが、今朝確認したら再びエラーが増えてます(笑) なんでやねん。もう何も悪いことしてないはずなんだけどなぁ。

アクセス数とアドセンスに関しては、前述した通り「直接の関連性があったのか」は分かりません。ただ、最近は少しずつ改善傾向にあります。

ということで「ふりだし」に戻った

ひとまず月別アーカイブが表示されるようになったので、今後はサーバーエラーも減っていくんじゃないかと期待してます。今朝増えてたのはガックリきたけど。

これでバンザーイってわけではなく、単に「PHPが5.3に戻った」→「プラグインBackWPupのエラーが発生する状況に戻った」ということ。データベースのバックアップは成功してるみたいですが、やっぱりファイルのバックアップは失敗してるっぽい。今後どうするか対策を練らねば。

PHPコードのバグなのかと思って調べていた過程で、「query_posts」というPHP関数がエラーの原因ではないかという説を唱えているページも目にしました。推奨されていない関数で、他の関数を使うべきだ、と。

しかし、その意見を否定する意見もあり、推奨ではないにしろ「query_posts」を使っても現状は問題ないとの解説もありました。

現に私のブログで、月別以外のアーカイブページ(カテゴリーやタグ)は問題なく表示されてましたので、「query_posts」がエラーの直接的な原因ではない、と私は判断しました。

ということで結論は「バージョンの兼ね合いって難しいですねー」というオハナシでした。

お持ちのWordPressブログで月別アーカイブページが500エラーになってるロリポップな方がいらっしゃったら、PHPのバージョンを疑ってみるといいかもしれません。

-WordPress
-