WordPressサイトでエラーに遭遇するのは面倒ですが、エラーの多くはすぐに原因の検討がつくものです。よくあるWordPressエラーについて知っておくと、いざ発生した際の対処が楽になります。しかし、今回ご紹介する503エラーは、発生時に手がかりとなる情報をほとんど得ることができません。

WordPressサイトで503エラーが発生する主な原因を知っておいて損はありません。基本的には、根本の原因を突き止めるためにいくつかのステップを踏むことになります。

まずは503エラーの原因と見え方をご説明してから、503エラーを解決する6つのステップをご紹介していきます。

Added:

「503 Service Unavailable」エラーとは

Internet Engineering Task Force(IETF)は、HTTPステータスコード「503 Service Unavailable」を次のように定義しています(英語原文の日本語訳)。

503(Service Unavailable)ステータスコードは、サーバーが一時的な過負荷や定期メンテナンスなどのため、リクエストを処理できないことを示す。サーバーは、リクエストを再試行する前にクライアントが待つ時間を指定するために、Retry-Afterヘッダーフィールドを送ることがある

「503 Service Unavailable」エラーとは、該当サーバーが利用不可であることを意味します。これは通常、アクセスが過剰集中していたり、サイトがメンテナンス中であったりするのが原因です。他のエラーコードとは異なり、503エラーはサイトが稼働してはいるものの、アクセスができない状態です。

このエラーの煩わしい点は、手がかりとなる情報がほとんど表示されず、「Service Temporarily Unavailable(サービスが一時的に利用できません)」としか表示されないことです。

サイトがメンテナンス中である場合は問題ありません。WordPressサイトでは、プラグインやテーマ、コアソフトウェアの更新中、ほんのわずかな時間だけメンテナンスモードになります。

メンテナンスモードの例
メンテナンスモードの例

通常、中断されるのはごく短時間なため、誰かに気づかれることはほとんどありませんが、503エラーが継続して表示される場合は、大きな問題が隠れているかもしれません。ユーザーがサイトにアクセスできないだけでなく、WordPress管理画面にもアクセスできなくなってしまうため、問題を解決するには、サイトのファイルを開くことになります。

エラーコード 503 service unavailable error
エラータイプ サーバーサイドのエラー
エラーのバリエーション 503 Service Unavailable
503 Service Temporarily Unavailable
HTTP Server Error 503
HTTP Error 503
エラーの原因 突然のトラフィック急増
サーバー通信の問題
リソースの枯渇
DDoS攻撃
プラグインまたはテーマの非互換性

 

503エラーのバリエーション

503エラーの見え方は、サーバーの設定やブラウザによって異なりますが、どのバリエーションにも「503」が含まれているため簡単に特定することができます。以下のような種類があります。

  • 503 Service Unavailable
  • 503 Service Temporarily Unavailable
  • HTTP Server Error 503
  • HTTP Error 503
  • Error 503 Service Unavailable
  • The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

いずれにしても、訪問者に混乱をまねく前に、できる限り迅速に解決したいところです。

「503 Service Unavailable」エラーの原因

サーバーが一時的にリクエストを処理できない状況には、以下のようなものが挙げられます。

  • サーバーへのリクエスト数が多く、利用可能なリソースをすべて使い果たしている
  • サーバーに技術的な問題やメンテナンス作業が発生している
  • サーバーがサービス拒否(DDoS)攻撃を受けている

プラグインやテーマに問題があるなど、他にも原因は考えられます。他のエラーがないかサイトを監視するには、Sitecheckerを使用してみてください。

900ページまでは無料で監視でき、3日ごとに自動クロールが行われます。有料プランを購入すると、毎日または12時間ごとの自動監視を設定することができます。

WordPressサイトで「503 Service Unavailable」エラーを解決する方法(6ステップ)

503エラーの原因はわからないことが多いため、順を追ってトラブルシューティングを行います。エラーが解消されるまで、以下のステップを順に実行してみてください。

1. プラグインを無効にしてみる

WordPressサイトで見られる503エラーの最も一般的な原因は、プラグインの互換性の問題にあります。したがって、まずはサイトのプラグインをすべて無効にしてみてください。

503エラーの発生中はWordPress管理画面にアクセスできないため、これを実行するにはFTPクライアントを使用します。FileZillaがおすすめです。

準備ができたら、FTPクライアント経由でサイトにアクセスし、WordPressのルートフォルダ(通常はpublic_html、 html、 public、 www、またはサイト名)を開きます。Kinstaのお客様の場合は、publicフォルダがルートフォルダに当たります。

WordPressのルートフォルダ
WordPressのルートフォルダ

ルートフォルダを開いて、wp-contentディレクトリに進むと、pluginsフォルダがあります。このフォルダには、サイトにインストールしているすべてのプラグイン(有効・無効問わず)のサブディレクトリが格納されています。

pluginsフォルダを右クリックし、「plugins.old」のようなわかりやすい別の名前に変更します。

名前を変更したpluginsフォルダ
名前を変更したpluginsフォルダ

これで、プラグインがすべて無効化されます。

これで、WordPress管理画面にアクセスしてみてください。これで、アクセスできる場合は、503エラーの原因がプラグインにあることがわかります。あとは、問題のプラグインを特定して削除すればOKです。

wp-contentディレクトリに戻り、先ほどのフォルダ名を「plugins」に変更します。これで、再びすべてのプラグインが有効化された状態になります。

続いて、wp-content/pluginsディレクトリを開き、各プラグインのフォルダに対して同じことを繰り返します。

  1. 一番上のフォルダから、任意のフォルダ名に変更
  2. サイトでエラーが解消されたかを確認
  3. 解消されていなければ、1のフォルダ名を元に戻す
  4. 次のプラグインのフォルダに移り、無効化することでエラーが解消されるプラグインが見つかるまで、1から手順を繰り返す

多数のプラグインをインストールしている場合は、手間のかかる作業ですが、根気良く順番に確認していきましょう。プラグインを特定したら、アンインストールするか、代替プラグインを探して置き換えましょう。

プラグインに原因でなかった場合は、次の手順に進みます。

2. テーマを無効にしてみる

続いては、WordPressテーマで同様のことを行います。プラグインだけでなく、テーマにも互換性の問題が見られることがあります。

テーマの場合は、フォルダ名を変更するだけでは無効にすることはできず、「テーマディレクトリ(テーマ名)が存在しません」のようなエラーメッセージが表示されます。また、テーマディレクトリのフォルダ全体の名前を変更すると、「エラー: テーマディレクトリが空か、存在しません。インストールを確認してください」というメッセージが表示されます。

テーマディレクトリが存在しない旨を伝えるエラーメッセージ
テーマディレクトリが存在しない旨を伝えるエラーメッセージ

したがって、phpMyAdminにログインしてWordPressのデータベースにアクセスする必要があります。Kinstaをご利用の場合は、MyKinstaの「データベースへのアクセス」セクション(「WordPressサイト」>(サイト名)>「情報」に移動)から簡単にアクセス可能です。

MyKinstaからphpMyAdminにアクセス
MyKinstaからphpMyAdminにアクセス

wp_optionsを見つけてクリックして、「Search」タブを開きます。「option_name」で「template」を検索します。

phpMyAdmin wp_optionsの項目
phpMyAdmin wp_optionsの項目

option_valueの列にある現在のテーマ名の「Edit」をクリックし、何らかの既存のテーマ名、例えば「twentynineteen」に変更します。

wp_options テンプレート名
wp_options テンプレート名

これで再度サイトにアクセスし、エラーが解消されているかを確認します。これで解消された場合は、テーマに原因があったことがわかります。テーマを再インストールするか、直近のバックアップを復元してみるといいかもしれません。

3. コンテンツデリバリネットワーク(CDN)を無効にしてみる

503エラーは、サイトの問題ではなく、コンテンツデリバリネットワーク(CDN)が原因で発生することもあります。CDNを使用している場合は、一時的に無効にしてみてください。

Kinstaのお客様は、MyKinstaの「WordPressサイト」>(サイト名)>「キャッシュ」画面の「CDN」タブに移動すると、ワンクリックで無効化できます。

MyKinstaでCDNを無効化
MyKinstaでCDNを無効化

この手順は、お使いのCDNサービスによって異なります。Cloudflareも時折も503エラーを引き起こすことが報告されています。無効化する設定が見つからない場合は、お使いのCDNサービスの知識ベースを確認してみてください。

CDNを使用していない場合、またCDNを無効にしてもエラーが解消されない場合は、次の手順に進みましょう(CDNを再度有効化することをお忘れなく)。

4. WordPress Heartbeat APIを制限する

WordPress HeartbeatはWordPressに装備されたAPIで、コンテンツの自動保存やプラグインの通知の表示、アクセスしようとしている投稿を他の人が編集している際の通知、その他様々な動作のために使われます。

このAPIは、心臓の鼓動(heartbeat)のように、高頻度でバックグラウンドで動作しており、絶えずデータやリクエストを処理しています。ご想像通り、これはサーバーリソースを消費することを意味します。通常であれば問題ありませんが、サーバーが負荷に耐えられなくなると、503エラーが発生します。

Heartbeat APIが原因であるかどうかを確認するには、一時的に無効にしてみます。FTPを介してサイトに接続し、テーマフォルダを開いて、functions.phpファイルを確認します。

WordPressテーマのfunctions.phpファイル
WordPressテーマのfunctions.phpファイル

ファイルを右クリックして「View/Edit(表示/編集)」を選択すると、ローカルテキストエディター上でファイルが展開されます。ファイルに以下のコードを貼り付けてください。

add_action( 'init', 'stop_heartbeat', 1 );
function stop_heartbeat() {
wp_deregister_script('heartbeat');
}

これでHeartbeat APIが無効化されます。変更を保存し、サイトにアクセスしてみてください。

これで503エラーが消えていれば、APIが原因だったことがわかります。この場合、APIを完全に無効化してしまうと、多くの便利な機能が失われてしまうことになります。そのため、Heartbeatが問題を起こさないよう「遅くする」のがおすすめです。

これには、Heartbeat Controlプラグインがおすすめです。プラグインをインストールして有効化したら、「設定」>「Heartbeat Control」に移動します。「Modify Heartbeat」の項目で、頻度をできる限り小さな数値にします。

Heartbeat Controlプラグインで頻度を変更
Heartbeat Controlプラグインで頻度を変更

変更を保存したらfunctions.phpファイルに戻って、先ほど追加したコードを必ず削除しましょう。

Heartbeatが原因である場合、この段階で503エラーは解消されます。まだエラーが消えない場合は、次の解決策に進みましょう。

5. サーバーのリソースを拡張する

この時点でまだ503エラーが解消されていない場合は、サーバーのリソースが不足している可能性があります。現在利用しているホスティングプランのアップグレードを検討する必要があるかもしれません。特に現在格安WordPressサーバーを使用している場合はなおさらです(ホスティング会社がリソースを抑制しているため)。

KinstaのWordPress専用マネージドホスティング(およびアプリケーションデータベースホスティング)には、リソース制限がありません。

とはいえ、プランのアップグレードは大きな決断です。賢い方法として、まずはじめにホスティング会社に問い合わせて、503エラーについて相談し、これまでに実践した解決策を説明してみてください。プランのアップグレードが必要かどうかの助言をくれるはずです。

6. ログを確認してWP_DEBUGを有効にする

エラーログも役に立ちます。Kinstaのお客様は、MyKinstaのログビューア(「WordPressサイト」>(サイト名)>「ログ」に移動)で簡単にエラーログを確認し、WordPressのデバッグ機能を有効にすることが出来ます。これによって、特にサイトのプラグインに起因する場合には、問題が手早く絞り込まれます。

MyKinstaでerror.logファイルを表示
MyKinstaでerror.logファイルを表示

ご利用中のホスティングにこのようなログビューアがない場合は、wp-content.phpファイルに以下のコードを貼り付けて、ログを有効にすることもできます。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

ログは通常、/wp-contentディレクトリに格納されています。debug.logファイルを見つけて開きます。

あるいは、Kinstaのようにlogsフォルダのような専用フォルダがあるかもしれません。

WordPress エラーログフォルダ(SFTP)
WordPress エラーログフォルダ(SFTP)

デバッグログの読み取りには抵抗があるかもしれませんが、それほど難しくはなく、発生したエラーが時系列に並んでいます。エラーに関連するコードはもちろん、エラーを引き起こす原因となったファイルも確認できます。

注)ログには503エラーの直接的な記録はありませんが、上記の解決策がどれも有効でなかった場合には、どのファイルに問題があるかを確認することは可能です。エラーの解決に助けが必要な場合は、ホスティング会社のサポートに連絡を取り、ログの情報を共有するとスムーズです。

また、ApacheNginxでもログファイルを確認することができます。

  • Apache:/var/log/apache2/error.log
  • Nginx:/var/log/nginx/error.log

NginxとApacheの詳細はこちらでご紹介しています。

Kinstaのお客様は、MyKinstaの分析画面ですべての503エラーの内訳や発生頻度と発生日時を確認できます。このエラーが一時的な問題でない場合に有用です。

503エラーが致命的なPHPのエラーによって引き起こされている場合は、PHPエラーの報告を有効にする手もあります。エラーが見られるファイルに以下のコードを貼り付けるだけです。通常は、Google Chromeのデベロッパーツールでファイルを特定できます。

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

また、php.iniファイルに以下を加える必要があるかもしれません。

display_errors = on

まとめ

「503 Service Unavailable」エラーは、サイトのメンテナンス中に一瞬発生することがありますが、場合によっては何かしらの問題があるかもしれません。

503エラーの原因を特定するには、以下の手順に従ってトラブルシューティングを行ってください。

  1. プラグインを無効にしてみる
  2. テーマを無効にしてみる
  3. CDNを無効にしてみる
  4. Heartbeat APIを制限する
  5. サーバーのリソースを拡張する
  6. ログを確認してWP_DEBUGを有効化する
Matteo Duò Kinsta

Head of Content at Kinsta and Content Marketing Consultant for WordPress plugin developers. Connect with Matteo on Twitter.