WordPressサイトヘルスの「cURL error 28: Operation timed out」は、WordPressから外部または自サイトへのHTTP通信が制限時間内に完了しなかったエラーです。更新確認、REST API、外部API、バックアップ先通信など、失敗したURLと所要時間をログで特定し、タイムアウト値だけを延ばす前にDNS・SSL・WAF・相手先応答を確認します。
最初に結論:失敗URLと通信方向を特定し、DNS・SSL・遮断を順に確認する
- サイトヘルスのエラー全文とURL、秒数を保存する
- 同時刻のWordPressデバッグログとPHPログを確認する
- 自サイト向けか外部サービス向けかを分ける
- DNS解決、SSL証明書、WAF・Basic認証を確認する
- 原因修正後に該当機能とサイトヘルスを再実行する
「28」は通信が規定時間で終わらなかった結果で、原因名ではありません。相手先障害、名前解決、IPv6経路、SSL検証、ファイアウォール、重い自サイト処理まで候補があります。
cURL error 28で確認すべき通信先
WordPressはwp_remote_getなどを通じてWordPress.org、ライセンスサーバー、決済、メール、REST API、自サイトのループバックへ接続します。エラー文のURLと「after 10001 milliseconds」などの時間が、どの機能のどこで待ったかを示します。
| 確認結果 | 疑う場所 | 次の行動 |
|---|---|---|
| wp-jsonや自サイトURL | ループバック・REST API | サイトヘルスとWAFを確認 |
| api.wordpress.org | DNS・外向き通信・一時障害 | 名前解決と公式稼働状況を確認 |
| 特定プラグインのAPI | 相手先・認証・製品設定 | 製品ログと資格情報を確認 |
| SSL certificate文言もある | 証明書チェーン・時刻 | 証明書とサーバー時刻を確認 |
手順1:エラー全文からURLと時間を読む
サイトヘルスの項目を展開し、ホスト名、ポート、タイムアウト秒数、併記されたSSLやDNS文言を保存します。エラーが出た画面だけでなく、その直前に行った更新・送信・API同期も記録します。
同じ時刻のPHPログに呼び出し元プラグインのパスがあれば、機能を特定できます。URLに認証情報が含まれる場合は伏せてサポートへ共有します。
手順2:自サイトへのループバックを確認する
「ツール → サイトヘルス」でREST APIとループバックの両方を確認します。Basic認証、メンテナンスモード、WAF、IP制限がサーバー自身からのアクセスを拒否していないかを見ます。
https://自サイト/wp-json/
が未ログインでJSONを返すか確認します。404や403ならパーマリンク、セキュリティ設定、REST制限を切り分けます。
手順3:DNS・SSL・外向き通信を確認する
対象ホストが正しいIPへ名前解決できるか、SSL証明書の期限と中間証明書が正しいかを確認します。サーバー時刻のずれもTLS検証へ影響します。
外部サービス一件だけなら相手先の障害情報とAPI制限を確認します。すべての外向き通信が止まる場合はサーバーのファイアウォール、プロキシ、DNSをサポートへ確認します。
タイムアウト延長を最後にする理由
大容量処理など正常に時間がかかる根拠がある場合だけ、製品の公式設定で待ち時間を段階的に延ばします。相手が応答しない状態で延長すると、管理画面やcronの待ち時間が長くなります。
修正後は更新確認、予約処理、該当API、サイトヘルスを再実行し、処理時間も記録します。エラーが消えても機能結果が届かなければ未解決です。
エラー番号より、URLと何秒待ったかを見るのが大切なんですね。
自分のサイト向けか外部向けかを先に分けます。
その順番なら、WAFと相手先障害を混同しません。
タイムアウト延長は、正常な長時間処理だと確認できた場合だけにしましょう。
サイトヘルスだけでなく、更新やAPIの結果も確認します。
通信が実際に完了していれば、安心して直ったと言えますね!
症状ごとの判断をもう一段深くする
wp-jsonや自サイトURL
この状態では、まず ループバック・REST API を優先します。サイトヘルスとWAFを確認だけで結論を出さず、変更前の画面・発生時刻・対象URLを残し、同じ条件で一項目ずつ比較してください。別の症状まで同時に出る場合は、個別ページより共通するサーバー設定やWordPress全体の処理を先に確認します。
api.wordpress.org
この状態では、まず DNS・外向き通信・一時障害 を優先します。名前解決と公式稼働状況を確認だけで結論を出さず、変更前の画面・発生時刻・対象URLを残し、同じ条件で一項目ずつ比較してください。別の症状まで同時に出る場合は、個別ページより共通するサーバー設定やWordPress全体の処理を先に確認します。
特定プラグインのAPI
この状態では、まず 相手先・認証・製品設定 を優先します。製品ログと資格情報を確認だけで結論を出さず、変更前の画面・発生時刻・対象URLを残し、同じ条件で一項目ずつ比較してください。別の症状まで同時に出る場合は、個別ページより共通するサーバー設定やWordPress全体の処理を先に確認します。
SSL certificate文言もある
この状態では、まず 証明書チェーン・時刻 を優先します。証明書とサーバー時刻を確認だけで結論を出さず、変更前の画面・発生時刻・対象URLを残し、同じ条件で一項目ずつ比較してください。別の症状まで同時に出る場合は、個別ページより共通するサーバー設定やWordPress全体の処理を先に確認します。
管理画面へ入れる場合・入れない場合の進め方
管理画面へ入れる場合
サイトヘルス、対象機能の設定画面、更新履歴を先に確認し、直前の変更を一件だけ戻します。変更後は未ログイン画面を開き、キャッシュされた管理者表示だけで判断しません。
管理画面へ入れない場合
サーバーパネルのファイル管理とエラーログを使い、対象ドメインとWordPress設置先を照合します。フォルダ名変更などの一時停止は対象一件に限定し、元の名前と変更時刻を記録します。復旧後は管理画面から正式な更新・設定を行い、一時変更を放置しません。
サポートへ相談するときに伝える内容
「直りません」だけでなく、記事タイトルの症状が出たURL、発生時刻、エラー全文、直前の操作、再現手順、試した項目と結果、PHP・WordPress・対象製品のバージョンをまとめます。ログに個人情報、Cookie、APIキー、パスワードがあれば伏せてください。
サーバー会社にはHTTP状態・PHPログ・DNSやWAFなど基盤側の確認を、プラグイン提供元には製品名・バージョン・再現操作を伝えます。問い合わせ先を分けると、同じ確認を何度も繰り返さずに済みます。
直ったと判断する条件
サイトヘルスの再検査でエラーが消え、失敗していた更新・REST・API処理が規定時間内に完了し、PHPログへ同じタイムアウトが増えない状態です。
- 失敗URLと秒数を記録した
- 通信方向を分類した
- DNSとSSLを確認した
- 遮断設定を必要範囲だけ修正した
- 該当機能の結果を確認した
復旧作業を落ち着いて進められるサーバー環境
DNS、SSL、WAF、PHPログを管理画面から確認し、国内サポートへエラー全文を相談できる環境は、通信タイムアウトの切り分けに役立ちます。
広告・PRを含みます。料金・特典は公式ページで最新条件をご確認ください。
よくある質問
タイムアウトを30秒へ増やせば直りますか?
原因が遅い正常処理なら改善する場合がありますが、DNSや遮断なら待ち時間が伸びるだけです。
サイトヘルスの警告は無視できますか?
更新、cron、REST APIなどの機能へ影響するため、失敗URLと対象機能を確認してください。
IPv6を無効にすべきですか?
経路問題の根拠がある場合の切り分け候補です。全体設定を変える前にDNS結果と接続ログを確認します。
まとめ:番号ではなく、失敗URLと通信結果を見る
エラー全文からURLと秒数を読み、自サイト通信か外部通信かを分けます。DNS、SSL、WAF、相手先を直し、サイトヘルスだけでなく失敗した機能の結果まで成功して完了です。
通信ログやSSL・WAF設定を一つのパネルで確認したい場合は、失敗URLを特定してからサーバー環境を比較できます。
エックスサーバーの公式情報を確認する