スポンサーリンク
ウェブマスターツールからメールが届き、クロールエラーが多発していることが分かりました。この対策手順(原因を探し、対策を考えて提供するまでのプロセス)をメモしておきます。
スポンサーリンク
メールの内容(エラー内容を確認する)
ウェブマスターツールから届いたメールの内容は次の通りです。
[ウェブマスター ツール] http://did2memo.net/: サーバー エラーが増えています
アクセスできない URL の数が大幅に増えています。サーバーがリクエストを処理する際に内部エラーが発生したか、ビジー状態だった可能性があります。
推奨される対処方法
- ウェブマスター ツールの [クロール エラー] ページを確認します。
- スクリプトとスクリプトの権限を確認します。
- サイトのサーバーのログ ファイルで、問題が発生した可能性のあるスクリプトまたはページについて調べます。
- サーバーへの負荷の問題に対処することを検討してください。
クロールエラーを確認(問題のあるページを特定する)
ウェブマスターツールの「健全性>クロールエラー」を見ると、確かに鯖ーエラーガ記録されており、下の一覧表に「どのURLで発生したか(URL)」と「レスポンスコード」が一覧表になっていました。
ここから、WordPressで言うところのattachmentページ(添付ファイルページ)で問題が発生しており、レスポンスコードが500(Internal Server Error)であることが特定できました。
ページを確認
実際にその問題発生中のページに飛んでみると、不完全ではあるものの、ページが表示されました。
ChromeのDeveloper Toolsで確認すると、たしかにレスポンスコードは500 Internal Server Errorになっています。このエラーはPHPに問題があったような場合であり、普段このエラーが発生した場合は、エラーページが表示されたり真っ白なページが表示されるのが普通で、中途半端にページが表示されるのは珍しいなぁと思いました。
ログを確認
500の正体を知るために、問題が発生しているPHPのファイル名と行番号をログから確認することにしました。
自分で一度エラーが発生しているページにアクセスし、アクセスログ(/var/log/httpd/error_log)の中から自分のIPアドレスを頼りに該当分を探し出しました。
[error] [client xxx.xxx.xxx.xxx] PHP Notice: Undefined variable: site_description in /.../wp/wp-content/themes/.../header.php on line 26
[error] [client xxx.xxx.xxx.xxx] PHP Notice: Undefined index: page in /.../wp-content/plugins/batch-cat/admin.php on line 147
[error] [client xxx.xxx.xxx.xxx] PHP Notice: Undefined offset: 0 in /.../wp-content/themes/elements-of-seo_1.4/functions.php on line 113
[error] [client xxx.xxx.xxx.xxx] PHP Notice: Trying to get property of non-object in /.../wp-content/themes/elements-of-seo_1.4/functions.php on line 115
[error] [client xxx.xxx.xxx.xxx] PHP Catchable fatal error: Object of class WP_Error could not be converted to string in /var/www/did2memo.net/wp/wp-content/themes/elements-of-seo_1.4/functions.php on line 115
重要なのは、最後の2行です。これが500の原因部分であるとわかりました(ここに「PHP Catchable fatal error」というものがあるのですが、この「Catchable」という部分が、500なのに中途半端に表示できたことと対応しているのかなぁ、と思います)
該当するPHPの行を確認
確認してみると、そのコードは、is_singleの条件分岐に囲まれていたのですが、なぜか添付ファイルページであるのに、そのブロックの中に突入していました。そして、個別ページを前提にしていたコードがエラーになってしまったようです。
原因
そこで確認してみると、is_singleは、個別投稿ページだけでなく、添付ファイルページであってもtrueを返すということがわかりました。
対策
添付ファイルページは「is_attachment() 」で確認することができると分かったため、「if ( is_single() )」だった部分を「if ( is_single() && !is_attachment() )」に置き換えることにしました。
成功
この結果、ページは正しく表示されるようになり、500だったレスポンスコードがちゃんと200になりました。これで、今後ウェブマスターツールでのエラー増加も止まるのではないかと思います。
スポンサーリンク
スポンサーリンク