はじめに (対象読者・この記事でわかること)

この記事は、WordPressサイトを運用していて、突然固定ページや投稿ページが真っ白になってしまい困っている方を対象にしています。特に、PHPに関するエラーが原因である可能性が高いと感じている方や、どのように問題を特定し解決すれば良いか迷っているWebサイト管理者や開発者の方に役立つ情報を提供します。

この記事を読むことで、WordPressの「White Screen of Death(真っ白な画面)」が発生する主な原因がPHPエラーにあることを理解し、具体的なデバッグ手順を通じてその原因を特定し、解決できるようになります。ウェブサイトが停止してしまっても慌てずに対処するための知識と、問題解決のための実践的なステップを身につけることができるでしょう。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。 - WordPressの基本的な操作(管理画面へのログイン、プラグイン・テーマの概念) - FTPクライアント(FileZillaなど)の利用経験、またはレンタルサーバーのファイルマネージャーの操作経験 - PHPに関する基礎的な知識(エラーメッセージを読み解くヒント) - サーバー(レンタルサーバーなど)の基本的なファイル構成理解

なぜWordPressページは真っ白になるのか?PHPエラーのメカニズム

WordPressサイトを訪れた際、本来表示されるはずのコンテンツが一切なく、画面が真っ白になっている状態を「White Screen of Death(WSOD)」、日本語では「死の真っ白画面」と呼びます。この現象は、WordPressユーザーが遭遇する最も恐ろしい問題の一つであり、多くの場合はPHPに関連する致命的なエラーが原因で発生します。

なぜPHPエラーがWSODを引き起こすのでしょうか?WordPressはPHPというプログラミング言語で書かれており、ウェブサーバー上でPHPコードが実行されることで動的なページが生成され、ブラウザに送信されます。このPHPコードの実行中に、文法エラー、関数呼び出しの間違い、メモリ不足、互換性の問題など、回復不能なエラーが発生すると、PHPインタープリタはそこで処理を中断してしまいます。

通常、エラーが発生した場合でも、ブラウザには何らかのエラーメッセージが表示されることが期待されます。しかし、セキュリティや表示の都合上、本番環境のサーバーではPHPのエラー表示が無効になっていることがほとんどです。そのため、エラーの詳細がブラウザに表示されず、PHPの処理が途中で停止した結果、何もコンテンツがレンダリングされない「真っ白な画面」がユーザーに見えることになります。これは、Webサーバーがブラウザに対して「何も返答しない」または「空の応答を返す」状態に陥るためです。

WSODの主な原因としては、以下のようなPHP関連の問題が挙げられます。

  • プラグインの競合またはエラー: 新しく追加したプラグインや既存のプラグインの更新が、他のプラグインやテーマと競合したり、それ自体にエラーが含まれていたりする場合。
  • テーマのエラー: テーマファイル内のPHPコードにエラーがある場合や、テーマの更新によって問題が発生した場合。
  • PHPバージョンの非互換性: WordPress本体、プラグイン、テーマが、現在のPHPバージョンに対応していない、または古すぎるPHPバージョンで実行されている場合。
  • メモリ不足: PHPスクリプトが許可されたメモリ量を超過した場合(例: Allowed memory size of X bytes exhausted エラー)。
  • ファイルパーミッションの問題: WordPressのコアファイルやディレクトリへのアクセス権が不適切である場合。

これらの原因を特定し、解決するためには、PHPのエラー表示を有効にし、一つずつ原因を切り分けていくデバッグ作業が不可欠となります。

WordPressの「死の真っ白画面」を解決する具体的なデバッグ手順

WordPressの真っ白画面に遭遇した際、闇雲に設定を変更したりファイルを削除したりするのは危険です。段階的なデバッグ手順を踏むことで、効率的に原因を特定し、安全に問題を解決することができます。

ステップ1: エラー表示を有効にする

真っ白な画面から脱却するための最初のステップは、何が問題なのかを知ることです。デフォルトでは表示されないPHPエラーメッセージを有効に設定します。

  1. FTPクライアントまたはファイルマネージャーでサーバーに接続する

    • レンタルサーバーのコントロールパネルから提供されているファイルマネージャーを使うか、FileZillaなどのFTPクライアントソフトを使ってWordPressがインストールされているディレクトリ(通常は public_htmlhtdocs )に接続します。
  2. wp-config.php ファイルを編集する

    • WordPressのルートディレクトリにある wp-config.php ファイルを見つけ、ダウンロードしてテキストエディタで開きます。
    • 以下のコードを探します。 php define( 'WP_DEBUG', false );
    • falsetrue に変更します。 php define( 'WP_DEBUG', true );
    • さらに、エラーログをファイルに記録するために、この行の直後(または任意の場所)に以下の2行を追加します。これにより、エラーがブラウザに表示されるだけでなく、wp-content ディレクトリ内の debug.log ファイルにも記録されるようになります。 php define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false ); // エラーをブラウザに表示しない(セキュリティ上推奨) @ini_set( 'display_errors', 0 ); // 同上 WP_DEBUG_DISPLAYfalse にし、@ini_set( 'display_errors', 0 ); とすることで、ブラウザにエラーを直接表示せず、debug.log ファイルにのみ記録する設定になります。本番環境でのデバッグでは、セキュリティの観点からこちらを推奨します。デバッグ中は一時的に WP_DEBUG_DISPLAY', true にしても良いですが、解決したら必ず false に戻しましょう。
    • 変更を保存し、wp-config.php ファイルをサーバーにアップロードし直します。
  3. 問題のページを再読み込みする

    • Webサイトの真っ白になっていたページ(固定ページや投稿ページ)をブラウザで再読み込みします。
    • もしエラーが表示されるようになったら、そのメッセージを注意深く読み、どのファイル(パスと行番号)でエラーが発生しているかを確認します。エラーメッセージは、問題の根本原因を特定するための重要な手がかりです。
    • エラーが表示されず、まだ真っ白な場合は、wp-content/debug.log ファイルをFTPでダウンロードして内容を確認します。

ステップ2: 原因の特定と切り分け

エラーメッセージが表示されれば、原因を特定しやすくなりますが、それでも解決できない場合やエラーメッセージが不明瞭な場合は、以下の方法で一つずつ原因を切り分けていきます。

サブステップ2-1: プラグインの停止

多くのWSODは、プラグインの競合やエラーによって引き起こされます。

  1. 全てのプラグインを無効化する

    • WordPress管理画面にアクセスできる場合は、プラグイン -> インストール済みプラグイン に移動し、全てのプラグインを選択して「停止」をクリックします。
    • 管理画面にアクセスできない場合: FTPクライアントで wp-content ディレクトリに移動し、plugins ディレクトリの名前を一時的に plugins_old などに変更します。これにより、WordPressは全てのプラグインを見つけられなくなり、自動的に無効化されます。
  2. 問題のページを再読み込みする

    • プラグインを無効化した後、問題のページが正常に表示されるか確認します。
    • もし表示されるようになった場合: プラグインが原因です。plugins_old の名前を元の plugins に戻し、WordPress管理画面から一つずつプラグインを有効化してはページを再読み込みし、どのプラグインが問題を引き起こしているかを特定します。問題のプラグインが特定できたら、そのプラグインを削除するか、代替を探すか、開発元に問い合わせるかを検討します。
    • まだ表示されない場合: プラグインが原因ではない可能性が高いです。次のステップに進みます。

サブステップ2-2: テーマの変更

次に、現在使用しているテーマに問題がないか確認します。

  1. テーマをデフォルトテーマに変更する

    • WordPress管理画面にアクセスできる場合は、外観 -> テーマ に移動し、WordPressに最初から含まれているデフォルトテーマ(例: Twenty Twenty-Four, Twenty Twenty-Threeなど)を有効化します。
    • 管理画面にアクセスできない場合: FTPクライアントで wp-content/themes ディレクトリに移動します。現在使用しているテーマのディレクトリ(例: your-theme-name)の名前を一時的に your-theme-name_old などに変更します。WordPressは、有効化されていたテーマが見つからない場合、自動的にデフォルトテーマ(存在すれば)に切り替えます。もしデフォルトテーマが存在しない場合は、どれか一つ(例: Twenty Twenty-Four)のテーマディレクトリをアップロードして有効化を試みてください。
  2. 問題のページを再読み込みする

    • テーマを変更した後、問題のページが正常に表示されるか確認します。
    • もし表示されるようになった場合: テーマが原因です。元のテーマに戻したい場合は、テーマの開発元に問い合わせるか、最新版にアップデートしてみてください。あるいは、新しいテーマへの移行を検討しましょう。
    • まだ表示されない場合: テーマが原因ではない可能性が高いです。次のステップに進みます。

サブステップ2-3: PHPバージョンの確認と変更

WordPressは特定のPHPバージョンで最適に動作します。古すぎるPHPバージョンや、最新すぎて互換性のないPHPバージョンが問題となることがあります。

  1. レンタルサーバーのコントロールパネルでPHPバージョンを確認する

    • 多くのレンタルサーバーでは、コントロールパネルからPHPバージョンを簡単に確認し、変更できます。現在のPHPバージョンがWordPressの推奨バージョン(通常は最新から一つ前の安定版)と一致しているか確認します。
    • WordPress公式サイトで推奨PHPバージョンを確認しましょう。
  2. PHPバージョンを変更してみる

    • 現在のPHPバージョンが推奨バージョンより大幅に古い場合や、最新すぎる場合は、推奨バージョンに変更してみます。例えば、PHP 7.4からPHP 8.1、またはPHP 8.1からPHP 8.0にダウングレードするなど、試行錯誤してみましょう。
    • PHPバージョンを変更後、問題のページが正常に表示されるか確認します。

サブステップ2-4: メモリ制限の引き上げ

PHPスクリプトが実行に必要なメモリ量を確保できない場合も、WSODが発生することがあります。エラーメッセージに「Allowed memory size of X bytes exhausted」と表示されている場合は、この問題です。

  1. wp-config.php または php.ini でメモリ制限を引き上げる

    • FTPで wp-config.php ファイルをダウンロードし、以下の行を追記または変更します(define( 'WP_MEMORY_LIMIT', '256M' ); の行があれば変更)。 php define( 'WP_MEMORY_LIMIT', '256M' ); // 必要に応じて512Mなどに増やす この行は /* That's all, stop editing! Happy publishing. */ の行より上に追加します。
    • レンタルサーバーによっては、.htaccess ファイルや php.ini ファイルでメモリ制限を設定できる場合もあります。php.ini で設定する場合は、memory_limit = 256M のように記述します。サーバーのドキュメントを参照してください。
  2. 問題のページを再読み込みする

    • メモリ制限を変更した後、問題のページが正常に表示されるか確認します。

ハマった点やエラー解決

  • エラーメッセージが全く表示されない場合:

    • wp-config.phpWP_DEBUG 設定が正しく true になっているか確認します。
    • サーバー側のPHP設定で display_errors が完全に無効になっている可能性があります。レンタルサーバーのコントロールパネルでPHP設定を確認するか、サーバーのサポートに問い合わせる必要があります。
    • debug.log ファイルが生成されているか確認します。生成されていない場合、wp-content ディレクトリのパーミッションが適切でない可能性があります(通常は755)。
  • 「Allowed memory size of X bytes exhausted」エラー:

    • 上記「サブステップ2-4: メモリ制限の引き上げ」の手順でメモリ制限を増やしましょう。それでも解決しない場合、特定のプラグインやテーマが過剰なメモリを消費している可能性があります。
  • FTPでのファイル編集がうまくいかない場合:

    • FTPクライアントの接続設定を確認します。
    • レンタルサーバーのファイルマネージャーを利用することも検討します。
    • パーミッションの問題でファイルを編集・保存できない場合があります。その際はディレクトリやファイルのパーミッションを一時的に変更する必要があるかもしれません(ただし、セキュリティリスクに注意)。
  • 変更が反映されない場合:

    • ブラウザのキャッシュをクリアするか、シークレットモード(プライベートブラウズ)でアクセスしてみてください。
    • W3 Total CacheやWP Super Cacheなどのキャッシュ系プラグインを使用している場合、それらのキャッシュをクリアする必要があるかもしれません。管理画面にアクセスできない場合は、FTPで当該プラグインのディレクトリ名を一時的に変更して無効化する(前述のプラグイン無効化と同じ手順)と効果的です。

解決策

上記の手順でエラーメッセージが表示され、原因の切り分けが進むことで、具体的な解決策が見えてきます。

  • 特定のエラーメッセージがある場合: エラーメッセージに記載されているファイルと行番号を確認し、そのコードを修正します。もしプラグインやテーマのコードであれば、開発者に修正を依頼するか、その部分を無効化する、または代替手段を探すことを検討します。
  • プラグインが原因と特定された場合: そのプラグインを削除し、別の代替プラグインを探すか、プラグインの開発元にサポートを依頼します。
  • テーマが原因と特定された場合: デフォルトテーマに戻すか、テーマをアップデートする、または別のテーマに変更します。
  • PHPバージョンが原因の場合: 互換性のあるPHPバージョンに戻すか、WordPress本体、プラグイン、テーマを最新版に更新して互換性の問題を解消します。
  • メモリ制限が原因の場合: wp-config.php でメモリ制限を引き上げます。

問題が解決し、Webサイトが正常に表示されるようになったら、wp-config.php ファイルの WP_DEBUG を必ず false に戻し、WP_DEBUG_LOGfalse に設定し直してください。本番環境でデバッグ情報を表示したりログを記録し続けたりするのは、セキュリティ上のリスクとなります。

まとめ

本記事では、WordPressの固定ページや投稿ページが真っ白になってしまう「White Screen of Death (WSOD)」というPHPエラーが原因で発生する問題について、その原因の特定から具体的な解決策までを詳細に解説しました。

  • 要点1: まず wp-config.php ファイルを編集し、WP_DEBUGtrue に設定してエラー表示を有効にすることが、問題解決の第一歩です。
  • 要点2: エラーメッセージが表示されない場合や、原因が不明な場合は、プラグインやテーマを一つずつ停止・変更することで、原因を効率的に切り分けることができます。
  • 要点3: PHPバージョンの互換性やメモリ制限不足もWSODの一般的な原因であり、これらも確認・調整が必要です。

この記事を通して、WordPressサイトが真っ白になった際も冷静に、そして計画的に対処し、ご自身で問題を解決する力が得られたのではないでしょうか。Webサイトの安定運用のためには、定期的なバックアップと、今回学んだデバッグスキルが非常に重要となります。

今後は、WordPressのパフォーマンス最適化やセキュリティ強化についても記事にする予定です。

参考資料