
500 Internal Server Errorとは
500 Internal Server Error(以下、500)は、サーバー本体がリクエストの処理中に予期しないエラーを起こし、応答を返せなかった状態を示すHTTPステータスコードです。サーバーエラー(5xx番台)に分類され、原因はサーバー側のアプリケーションや設定にあります。
500が返される仕組み
ブラウザからのリクエストは、CDN・リバースプロキシ・ロードバランサーなどの中継機器を経由してWebサーバー本体に届きます。サーバー本体までリクエストが到達したうえで、処理の途中に異常が起きた状態が500です。エラーの原因はサーバー本体にあり、中継経路の障害で返る502や、一時的な過負荷・メンテナンスで返る503とは原因の所在が異なります。時間の経過では解消せず、原因そのものを取り除く必要がある点も502・503との違いです。
(5xxの位置づけ:500=サーバー本体の処理異常/502=中継と上流間の通信障害/503=一時的な利用不可/504=中継から上流への応答タイムアウト)
500エラーが発生する主な原因
500エラーはサーバー側の問題で発生します。代表的な原因は以下の通りです。
アプリケーションのプログラムエラー
PHPやCGIなどのスクリプト内で例外が発生したり、シンタックスエラーが残っていると500を返します。エラーメッセージや例外トレースはサーバーのエラーログ(Apacheのerror_log、Nginxのerror.log、PHPのerror_log等)に記録されます。
サーバー設定ファイル(.htaccess等)の記述ミス
Apacheの.htaccessに書式違反のディレクティブを記述したり、有効でないモジュール指定を含めると500が発生します。設定変更直後に500が出始めた場合は、最後の編集差分を確認します。
ファイル・ディレクトリのパーミッション設定ミス
ファイル/ディレクトリの実行権限・読み込み権限が不足していると、Webサーバーがアクセスできずに500を返します。
メモリ不足・実行時間のタイムアウト
PHPでmemory_limitを超えるメモリを消費したり、max_execution_timeを超える処理時間がかかると、PHPが処理を打ち切って500を返します。php.iniの値や、共用サーバーでの上限値を確認します。
PHPバージョン非互換・ライブラリ依存の問題
サーバーのPHPバージョンを変更した直後に500が出る場合、互換性のない関数・記法が原因です。WordPressサイトでは、テーマやプラグインがサポート外のPHPバージョンで動作しているケースが該当します。
WAF・セキュリティモジュールによるリクエスト拒否
ModSecurity等のWAFが特定パターンのリクエストを拒否し、500を返すケースがあります。エックスサーバーやロリポップの共用サーバーでは、サーバー側のセキュリティ機能が誤検知することがあります。
訪問者として500エラーに遭遇した場合の対処法
他社サイトの閲覧中に500が表示された場合、訪問者として試せることは次の通りです。500はサイト側で原因を解消しないと直らないため、訪問者側でできることは限られます。
- ブラウザを更新(リロード)して再度アクセスする
- ブラウザのキャッシュとCookieをクリアして再アクセスする
- 別のブラウザや別のネットワーク(モバイル回線等)から開く
- 急ぎの場合はサイト運営者に問い合わせる
これらで表示されないときは、サイト側の復旧を待つことになります。
サイト運営者向けの500エラー対処法
自サイトで500エラーが発生した場合、サーバー側のログ確認から原因を特定します。
サーバーのエラーログを最初に確認する
500エラーの原因解消は、サーバーのエラーログ確認から始めます。代表的なログ参照場所は以下の通りです。
- Apacheの場合:/var/log/apache2/error.log または /var/log/httpd/error_log
- Nginxの場合:/var/log/nginx/error.log
- PHPの場合:php.iniのerror_logで指定したファイル(共用サーバーは管理画面で確認)
- WordPressの場合:wp-config.phpにdefine(WP_DEBUG, true);define(WP_DEBUG_LOG, true);を設定してwp-content/debug.logを確認
ログのタイムスタンプと500発生時刻を突き合わせ、エラーメッセージや例外トレースから直接の原因を特定します。
.htaccessの記述ミスをチェックする
直前に.htaccessを編集していた場合、編集差分を確認します。問題箇所を切り分けるため、.htaccessを一時的にリネーム(例: .htaccess_bak)してアクセスできるかを確認すると、.htaccessが原因かどうかが切り分けられます。
ファイル・ディレクトリのパーミッションを確認する
新しくアップロードしたファイルや、サーバー移行直後の場合、パーミッション設定が原因のことがあります。一般的な推奨値は以下の通りです。
| 対象 | 推奨パーミッション | 備考 |
|---|---|---|
| ディレクトリ | 755 | 所有者は読み書き実行、それ以外は読み実行のみ |
| HTMLファイル | 644 | 所有者は読み書き、それ以外は読みのみ |
| PHPファイル | 644 | 所有者は読み書き、それ以外は読みのみ |
| CGIスクリプト | 755 | 実行権限が必要 |
| .htaccess | 644 | 所有者は読み書き、それ以外は読みのみ |
PHPの設定とライブラリ依存を確認する
memory_limitの上限超過や、max_execution_timeのタイムアウトが疑われる場合は、php.iniまたは.htaccessで値を一時的に上げ、再現性を確認します。共用サーバーでの変更先は、管理画面の「PHP設定」です。PHPバージョン変更後に発生した500では、テーマ・プラグイン側の互換性を確認します。
WordPressの場合のチェックポイント
WordPressサイトで500エラーが発生した場合、原因の切り分け順序は以下の通りです。
- wp-content/pluginsをリネームして全プラグインを一括無効化し、復旧するか確認する
- テーマをデフォルトテーマ(Twenty Twenty-Four等)に切り替えて確認する
- .htaccessを一時退避してパーマリンク設定を再保存する
- PHPメモリ上限を一時的に引き上げる
- WordPress本体のコアファイルを再アップロードする
プラグイン無効化で復旧した場合は、1つずつ有効化して原因プラグインを特定します。
500エラーに関するよくある誤解と注意点
500エラーに関して、SEO担当者・サイト運営者が混同しやすいポイントを整理します。
500・502・503の混同
画面上は同じ「サーバーエラー」と見えても、原因の所在が異なります。500はサーバー内部のアプリケーション例外、502は中継経路の問題、503は一時的な利用不可。原因の所在に応じて対処手順が変わるため、サーバーログで具体的なステータスコードを確認してから対処しましょう。
「とりあえずブラウザを更新」では解消しないことが多い
500はサーバー側の原因解消が必要なケースが多いため、訪問者がブラウザを更新しても解消しないことが大半です。一時的な処理エラー(タイムアウト等)で更新により解消するケースもありますが、再現性がある場合はサイト運営者の対応待ちです。
サイバー攻撃と疑う前にログを確認
500がサイバー攻撃の兆候として表示されるケースは限定的で、多くは内部のプログラムエラーや設定ミスが原因です。WAFのログで攻撃トラフィックが検知されていない場合、エラーログでアプリケーション例外を確認するのが効率的です。
共用サーバーでは「PHPバージョン」の自動更新に注意
共用サーバー(エックスサーバー、ロリポップ等)では、PHPバージョンの自動更新やサポート終了に伴って、互換性のないテーマ・プラグインが原因で500が出始めるケースがあります。サーバー側のお知らせとPHPバージョン設定を定期的に確認しましょう。
5xxエラーがSEOに与える影響
500を含む5xxエラーは、解消が長引くほどSEOに響きます。500は原因を取り除くまで復旧しない性質があるため、復旧の長期化に特に注意します。
クロール時に500が返るとインデックス更新が遅れる
Googlebotがクロールした瞬間にURLが500を返すと、その時点ではコンテンツを取得できず、インデックスへの反映が遅れます。短時間で復旧すれば影響は限定的ですが、原因が残ったまま500が続くと影響は広がります。
500が頻発するとサイト全体のクロール頻度が下がる
Googleは、繰り返し5xxを返すサイトに対してクロール頻度を抑えます。サーバーへの負荷を避けるための動作で、結果としてサイト全体でインデックス更新が遅くなります。
サーバーエラー(5xx)と5xxとして扱われるネットワークエラーとDNSエラーは、Googleのクロールに対してマイナスの影響を及ぼします。
https://developers.google.com/search/docs/crawling-indexing/http-network-errors?hl=ja
長期化したURLはインデックスから外れることがある
500が長期間続いたURLは、最終的にインデックスから除外される場合があります。500は時間では直らないため、原因を特定して復旧させ、復旧後はSearch Consoleで再クロールを依頼します。
500エラーが発生しているURLを確認する方法
自サイトで500が発生しているURLは、次の方法で確認します。500はSearch Console上では他の5xxとまとめて表示されるため、最終的なコード特定にはサーバーログを併用します。
Search Consoleの「ページ」レポートで5xxを洗い出す
「ページ」レポートでは、検出された5xxが「サーバーエラー(5xx)」としてまとまって表示されます。確認の手順は、左メニュー「ページ」→「ページがインデックスに登録されなかった理由」→「サーバーエラー(5xx)」と開き、影響URLを把握する流れです。このレポートは500・502・503・504を区別せず統合表示するため、500かどうかはサーバーのアクセスログ・エラーログで確定させます。
URL検査ツールで個別URLの現在のコードを見る
特定URLの最新状態は、URL検査ツールのライブテストで確認します。実行後、「その他の情報」タブのHTTPレスポンスに、現時点のステータスコードが表示されます。
kunugi SEO Checkerで手早くコードを確認する
弊社のChrome拡張機能「kunugi SEO Checker」のパネルデータタブには、表示中ページのステータスコード(200・500・503等)が出るため、ブラウジングしながら短時間で確認できます。ここで表示されるのは自分の端末・ネットワークから見たコードである点に注意してください。
← 記事一覧へ戻る