サイトヘルスのREST APIエラー|3種類の表示の違い
WordPressのサイトヘルスに出る「REST API で予期しない結果が発生しました」は、WordPressが自分のサーバーへREST APIの確認を送り、200(成功)以外の応答が返ってきたという意味です。原因は、その下に出る「REST API レスポンス」の数字でほぼ見分けられます。
似た表示に「REST API でエラーが発生しました」「REST API は正しく動作しませんでした」があります。3つは失敗した段階が違うので、対処も変わります。
(確認:WordPress本体のソースコード wp-admin/includes/class-wp-site-health.php と、日本語の翻訳ファイル(WordPress 6.8.3)で確認しています)
サイトヘルスは何を確かめているか
サイトヘルスのREST APIの確認は、WordPressのサーバーが、自分自身に向けて次のURLへアクセスするものです。
https://(あなたのサイト)/wp-json/wp/v2/types/post?context=edit
- ログイン中の管理者の情報(Cookie と、REST API用の確認コード)を付けて送る
- 10秒で応答が無ければ打ち切る
- 返ってきた中身に、権限の情報(
capabilities)が入っているかまで確かめる
WordPress本体の説明では、REST APIは「WordPressと他のアプリケーションがサーバーと通信する方法の1つ」で、ブロックエディターの画面も投稿の表示と保存にREST APIを使っています。そのため、この確認が失敗していると、投稿の保存や外部からの投稿も失敗することがあります。
3つの表示の違い
| 表示 | 何が起きたか | 下に出る情報 |
|---|---|---|
| REST API でエラーが発生しました | 通信そのものが失敗(接続できない・10秒で応答が無い) | エラーコードとメッセージ(例:cURL error 28) |
| REST API で予期しない結果が発生しました | 応答は来たが、200以外だった | HTTPの数字(例:(403) Forbidden) |
| REST API は正しく動作しませんでした | 200で返ったが、中身に権限の情報が無かった | — |
問題が無い時は「REST API が利用可能です」と表示されます。
「予期しない結果」は数字で見分ける
サイトヘルスの詳細を開くと、次のような行があります。
REST API エンドポイント: https://…/wp-json/wp/v2/types/post?context=edit
REST API レスポンス: (403) Forbidden
括弧の中の数字が、サーバーが返した応答の番号です。
| 数字 | 意味 | よくある原因 |
|---|---|---|
| 403 | アクセスを拒否された | サーバーのWAF(不正アクセスを防ぐ機能)、セキュリティ系プラグインのREST APIの制限 |
| 401 | 認証が通らない | サイト全体にかけたBasic認証、ログイン状態を扱うプラグイン |
| 404 | そのURLが無い | パーマリンクの設定・.htaccess の書き換えで /wp-json/ へ届かない |
| 500番台 | サーバー側でエラー | プラグイン・テーマのPHPのエラー、サーバーの一時的な不調 |
WordPress本体は、サイト全体にBasic認証がかかっている場合、その情報も付けて確認を送る作りになっています。それでも401になる場合は、プラグイン側の制限を疑います。
403の場合:サーバーとプラグインを順に疑う
- セキュリティ系プラグインを一時的に止めて、サイトヘルスを開き直す。直ればそのプラグインのREST APIの設定を見直す
- 直らなければ、サーバーの管理画面のWAFを一時的に止めて確かめる。止めたままにせず、原因が分かったら戻す
エックスサーバーの場合の確認の場所はエックスサーバーでREST APIが403になる時の確認にまとめています。
404の場合:パーマリンクを保存し直す
「設定」→「パーマリンク」を開き、何も変えずに「変更を保存」を押すと、URLの書き換えの設定が作り直されます。それでも直らない場合は、.htaccess が書き換えられていないかを確認します。
自分のブラウザで確かめる方法
サイトヘルスはサーバーから自分自身への確認なので、ブラウザから見た結果とは違うことがあります。切り分けのために、ブラウザで次の2つを開いてみてください。
https://(あなたのサイト)/wp-json/— サイト名などが並んだ文字(JSON)が出れば、REST API自体は動いているhttps://(あなたのサイト)/?rest_route=/— 上が404でもこちらで表示されるなら、URLの書き換え(パーマリンク・.htaccess)の問題
ブラウザでは表示されるのに、サイトヘルスだけ失敗する場合は、サーバーが自分自身へアクセスする時だけ止められています。WAFや、サーバーから外への通信の制限を疑います。
「エラーが発生しました」の場合
こちらは応答の番号すら返っていない状態です。よく見るのは cURL error 28(時間切れ)で、10秒以内に自分自身から応答が返らなかったことを示します。
- サーバーが重い、または一時的な不調(時間を置いて開き直す)
- サーバーが自分のドメインの場所を正しく引けない(ドメインの移管・サーバーの移転の直後など)
- 重い処理をするプラグインが、確認のたびに動いている
同じサイトヘルスに「ループバックリクエスト」の警告も出ている場合は、同じ原因のことが多いです。
放置してよいか
ブロックエディターで投稿を保存でき、外部から投稿する仕組みも使っていないなら、急ぐ必要はありません。ただし、次の場合は直しておく必要があります。
- 投稿や固定ページの保存で「更新に失敗しました」が出る
- 自分のパソコンやツールから、REST API経由でWordPressに投稿している(アプリケーションパスワードで外部から投稿する方法)
- REST APIを使うプラグインを入れている
外部から投稿した時に出るエラー別の切り分けはWordPress自動投稿でよくあるエラーと切り分け方にあります。
当サイトで販売しているAmazon Auto Postsも、自分のパソコンからWordPressのREST APIを通して投稿する仕組みです。導入前に確認することはAmazon Auto Posts 導入前に確認することにまとめています。
まとめ
- サイトヘルスは、サーバーから自分自身へ
/wp-json/wp/v2/types/post?context=editを確認している(10秒で打ち切り) - 「エラーが発生しました」=通信の失敗、「予期しない結果」=200以外、「正しく動作しませんでした」=中身が違う
- 「予期しない結果」はレスポンスの数字で見分ける。403はWAF・セキュリティ系プラグイン、404はパーマリンク
- ブラウザで
/wp-json/と/?rest_route=/を開くと、原因の場所を絞れる


