情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

ウェブマスターツール「サーバーエラーが増えています」対策メモ(500 Internal Server Error・WordPress)

PHP (25) WordPress (80) ウェブマスターツール (4)

ウェブマスターツールからメールが届き、クロールエラーが多発していることが分かりました。この対策手順(原因を探し、対策を考えて提供するまでのプロセス)をメモしておきます。

メールの内容(エラー内容を確認する)

ウェブマスターツールから届いたメールの内容は次の通りです。

[ウェブマスター ツール] 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になりました。これで、今後ウェブマスターツールでのエラー増加も止まるのではないかと思います。

コメント(0)

新しいコメントを投稿