WordPressのウェブサイトでエラーが出ると、怖気づいてしまうかもしれません。ですがエラーの多くは原因の見当が付くもので、そのよくあるエラーに対処が断然楽になることもあります。残念なのは、503エラーは親切さに欠けていて、そこから手がかりとなる情報があまり得られないことです。

WordPressで503エラーが起こる主な原因を知ることは役に立つでしょう。その後エラーに対処する段階では順序立てて考える必要があり、根本の原因を突き止めるため幾つかのステップを踏むことになります。

この記事では503エラーがどの様なもので、通常どの様に表示されるかを説明します。それから、503エラー解消の6つのステップについてご案内します。では始めましょう!

503エラーとは?

503エラーに行き当たったなら、該当サーバーが利用不可だということです。これは、例えばアクセスが過剰集中しているか、メンテナンス中などの理由によるものでしょう。同様の他のエラーコードとは違い、503エラーはウェブサイトがオンラインで稼働しているものの、現時点ではアクセスできないことを示します。

特にこのエラーが煩わしいのは、手がかりとなる情報を殆ど与えてくれないことでしょう。多くの場合は「Service Temporarily Unavailable」と表示されるだけです。これでは、レストランへ電話をしたら、閉店だと言いつつも再開の時期は教えてくれないようなものです。

運が良ければ、503エラーコードが起きたのはWordPressサイトがメンテナンス中だからでしょう。WordPressはプラグインやテーマ、中枢ソフトウェアのアップデート中にごく短時間メンテナンスモードになります:

mykinsta-open-php-myadmin

通常は中断されるのはごく短時間なため、これに気づく人はいません。しかし503エラーが続く場合には、より大きな問題に対処することになります。何と言っても、閲覧者がサイトにアクセスできないだけでなく、管理画面へのアクセスも失われてしまうのです。これはどんな手を使ってもサイトのアップデートは不可能で、問題解決のためにはサイトのファイルを開く必要があるということです。

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.

表示されたコードがどの様なものであれ、エラーが閲覧者に影響を与える前に迅速に処理する必要があるということです。

WordPressで503エラーを解消する方法(6つのステップ)

503エラーの原因は、どんな状況であれ定かでないことが多いので、順序立てて対処していくことが必要です。以下の6つの項目では、考えられる種々の根本的原因を解決するよう、それぞれ見込みのある解決策を解説しています。

各ステップを読んだ後、ご自身のウェブサイトに戻って503エラーが解消されたか見てみてください。もしエラーが解消されたなら、問題は無事解決されています。まだ解消されていない場合には、引き続き次のステップに進みましょう。

1.WordPressのプラグインを一時的に無効化する

WordPressで最もよく503エラーを引き起こすものの一つが、プラグインの互換性の問題です。これが原因か突き止めるには、サイトのプラグインを全て無効にしなければなりません。

503エラーはWordPress管理画面へのアクセスを妨げるので、このステップを行うにはFTPクライアントを使う必要があります。もしお持ちでなければ、FileZillaをお勧めします

用意が整ったらFTPクライアントを介してウェブサイトにアクセスし、WordPressのルートフォルダを開きます。これが見つからない場合、大抵は public_html、 html、 public、 wwwなどか、サイト名になっているでしょう。Kinstaをお使いの方は、Publicフォルダがルートフォルダに当たります。

WordPressルートフォルダSFTP
WordPressルートフォルダSFTP

ルートフォルダを開いて、wp-contentディレクトリに進みます。開くとpluginsというフォルダがあり、ここにウェブサイトにインストールされた各々のプラグインの個々のサブディレクトリがあります(有効・無効どちらも)。

ここで何をするかと言うと、pluginsフォルダを右クリックして何か別の名前に変えてください。後で簡単に見分けられる様に、plugins.oldやplugins.deactivatedにするのをお勧めします。

名称変更後のWordPress pluginsフォルダ
名称変更後のWordPress pluginsフォルダ

これで、WordPressはどのプラグインも見つけられなくなりました。こうなった場合には、WordPressは自動的にこれらのプラグインを無効にします。

さて、WordPressダッシュボードにアクセスしてみましょう。もし503エラーが解消されているなら、プラグインのどれかが犯人だったと推測できます。あとは問題のプラグインがどれかを特定するだけです。

wp-contentディレクトリに戻り、元のpluginsフォルダを正しく名称変更します。続いて問題があるプラグインを見つけるまで、各プラグインを一つずつ順に無効にしなければなりません。

これを行うにはwp-content/pluginsディレクトリを開きます。そうすると、各プラグインにつき一つずつのフォルダが見つかるでしょう。ここで行う工程はこれまでとほぼ同じです:

  1. 一番上のフォルダから始めて、任意の名称に変更
  2. ウェブサイトでエラーが解消されたか確認
  3. 解消されていなければ、前項で変更したフォルダ名を元の名称に戻す
  4. リスト上の次のプラグインに進み、上記の手順を繰り返す

多数のプラグインを入れている場合はこのプロセスに時間がかかりますが、各プラグインを順に確かめるのが肝心です。エラーを引き起こしたプラグインをどこかの時点で突き止めれば、そのプラグインをアンインストールするか、代わりのツールと置き換えられます。

解決策が見つからないまま上記の手順の最後まで来てしまった場合は、対処法の次のステージに進むまでです。

2.WordPressテーマを無効化する

503エラーの原因からプラグインが除外されたので、今度は有効なテーマで同じことをする番です。実際、お使いのテーマも互換性の問題を作り出している可能性があります。

残念ながら、このプロセスは上記と同様にはいきません。WordPressは単にテーマフォルダを名称変更しただけでは初期テーマに戻らず、「テーマディレクトリ “テーマ名” が存在しません。」などのエラーが出てしまいます。またテーマディレクトリのフォルダ全体を名称変更しようとすれば、「エラー:テーマディレクトリが空か、存在しません。インストールを確認してください。」となってしまうでしょう。

―テーマディレクトリが存在しませんというエラー
テーマディレクトリが存在しませんというエラー

従って、phpMyAdminにログインしてWordPressデータベースにアクセスする必要があります。Kinstaをお使いの場合は、これはMyKinstaダッシュボードのInfoの項目にあります。

MyKinsta phpMyAdmin
MyKinsta phpMyAdmin

「wp_options」の項目をクリックし、続いて「Search」タブをクリック。テンプレートは「option_name」の項目で検索するのが良いでしょう。

phpMyAdmin wp_optionsの項目
phpMyAdmin wp_optionsの項目

option_valueの列には現在のテーマ名があります。これを、既存のテーマ名のどれか、例えば「Twentynineteen」に変えましょう。

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

もう一度ウェブサイトを確認して、これでエラーが解消されたか見てみましょう。もし解消されたなら、これは単純にWordPressテーマが問題ということであり、テーマを再インストールするか直近のバックアップに戻してみると良いかもしれません。

3.一時的にコンテンツ・デリバリ・ネットワーク(CDN)を無効化する

503エラーはウェブサイトの問題ではなく、コンテンツ・デリバリ・ネットワーク(CDN)が原因で起こることがあります。CDNを使っている場合、簡単にこれが原因かを確かめる方法は一時的にCDNを無効にすることです。

CDNはどれもサービスを一時停止する機能を備えているはずです。Kinstaなら、MyKinstaダッシュボード上でCDNの項目から入って「Disable CDN」に進めばKinsta CDNを無効にできます:

MyKinsta CDN有効/無効オプション
MyKinsta CDN有効/無効オプション

このプロセスはお使いのCDNによって異なるかもしれません。Cloudflareも時折503エラーを起こすことが知られています。もし一時停止するオプションが見つからない場合、お使いのサービスの知識ベースを確認すると通常は詳細な解説があります。

CDNを使っていない場合やサービスの一時停止で問題が解決しない場合には、あと幾つかの解決策を試してみることができます。次に進む前に、忘れずにCDNを再度有効にしましょう。

4.WordPress Heartbeat APIを制限する

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

通常のheartbeatと同様、このAPIもバックグラウンドで高頻度で働くことで何も逃さないようにしています。ご想像の通り、このAPIはサーバーのリソースを消費します。これは普通は問題ありませんが、サーバーが負荷に耐えられない時には、これが503エラーに繋がってしまいます。

Heartbeat APIが問題の核心かどうかを特定する手っ取り早い方法としては、一時的にこれを無効化することです。無効にするには、再度FTPを通してWordPressに接続して現在のテーマフォルダを開き、functions.phpファイルを見ます:

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

ファイルを右クリックしてView/Editを選択すると、ローカルテキストエディタ上でファイルが開かれます。ファイルが開かれたら、以下のスニペットコードを追加してください:

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

この3行のコードは、WordPressにHeartbeat APIを無効にするよう指示するものです。functions.phpファイル上での変更を保存し、閉じてから、もう一度ウェブサイトへアクセスしてみましょう。

503エラーが解消されていれば、APIが問題だったことが分かります。しかし、APIを完全に無効化すると多くの有用な機能が失われてしまいます。代わりに、Heartbeatが問題を起こさないよう「遅くする」のがお勧めです。

この最も簡単な方法はHeartbeat Control Pluginをインストールすることです。プラグインを有効化し、設定からHeartbeat Controlの項目へと進みましょう。Modify Heartbeatのオプションを見つけ、頻度を可能な限り小さい数値にします:

Heartbeat Controlプラグイン 頻度
Heartbeat Controlプラグイン 頻度

設定で変更を保存し、少し前に変更を加えたfunctions.phpファイルに戻りましょう。上記の変更を機能させるには、前に追加したコードを消去して保存しなければなりません。

この段階では、もしHeartbeat APIが原因であれば503エラーは解消されているはずです。これが原因でない場合には、少し違う手段を試す時が来たと言えるでしょう。

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

これまでの解決策を全て試みたにも関わらず505エラーが続く場合には、サーバーのリソースが不足しているために問題が起きている可能性が十分にあります。言い換えれば、ホスティングプランをアップデートして問題が解決するかを見る必要があるでしょう。格安のWordPressホスティングを使っている場合は往々にしてリソースを抑制しているので、これは尚更のことです。Kinstaではリソースの抑制はしていません。

とは言え、プランのアップデートは大きな決断になります。賢いやり方としては、初めにウェブホスティングのサポートサービスに連絡して503エラーについて相談し、エラー解消のためにこれまで行ったことに関しても話すことです。サポートチームは原因追及の手伝いをし、プランのアップデートが必要かどうかの助言をしてくれるはずです。

Kinstaでは、サポートチームが喜んで状態をお調べ致します。一時的にNew Relicを有効化して、ウェブサイト上で障害を起こしているものに問題を絞り込むこともできます。

6.ログを閲覧してWP_DEBUGを有効化

エラーログもまた活用すべきです。Kinstaをご利用の場合、MyKinstaダッシュボードのログビューアで簡単にエラーを見てWordPressのデバッグ機能を有効にすることが出来ます。これによって、特にサイトのプラグインに起因する場合には、問題が手早く絞り込まれます。

503エラーのエラーログを確認
503エラーのエラーログを確認

もしお使いのホストがログのためのツールを備えていない場合には、ログを有効にするために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 vs Apacheをご覧ください。

Kinstaをお使いなら、分析ツールを活用して全ての503エラーの内訳やエラーの頻度と起きた時刻を見ることもできます。もし問題が継続的なものならこれが役立ちますし、そうでないなら自ずと解決するでしょう。

503エラーが致命的なPHPのエラーによって現れた場合、PHPエラーの報告を有効化してみても良いでしょう。エラーが出ているファイルに下記のコードを追加するだけです。通常、Google Chrome DevToolsでファイルを絞り込めます。

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

それから、php.iniファイルに以下の修飾を加える必要もあるかもしれません。

display_errors = on

まとめ

運が良ければ、503エラーはサイトをメンテナンスモードにした時しか現れないでしょう。しかし、何の警告もなしに現れる場合には、腹をくくって問題解決に着手しなければなりません。

503エラーの根本原因に辿り着くには、次の6つのステップを追って問題解決する必要があります:

  • WordPressのプラグインを一時的に無効化する
  • WordPressのテーマを無効化する
  • CDNを無効化する
  • WordPress Heartbeat APIを制限する
  • サーバーのリソースを拡張する
  • ログを確認し、WP_DEBUGを有効化する

WordPressをお使いの際にHTTP 503エラーが表示されたことはありますか?下のコメント欄で、あなたの経験をお聞かせください!

Matteo Duò Kinsta

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