「500 Internal Server Error」エラーは、なぜか決まって困ったタイミングで発生するもの。突然サイトが表示されなくなり、慌てて復旧方法を探すことになります。サイトがダウンしてしまうと、その瞬間から訪問者や顧客を失うことになります。ひいては、ブランドのイメージにも悪影響を与えます。
この記事では、「500 Internal Server Error」エラーについて詳しく解説します。原因や見え方、できるだけ早くサイトを復旧させる方法をいくつかご紹介していきます。
| エラーコード | HTTP Error 500 |
| エラーの種類 | サーバー内部エラー |
| エラーのバリエーション | 500 Internal Server Error HTTP 500 Internal Server Error HTTP 500 – Internal Server Error 500 Error HTTP Error 500 500 – Internal Server Error 500 Internal Server Error. Sorry something went wrong. 500. That’s an error. There was an error. Please try again later. That’s all we know. The website cannot display the page – HTTP 500. Is currently unable to handle this request. HTTP ERROR 500. |
| エラーの原因 | ブラウザキャッシュの問題 .htaccessファイルの破損とPHPのメモリ制限 サードパーティプラグインまたはテーマの問題 WordPressのファイルの破損 データベースサーバーの問題 |
「500 Internal Server Error」エラーとは
HTTPステータスコード「500」は、サーバーで予期しない問題が発生し、リクエストを正常に処理できなかったことを示す一般的なエラーメッセージです。サーバー側で何らかの問題が発生していることはわかっているものの、具体的な原因までは特定できない場合に、このエラーが表示されます。
サイトにアクセスすると、ブラウザからそのサイトがホストされているサーバーへリクエストが送信されます。サーバーはそのリクエストを受け取って処理し、要求されたリソース(PHP、HTML、CSSなど)をHTTPヘッダーとともにブラウザへ返します。
HTTPヘッダーには、HTTPステータスコードと呼ばれる情報も含まれています。これは、リクエストの処理状況を知らせるためのコードです。たとえば「200」は「正常に処理された」ことを意味し、「500」は何らかの問題が発生したことを意味します。
500番台のHTTPステータスコードには、「500」をはじめ、501、502、503、504など、さまざまな種類があり、それぞれ意味が異なります。
今回取り上げる「500 Internal Server Error」は、サーバーで予期しない状況が発生し、リクエストを処理できなかったことを意味します(RFC 7231、セクション6.6.1)。
「500 Internal Server Error」エラーのバリエーション

ウェブサーバーやオペレーティングシステム、ブラウザなどの違いによって、「500 Internal Server Error」の表示のされ方はさまざまです。とはいえ、どのメッセージも基本的には同じエラーを意味します。例えば、以下のようなバリエーションがあります。
- 500 Internal Server Error
- HTTP 500
- Internal Server Error
- HTTP 500 – Internal Server Error
- 500 Error
- 500 – Internal Server Error
- 500 Internal Server Error. Sorry something went wrong.
- 500. That’s an error. There was an error. Please try again later. That’s all we know.
- The website cannot display the page – HTTP 500.
- Is currently unable to handle this request. HTTP ERROR 500.
真っ白な画面上に、以下のようなメッセージが表示されることもあります。

サーバーに内部エラー、または機器設定エラーの発生により、リクエストが処理されませんでした。[email protected]よりサーバー管理者に連絡を取り、エラーが発生したこと、またエラーを引き起こしたと思われる操作について報告してください。サーバーエラーログにさらなる詳細が記録されている可能性があります
またFirefoxやSafariでは、ただの空白の画面が表示される場合もあります。

このエラーは有名サイトでも発生することがあり、例えば、Airbnbでは以下のような「500 Internal Server Error」エラーページが表示されます。

readmeでは以下のようなページが表示されます。

YouTubeでは、以下のようなエラーページが表示されます。

IIS 7.0 以降のバージョン(Windows)では、500エラーの原因をより詳しく解く示す追加のHTTPステータスコードが表示されます。
- 500.0─モジュールまたは ISAPI のエラーが発生しました。
- 500.11─ Web サーバーでアプリケーションがシャットダウンしています。
- 500.12─Web サーバーでアプリケーションが再起動のためビジー状態になっています。
- 500.13─ Web サーバーが非常にビジーです。
- 500.15─Global.asax に対する直接要求は許可されていません。
- 500.19─ 構成データが無効です。
- 500.21─モジュールが認識されません。
- 500.22─ ASP.NET httpModules 構成は、マネージ パイプライン モードでは適用されません。
- 500.23─ASP.NET httpHandlers 構成は、マネージ パイプライン モードでは適用されません。
- 500.24─ASP.NET 偽装の構成は、マネージ パイプライン モードでは適用されません。
- 500.50─ RQ_BEGIN_REQUEST 通知の処理中に再書き込みエラーが発生しました。 構成または受信規則の実行エラーが発生しました。
注)受信規則と送信規則の両方に対して分散ルールの構成を読み取ります。 - 500.51─ GL_PRE_BEGIN_REQUEST 通知の処理中に再書き込みエラーが発生しました。 グローバル構成またはグローバル規則の実行エラーが発生しました。
注)グローバル ルールの構成を読み取る場所を次に示します。 - 500.52─ RQ_SEND_RESPONSE 通知の処理中に再書き込みエラーが発生しました。 送信規則の実行エラーが発生しました。
- 500.53─RQ_RELEASE_REQUEST_STATE 通知の処理中に再書き込みエラーが発生しました。 送信規則の実行エラーが発生しました。 この規則は、出力ユーザー キャッシュが更新される前に実行されるよう構成されています。
- 500.100─内部 ASP エラー。
「500 Internal Server Error」エラーの原因
「500 Internal Server Error」エラーの原因はさまざまです。一般的には、以下のような(1つまたは複数の)要素がエラーを引き起こします。
- ブラウザのキャッシュ
- データベースのログイン認証情報が正しくない
- データベースが破損している
- WordPressのファイルが破損している
- データベースサーバーに問題がある
- WordPressコアファイルが破損している
- .htaccessファイルの破損とPHPメモリ制限の超過
- サードパーティプラグインやテーマの問題
- サードパーティプラグインによるPHPのタイムアウトまたは致命的なPHPエラー
- ファイルやフォルダの権限に誤りがある
- サーバーのPHPメモリ制限の枯渇
- .htaccessファイルが破損している
- CGIやPerlスクリプトの問題
500エラーが与えるSEOへの影響
WordPressのメンテナンスモード時に使用され、メンテナンス終了後にGoogleに再度確認を促す503エラーとは異なり、500エラーは放置しておくとSEOに影響を与えます。サイトが10分間ダウンしている場合、その間にGoogleにクロールされてもキャッシュがクロールされます。あるいは、10分程度であれば、Googleはクロールしないかもしれません。この場合には、特に問題はありません。
しかし、例えば6時間以上サイトがダウンしていると、Googleがサイトレベルの問題として扱い、結果として検索結果の表示順位が下がる可能性があります。500エラーが繰り返し発生することが懸念される場合は、まず原因を特定し、以下の解決方法を実践しましょう。
お気に入りのサイトが軒並みダウン?大規模なインターネット障害かも
「500 Internal Server Error」エラーは、必ずしもWordPressサイトやプラグイン、サーバー設定に原因があるとは限りません。
Cloudflare(最近の障害でも広範囲に500エラーが発生)などの主要なインターネットインフラ事業者や、大手クラウドプラットフォームで障害が発生すると、互いに関係のない多数のサイトが同時にダウンすることがあります。その際には、500、502、503、520エラーやタイムアウトなど、一般的なサーバー側の問題とまったく同じような症状が見られます。
サイト運営者にとってまず重要なのは、障害が広範囲で発生しているかどうかを確認することです。設定を変更する前に、CloudflareやAWSなど、利用しているサービスのステータスページに加え、レンタルサーバーのステータスページも確認しましょう。
大規模な障害が発生している場合は、プラグインやサーバー設定、DNSレコードなどを変更しないのが得策です。原因となっている障害が解消されれば、影響を受けたサイトのほとんどは自動的に復旧します。
Kinstaでは、世界各地のネットワーク状況を継続的に監視し、プラットフォームに影響する障害が発生した際には、ステータスページで最新情報をお知らせしています。障害が解消されれば、通常は特別な操作を行わなくてもサイトは正常な状態に戻ります。その後も500エラーが続く場合は、別の原因が考えられるため、以下のトラブルシューティングを進めるか、サポートまでお問い合わせください。
「500 Internal Server Error」エラーの解決方法
1. ページを再読み込みする
初歩的ですが、「500 Internal Server Error」エラーが発生した際には、まずページを再読み込みしてみてください(F5またはCtrl + F5)。ホストやサーバーに一時的に過負荷がかかっているだけで、すぐに正常通りにサイトが稼働する可能性もあります。また、別のブラウザでアクセスしてみて、ブラウザに原因がないかを確認することもできます。
別の方法として、downforeveryoneorjustme.comにサイトのURLを貼り付けてみるのも有効です。サイトがダウンしているのか、それとも自分の環境に問題があるのかをすぐに確認できます。このツールは、サーバーから返されるHTTPステータスコードを確認でき、「OK(異常なし)」を意味する200以外が返される場合は、それが表示されます。

2. ブラウザのキャッシュをクリアする
ブラウザキャッシュのクリアも効果的なトラブルシューティングになり得ます。以下のリソースを参考にキャッシュをクリアしてみてください。
- 1つのページをブラウザで強制的に更新する方法
- Google Chromeのキャッシュをクリアする方法
- Mozilla Firefoxのキャッシュをクリアする方法
- Safariのキャッシュをクリアする方法
- Internet Explorerのキャッシュをクリアする方法
- Microsoft Edgeのキャッシュをクリアする方法
- Operaのキャッシュをクリアする方法
3. サーバーのログを確認する
また、エラーログも活用しましょう。Kinstaをご利用の場合は、MyKinstaのログビューアでエラーを簡単に確認できます。特にサイトのプラグインが原因となっている場合など、問題の原因をすばやく絞り込むのに役立ちます。
MyKinstaで「サイト」を選択し、調査したいWordPress環境を開いたら、左側のメニューから「ログ」をクリックします。「error.log」タブに表示されるログエントリから、500 Internal Server Errorに関連するエラーを検索できます。

ご利用中のサーバーにこのようなツールがない場合は、以下をwp-config.phpファイルに貼り付けて、WordPressのデバッグモードを有効化することができます。
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
ログは通常、/wp-contentディレクトリに格納されていますが、Kinstaのように「logs」という専用フォルダがある場合もあります。

また、Apacheとnginxのログファイルも確認可能です。通常はそれぞれ以下に格納されています。
- Apache:/var/log/apache2/error.log
- NGINX:/var/log/nginx/error.log

これにより、500エラーが継続的に発生しているのか、それともすでに自然に解消されているのかを判断しやすくなり、トラブルシューティングに役立ちます。
致命的なPHPエラーが原因で500エラーが表示されている場合は、PHPのエラー報告を有効にする方法もあります。エラーが発生しているファイルに、以下のコードを追加してください。通常、Google Chrome デベロッパーツールの「コンソール」タブを確認することで、問題が発生しているファイルを絞り込むことができます。
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
または、php.iniファイルを以下のように変更する必要がある場合もあります。
display_errors = on
4. データベース接続の確立にエラーがないか確認する
「500 Internal Server Error」エラーは、データベースの接続確立エラーが原因で発生することもあります。ブラウザによって異なる場合もありますが、サーバーログでは両方のエラーが500のステータスコードが記録されます。
以下は、「データベース接続確立エラー」の表示例です。接続が正常に動作していないため、ページをレンダリングするためのデータを取得できず、ページが完全に空白になります。これにより、サイトのフロントエンドが破損するだけでなく、WordPressの管理画面にもアクセスできなくなります。

このようなエラーが発生する原因には、以下のようなものがあります。
- 最も一般的なのは、データベースへの接続情報が間違っているケース。サイトからMySQLデータベースに接続する際には、専用のログイン情報が使用される。
- WordPressデータベースが破損している可能性も。テーマやプラグインの追加・削除など、WordPressサイトではさまざまな変更が頻繁に行われるため、データベースが破損することがある。特定のテーブルが欠落または破損していたり、必要なデータを誤って削除してしまったりすることなどが原因として考えられる。
- WordPressのインストールファイルが破損している、場合によっては、不正アクセスが原因でファイルが破損するケースもある。
- データベースサーバー自体に問題が発生している可能性もある。たとえば、アクセスの急増によってデータベースに過度な負荷がかかったり、同時接続数が多すぎて応答しなくなったりするケース。特に共用サーバーでは、同じサーバーのリソースを多数のユーザーで共有しているため、このような問題が比較的よく発生する。
WordPressサイトの「データベース接続確立エラー」の解決方法はこちらでご紹介しています。
5. プラグインとテーマを確認する
サードパーティのプラグインやテーマが原因で、「500 Internal Server Error」エラーが発生することも珍しくありません。Kinstaでも、スライダープラグインから広告ローテーションプラグインまで、さまざまな種類のプラグインが原因となるケースを見てきています。
多くの場合、新たにプラグインやテーマをインストールした直後、またはアップデートを実行した直後に発生します。そのため、更新を行う際には、ステージング環境を利用するか、少なくとも一つずつ更新することをおすすめします。複数をまとめて更新すると、500エラーが発生した際、どれが原因なのかを特定するのが難しくなります。
原因を特定する方法として、すべてのプラグインを無効化するのが効果的です。無効化するだけであれば、プラグインのデータが失われることはありません。
WordPress管理画面にアクセスできる場合は、「プラグイン」画面を開き、一括操作メニューから「無効化」を選択してください。これですべてのプラグインを一度に無効化できます。

これでエラーが解消される場合は、プラグインに原因があることがわかります。プラグインを1つずつ有効化し、その都度サイトを再読み込みします。有効化して「500 Internal Server Error」エラーが再発したものが問題のあるプラグインです。プラグインを特定したら、開発元に問い合わせるか、WordPressリポジトリのサポートを利用してください。
Kinstaをご利用の場合は、Kinsta自動アップデートアドオンを利用すると、テーマとプラグインの更新作業を自動化することができます。
WordPress管理画面にアクセスできない場合は、FTP経由でサーバーにログインし、プラグイン(plugins)フォルダの名前を「plugins_old」などに変更して無効化します。その後、サイトにアクセスしてエラーが消えている場合は、プラグインを1つずつテストしていきます。先ほどのフォルダ名を「plugins」に戻し、中に格納されている各プラグインのフォルダ名を順番に変更します。ステージング環境するのでもOKです。

プラグイン、テーマ、WordPressのコアは、常に最新の状態に保つようにしましょう。また、使用中のPHPバージョンがサポートされていることも確認してください。プラグインのコードに問題がある場合は、WordPress開発者に対応してもらう必要があるかもしれません。
6. WordPressのコアを再インストールする
長年運営しているサイトの場合、WordPressのコアファイルが破損していることもあります。プラグインやテーマに影響を与えずにWordPressのコアだけを再アップロードするのは非常に簡単です。WordPressを再インストールする5つの方法はこちらをご覧ください。実行前にはバックアップの作成をお忘れなく。
- 既存のコンテンツを削除せずにWordPress管理画面からWordPressを再インストールする方法
- 既存のコンテンツを削除せずにFTPでWordPressを再インストールする方法
- 既存のコンテンツを削除せずにWP-CLIでWordPressを再インストールする方法
7. アクセス権限のエラー
サーバー上のファイルまたはフォルダに対するアクセス権限のエラーにより、500エラーが発生することもあります。WordPressのファイルとフォルダのアクセス権限に関しては以下が推奨されます。
- すべてのファイルを644(-rw-r–r–)または640に設定する
- すべてのディレクトリを755(drwxr-xr-x)または750に設定する
- ディレクトリには777を設定しない
- wp-config.phpは、サーバー上の他のユーザーが読み取ることができないよう、440または400に設定する
この詳細は、WordPress Codexのファイル権限の変更を参照してください。
FTPクライアントを使用すると、ファイルのアクセス権限を確認しやすくなります(以下参照)。また、ファイルが正しく設定されているかどうか、サーバー会社のカスタマーサポートに問い合わせ、フォルダおよびファイルの権限をgrepしてもらうこともできます。

8. PHPのメモリ制限
サーバーのPHPメモリ制限を超過することで、エラーが発生しているかもしれません。この場合は、メモリ制限を引き上げてみてください。以下、cPanel、Apache、php.iniファイル、および wp-config.phpファイルでメモリ制限を増やす方法をご紹介します。
cPanelでPHPメモリの制限を増やす方法
cPanelを使用するサーバーサービスをご利用の場合、ユーザーインターフェースから変更可能です。「ソフトウェア」セクションの「Select PHP Version(PHPバージョンの選択)」をクリックします。

「Switch to PHP Options(PHPオプションを切り替える)」をクリックします。

memory_limit属性をクリックして値を変更し、「Save(保存)」をクリックします。

ApacheでPHPメモリの制限を増やす方法
.htaccessファイルは、ディレクトリのレベルまでサーバーの動作を変更できる隠しファイルです。FTPまたはSSH経由でサイトにログインし、ルートディレクトリに.htaccessファイルがあるかを確認します。

.htaccessファイルがある場合は、PHPのメモリ制限を増やす以下のコードを編集します。おそらく64M以下に設定されているため、値を増やしてみてください。
php_value memory_limit 128M
php.iniファイルでPHPメモリの制限を増やす方法
上記の操作が難しい場合は、php.iniファイルを編集してみてください。FTPまたはSSH経由でサイトにログインし、ルートディレクトリにアクセスして、 php.iniファイルを開くか作成します。

ファイルが既に存在する場合は、以下の3つの設定を検索し、必要に応じて変更してください。ファイルを作成した場合は、以下のコードを貼り付け、必要に応じて値を変更します。
memory_limit = 128M
共用サーバーを利用している場合、この.htaccessファイルの設定を機能させるためには、php.iniファイルにsuPHPディレクティブを追加する必要があるかもしれません。これには、サイトのルートにある.htaccessファイルを編集し、ファイルの先頭に以下のコードを貼り付けます。
<IfModule mod_suphp.c>
suPHP_ConfigPath /home/yourusername/public_html
</IfModule>
この作業が行えない場合、サーバー会社がグローバル設定をロックし、.user.iniファイルを使用して設定を行っていることも考えられます。.user.iniファイルを編集するには、 FTPまたはSSH経由でサイトにログインし、ルートディレクトリにアクセスして、.user.iniファイルを開くか作成します。以下のコードを貼り付けてください。
memory_limit = 128M
wp-config.phpでPHPメモリの制限を増やす方法
上記すべての操作が実行できない場合は、FTPまたはSSH経由でサイトにログインし、ルートディレクトリにあるwp-config.phpファイルを見つけます。

wp-config.phpファイルの先頭に以下のコードを貼り付けます。
define('WP_MEMORY_LIMIT', '128M');
あるいは、メモリ制限を超過しているかどうかをサーバー会社に問い合わせるという方法もあります。Kinstaでは、独自のアプリケーションパフォーマンス監視(APM)ツールやその他のトラブルシューティング方法を活用して、制限を超過するプラグイン、クエリ、またはスクリプトを特定します。独自のNew Relicキーを使用することも可能です。

9. .htaccessファイルのエラー
Kinstaはnginxのみを利用していますが、Apacheを使用するWordPress専用サーバーをご利用の場合、.htaccessファイルでエラーが発生しているか、ファイルが破損していることもあります。次の手順に従って、ファイルを作成し直してみてください。
FTPまたはSSH経由でサイトにログインし、.htaccessファイルの名前を.htaccess_oldに変更します。

このファイルを再作成するには、通常WordPressのパーマリンクを再保存するだけでOKですが、500エラーによりWordPress管理画面にアクセスできない場合は不可能です。.htaccessファイルを新規作成して以下の内容を貼り付け、サーバーにアップロードする必要があります。
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
マルチサイト用のデフォルトの.htaccessファイルなど、そのほかの状況に関してはWordPress Codexを参照してください。
10. CGI/Perlスクリプトのコーディングまたは構文エラー
CGIおよびPerlによる500エラーの発生は、最近ではあまり見られなくなりましたが、ワンクリックCGIスクリプトの多いcPanelを利用している場合には、考慮する価値があります。Stack OverflowのAEMは以下のように述べています(英語原文の日本語訳)。
CGIは、PHPやmod_perlのようなApacheの拡張機能、Java EE、Struts、SpringなどのJavaフレームワーク、PythonベースのDjango、Ruby on Railsやその他のRubyフレームワーク、さらにはMicrosoftのさまざまな技術を含む、多種多様なウェブプログラミング技術に取って代わられました
CGIスクリプトを利用している場合は、以下を参考にしてみてください。
- 編集時には、Atom、Sublime、Notepad++などのプレーンテキストエディターを使用することで、ASCII形式を守ることができる。
- CGIスクリプトとディレクトリでchmod 755の正しい権限が使用されているかを確認する。
- サーバーのcgi-binディレクトリに、CGIスクリプトをASCIIモードでアップロードする(FTPエディタで選択可能)。
- スクリプトに必要なPerlモジュールがインストール済みで、サポートされていることを確認する。
11. サーバー会社にサーバーエラーを確認する
500エラーは、PHPのタイムアウトやサードパーティプラグインの致命的なPHPエラーによって引き起こされることがあるため、ご利用中のサーバー会社に問い合わせるのも有効です。以下のような問題は、専門的になるため、自分ではトラブルシューティングが難しい場合があります。
PHP message: PHP Fatal error: Uncaught Error: Call to undefined function mysql_error()...
PHP message: PHP Fatal error: Uncaught Error: Cannot use object of type WP_Error as array in /www/folder/web/shared/content/plugins/plugin/functions.php:525
Kinstaでは、すべてのお客様のサイトを監視し、このようなエラーの発生時は、自動的に通知を受信します。エラーの検知後、専任エンジニアがすぐに対処を開始します。また各サイトには、LXDで管理されたホストと、LXCソフトウェアコンテナを使用しており、すべてのWordPressサイトが必要なソフトウェアリソース(Linux、nginx、PHP、MySQL)を備えた独自のコンテナで実行されます。完全専用リソースにより、他のユーザーと(自分の他のサイトとすら)共有されることはありません。
この状況では、504エラーが発生する方が一般的ですが、PHPスレッドの不足がPHPのタイムアウトを引き起こしているかもしれません。PHPスレッドは、サイトが同時に処理できるリクエストの数を決定するもので、キャッシュされていないリクエストは、すべてPHPスレッドによって処理されます。
PHPスレッドが忙しくなると、リクエストがキューに溜まります。PHPスレッドの上限に達すると、キューが古いリクエストを削除し始めるため、これが原因で500エラーが発生したり、リクエストが完了しなかったりすることがあります。PHPスレッドの詳細はこちらをご覧ください。
サイトの監視
エラーの再発を防ぐには、updown.ioのようなツールを利用してサイトを監視し、エラー発生時に通知を受け取ることができます。このツールは、定期的にHTTPのHEADリクエストを選択したURL(サイトのトップページ推奨)に送信して監視してくれます。監視頻度は以下から選択可能です。
- 15秒
- 30秒
- 1分
- 2分
- 5分
- 10分
サイトがダウンすると、以下のようなメール通知を受け取ることができます。

不備のあるプラグインをデバッグしようとしている場合や、サーバーを混雑させる傾向のある共用サーバーを利用している場合には、特におすすめです。サイトがどのくらいの頻度でダウンしているかを把握することができます。
まとめ
「500 Internal Server Error」エラーの発生は厄介ですが、この記事に従ってトラブルシューティングを行えば、迅速に解決できるはずです。通常このエラーは、サードパーティプラグイン、致命的なPHPエラー、データベース接続確立エラー、.htaccessファイルの制限、PHPのメモリ制限、あるいはPHPのタイムアウトが原因です。