症状から原因を引く

WordPress の不具合を、見えている症状直前にやったことから引く索引です。 原因の見当がつかなくても、ここから該当する記事を探せます。


見えているものから引く

見えているものまず疑う記事
真っ白で何も出ないFatal error + display_errors が OffPHP を上げたらサイトが白画面になった
「このサイトで重大なエラーが発生しました。」テーマかプラグインの Fatalfunctions.php を壊したときの復旧 / プラグインの競合
500 Internal Server Error.htaccess か PHP.htaccess で 500 エラー
「データベース接続確立エラー」認証情報・ホスト名・DB 名・MySQL 停止・接続数原因を切り分ける
「メンテナンスのためしばらく利用できません」が消えない.maintenance の残留.maintenance と 10 分ルール
502 Bad Gateway接続が拒否された(参照先のズレ).htaccess で 500 エラー の 500/502/504 表
504 Gateway Timeout接続して無応答(プロセス停止・ハング)同上
「このページにアクセスする権限がありません。」権限不足(どの権限かは画面に出ない)原因の権限を特定する
「更新に失敗しました。返答が正しい JSON レスポンスではありません」REST API が JSON を返していない原因を見つける
ログインできないCookie・URL 設定・メール・Fatal の 4 パターン症状別に原因を絞る
メールが届かないwp_mail() が false か、届かないだけかどちらなのかを分ける
フォームの送信ボタンが止まらないREST の到達性(nonce ではない)Contact Form 7 が送信できない
サイトは見えるのに管理画面に入れないサイト URL の設定ミスログインできない のパターン 2
公開ボタンが無い / 画像を追加できない権限不足(エラーは出ない)原因の権限を特定する
監視は正常なのに壊れているステータス 200 で返る障害サイトが死んでいるのに監視は 200 を返す
エラーは出ないが数字や分岐がおかしいPHP 8 で == の比較結果が変わった7 で動いていたコードが 8 で壊れる
改ざんが疑われるチェックサムでは wp-content を見ていないverify-checksums だけでは足りない
投稿だけ 404(トップは出る).htaccess が無い/効いていない。Apache だけで起きる「保存し直す」が何をしているのか
保存したのに一部だけ消えたmax_input_vars 超過。警告は debug.log に出ない黙って捨てられている
画像をアップロードできないサイズ 2 種類か、年月ディレクトリの権限「HTTP エラー」の中身
RSS / サイトマップだけ壊れるXML の前に 1 バイトでも出力があると壊れるXML は 1 バイトも許さない
予約投稿されないWP-Cron のループバック失敗。アクセスが無いと動かないWP-Cron の仕組み
管理画面だけ真っ白(フロントは正常)管理画面でだけ動くコードの Fatal切り分けの型が変わる
絵文字が消える / 時刻が 9 時間ずれるutf8utf8mb4、PHP と WordPress のタイムゾーン移行後の定番 2 つ
設定ファイルが漏れていないか心配危険なのは本体ではなくバックアップファイル実測したら漏れたのは

調べ方・診断ツール

状況記事
ログを見ても何も出ていないログはどこにあり、何を見るのか — 起動前のエラーは debug.log に入らない
サイトヘルスに「重大な問題」が出ている何を見ているのか・偽陽性の見分け方

遅い

状況まず疑う記事
全ページが一律に遅いwp_optionsautoload 肥大WordPress が重い
管理画面だけ遅い外部通信(正常でも 0.8 秒、遮断なら 5 秒待ち)同上
特定のページだけ遅いクエリ。slow.logRows_examined同上

検索・セキュリティ

状況記事
検索結果に出てこないnoindex・robots.txt・サイトマップを 1 分で確認
知らない管理者がいる / スパムリンクが埋まっているデータベース側の痕跡を探す
攻撃者から何が見えているか知りたい既定の WordPress を実測した
不審なログイン試行が大量に来る同上(ログイン試行の制限は既定では無い)
プラグインの脆弱性が心配 / 開発時の権限チェック権限チェックの不備を実測する

表示がおかしい(ページ自体は 200 で返っている)

見えているものまず疑う記事
CSS が効かない / JS が動かないアセットが 404 か 403。読めていないのか効いていないのかまず読み込まれているか確認する
ブロックエディターが真っ白 / Gutenberg が使えない1.4MB の JS が読めているか、REST が生きているか1.4MB の JS が読めているか
管理画面だけ表示が崩れるload-styles.php / load-scripts.php が通っているか結合配信を確認する
スマホだけレイアウトが崩れるサーバーが同じ HTML を返しているかを先に確定させるサーバーは同じものを返している
画像が表示されない(アップロードは成功)404 か 403 か、URL が違うか404 の中身は 20KB の HTML
リダイレクトを繰り返すログに何も出ないループと 500 になるループがある2 種類のループ
SSL 化したら画像・CSS が読み込めない混在コンテンツ。置換は guid を除外する検出と置換

直前にやったことから引く

こちらのほうが精度が高い。時間的に近いものが原因である確率は高い。

直前にやったこと記事
PHP のバージョンを変えたPHP を上げたらサイトが白画面になった / 7 で動いていたコードが 8 で壊れる
プラグインを更新したプラグインの競合
プラグインを有効化した同上(ただし有効化は WordPress が止めるので稀)
functions.php を編集したfunctions.php を壊したときの復旧
.htaccess を編集した.htaccess で 500 エラー
SSL を設定した / 独自ドメインに変えたログインできない のパターン 2
サーバーを移行した原因を切り分ける(DB) / ログインできない
WordPress 本体を更新した(途中で止まった).maintenance と 10 分ルール
セキュリティプラグインを入れた更新に失敗しました(REST 遮断) / SiteGuard でログインできない
キャッシュプラグインを入れたプラグインの競合
何もしていない自動更新か、接続数枯渇(時々落ちるなら後者)
プラグインを増やし続けたWordPress が重いautoload の肥大)
制作中にインデックス設定を切った検索結果に出てこない
サーバーを移行した(文字・時刻)絵文字が消える / 時刻が 9 時間ずれる
メニューやカスタムフィールドを大量に編集した保存したのに一部だけ消えた
wp-config.php をコピー・退避した設定ファイルの露出
月が変わった画像をアップロードできない(年月ディレクトリの権限)
SSL を入れたSSL 化したら画像・CSS が読み込めない / リダイレクトを繰り返す
「セキュリティ強化」の設定を入れたブロックエディターが真っ白wp-includes を丸ごと塞ぐと壊れる)
キャッシュ・最適化プラグインを入れたCSS が効かない / JS が動かない / スマホだけ崩れる

最初に取る 4 つの値

原因を推測する前に取る。ステータスコードだけでは判断できない (サイトが死んでいても 200 が返るケースを 4 つ実測している)。

# 1. どこが生きているか
curl -s -o /dev/null -w 'top   %{http_code}\n' https://example.com/
curl -s -o /dev/null -w 'login %{http_code}\n' https://example.com/wp-login.php
curl -s -o /dev/null -w 'admin %{http_code}\n' https://example.com/wp-admin/

# 2. 本文の長さ(200 でも中身が死んでいることがある)
curl -s https://example.com/ | wc -c

# 3. ログイン用 Cookie が出ているか(0 ならログインは絶対に成功しない)
curl -s -o /dev/null -D - https://example.com/wp-login.php | grep -ci set-cookie

# 4. REST API が JSON を返しているか
curl -s -o /dev/null -D - https://example.com/wp-json/ | grep -i content-type

「表示がおかしい」系は、ページ内の CSS / JS / 画像が読めているかも見ます。 ブラウザの開発者ツールの「ネットワーク」タブで、404 や 403 の行を探します。

値の読み方

観測意味
トップ 200・管理画面 500権限かリダイレクト設定。テーマ・プラグインの Fatal ではない
全部 500テーマかプラグインの Fatal。入口が全部閉じている
全部 503 + Retry-After.maintenance の残留
200 なのに本文が極端に短いFatal が本文に出ている(display_errors が有効)
200 で本文 0 バイトテーマが見つからない状態
Set-Cookie が 0ヘッダより前に出力がある(functions.php の末尾など)
REST が text/html遮断されているか、REST 内で Fatal
アセットに 404 があるファイルが無い。404 でも 20KB の HTML が返るので転送量では判断できない
アセットに 403 があるサーバー設定で塞がれている(wp-includes を丸ごと拒否など)
アセットが全部 200 なのに崩れるキャッシュ・読み込み順・結合プラグイン・混在コンテンツ

復旧手段の早見表

環境プラグインを止めるテーマを戻す
WP-CLI があるwp --skip-plugins plugin deactivate --allwp --skip-themes theme activate <別テーマ>
FTP だけ該当フォルダをリネームし、管理画面に一度入るテーマのフォルダをリネーム
phpMyAdmin だけactive_plugins を空にtemplate / stylesheet を更新

Fatal が起きているときは WP-CLI 単体でも落ちる。--skip-plugins / --skip-themes が必要(実測)。

詳細は WP-CLI が無い環境での復旧


プラグイン名から探す

「Contact Form 7 メール 届かない」のように製品名で探す場合は プラグイン名から引く へ。