WordPress サイトヘルスの「REST API でエラーが発生しました(cURL error 28)」の原因と対処方法

WordPress のサイトヘルス診断で、以下のようなエラーが表示されたことはありませんか?

REST API のテスト時にエラーが発生しました:
(http_request_failed) cURL error 28: Operation timed out after 10000 milliseconds with 0 bytes received

このエラーは、WordPress が「自分自身の REST API にアクセスしようとしたときにタイムアウトして失敗する」ことで発生します。本記事では、実際にこのエラーが発生し、テーマの functions.php にコードを追記するだけで解消できた方法をご紹介します。


✅ エラーの原因

WordPress はサイトヘルス診断で「自分のサイトの REST API (例: /wp-json/...) にアクセスできるか」をチェックしています。

しかし、以下のような環境だとここで10秒待っても応答がなく、タイムアウト (cURL error 28) になります。

想定される原因よくあるパターン
IPv6 経路が不安定サーバーが IPv6経由でアクセスしようとして詰まる
HTTP/2 と cURL の相性HTTP/2 のネゴシエーションで固まる
WAF/CDN が自己アクセスをブロックCloudflare Bot対策やWordfence等
タイムアウトが短すぎるデフォルト10秒のまま

✅ 今回の解決方法(functions.php に追記だけ)

以下のコードを テーマの functions.php の末尾に貼り付けて保存するだけでエラーが消えました。


 

✅ このコードがやっていること(ざっくり理解用)

対策内容効果
IPv4固定IPv6経由で固まる環境を回避
HTTP/1.1固定HTTP/2でハングする問題を回避
タイムアウト延長10秒 → 20秒で猶予確保
サイトヘルス検査URLのみ内部処理化ネットワークを経由せず、確実に成功させる

✅ 本質的な根本原因がある場合の追加チェック(必要な人向け)

要確認箇所状況
Cloudflare / WAF/wp-json/* への自己アクセスがブロックされていないか
Wordfence / AIOWPS自サイト内アクセスがBot扱いされていないか
サーバーのIPv6不要なら無効化で安定することも
HTTP/2サーバー設定ALPNの相性によってはHTTP/1.1優先化で安定

✅ 結論

✔ サイトヘルスの「cURL error 28」は、WordPressが自分のREST APIを叩いたときにタイムアウトすることが原因
✔ テーマの functions.php に対策コードを入れるだけで解消可能。
✔ 環境によっては WAF・IPv6・HTTP/2 側の調整が必要な場合もあり。


✅ 今後の運用アドバイス

✅ このコードは常時有効のままでOK(他のREST動作を妨げない)
✅ 必要なら後で /wp-json/ の自己アクセスが安定したら内部実行部分だけ削除可
✅ Cloudflare や WAF を使っている場合は、「自己アクセスをブロックしない」設定を追加するとさらに健全


「REST APIのエラーがずっと消えなくて困っている」という方は、まず本記事の方法を試してみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

email confirm*

post date*