WordPressで記事を更新したときに出る「更新に失敗しました。返答が正しい JSON レスポンスではありません。」
というエラーは、WordPressのブロックエディターがサーバーと正常に通信できていないときに出ます。
主な原因
特に多い原因は、REST APIの通信エラーです。
WordPressのブロックエディターは、記事を保存するときに通常の画面更新ではなく、REST APIという仕組みを使って裏側でデータを送信します。
その通信が途中で止まったり、サーバーから想定外の返答が返ってきたりすると、このエラーになります。
1. パーマリンク設定や .htaccess の不具合
一番多い原因です。
WordPressのURL設定や .htaccess が壊れていると、REST APIのURLに正しくアクセスできず、JSONレスポンスエラーになります。
対策は、管理画面から
設定
パーマリンク
変更せずに「変更を保存」
を押してください。
これだけで .htaccess が再生成され、直ることがあります。
2. REST APIがブロックされている
WordPressは以下のようなURLを使って記事を保存します。
この /wp-json/ にアクセスできない場合、ブロックエディターは保存できません。
確認方法は、ブラウザで以下にアクセスします。
正常であれば、英数字や記号が並んだJSONデータが表示されます。
エラー画面、403、404、真っ白な画面になる場合は、REST APIが正常に動いていません。
3. セキュリティプラグインやWAFが通信を止めている
以下のような機能が原因になることがあります。
WordPressセキュリティプラグイン
サーバー側のWAF
国外IP制限
管理画面アクセス制限
REST API制限
XML-RPC制限
ファイアウォール設定
特にXserver、ConoHa、ロリポップなどでは、WAFが原因になることがあります。
対策として、一時的にWAFをOFFにして記事更新を試します。
直った場合は、WAFが原因です。
ただし、WAFをずっとOFFにするのではなく、必要に応じて除外設定を行うのが安全です。
4. プラグインの競合
プラグインがREST APIの返答に余計な文字やエラーを混ぜてしまうと、JSONとして正しく読み取れなくなります。
特に影響しやすいプラグインは以下です。
キャッシュ系プラグイン
セキュリティ系プラグイン
SEO系プラグイン
広告管理系プラグイン
コード追加系プラグイン
最適化系プラグイン
対策は、一度すべてのプラグインを停止し、更新できるか確認します。
更新できる場合は、プラグインを1つずつ有効化して、どれが原因か特定します。
5. テーマのfunctions.phpやコードスニペットのエラー
functions.phpやCode Snippetsに追加したPHPコードが原因で、REST APIの返答にエラー文が混ざることがあります。
たとえば、以下のような状態です。
PHP Warningが出ている
PHP Noticeが出ている
余計なechoやvar_dumpが入っている
閉じタグの後に空白や文字がある
リダイレクト処理がREST APIにも効いてしまっている
特に、template_redirectやinitでリダイレクト処理を入れている場合は注意です。
REST APIにもリダイレクトがかかると、JSONではなくHTMLが返ってしまい、このエラーになります。
リダイレクト系のコードを入れている場合は、REST APIでは実行しない条件を入れます。
例:
add_action('template_redirect', function() { if (defined('REST_REQUEST') && REST_REQUEST) {
return;
} if (is_admin()) {
return;
} // ここにリダイレクト処理を書く
});
6. SSL設定の不一致
サイトURLが
になっているのに、実際は
で運用している場合、通信エラーになることがあります。
確認する場所は以下です。
設定
一般
WordPress アドレス
サイトアドレス
両方とも https:// になっているか確認してください。
また、httpからhttpsへのリダイレクト設定が正しくない場合もエラーになります。
7. キャッシュが古い
キャッシュ系プラグインやサーバーキャッシュが原因で、古いREST APIの返答が残っていることがあります。
対策は以下です。
WordPressのキャッシュ削除
ブラウザキャッシュ削除
サーバーキャッシュ削除
CDNキャッシュ削除
Cloudflareを使っている場合はキャッシュ削除
特に、WordPress更新後やプラグイン更新後に発生した場合は、キャッシュ削除で直ることがあります。
8. サーバーのPHPエラー
PHPのエラーがREST APIの返答に混ざると、JSONとして認識できなくなります。
本来はJSONだけが返る必要がありますが、そこに
Warning
Notice
Fatal error
などの文字が混ざると、WordPressは「正しいJSONではない」と判断します。
対策は、サーバーのエラーログを確認します。
また、wp-config.phpでデバッグ表示がONになっている場合は、画面出力をOFFにします。
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
まず試すべき対策の順番
1. パーマリンクを再保存する
設定
パーマリンク
変更を保存
まずこれを試してください。
2. /wp-json/ にアクセスする
以下にアクセスします。
JSONが表示されるか確認します。
3. WAFを一時的にOFFにする
サーバー管理画面でWAFをOFFにして、記事更新を試します。
4. キャッシュを削除する
WordPress、サーバー、ブラウザ、CDNのキャッシュを削除します。
5. プラグインを停止して確認する
すべてのプラグインを停止して更新できるか確認します。
6. テーマを一時的に標準テーマへ変更する
Twenty Twenty-Fourなどの標準テーマに切り替えて確認します。
7. functions.phpやCode Snippetsを確認する
最近追加したコードがあれば、一時停止します。
特にリダイレクト系、REST API制限系、管理画面制御系のコードは要確認です。
リダイレクト系コードが原因の場合の注意点
最近、以下のようなコードを追加している場合は要注意です。
add_action('template_redirect', function() {
$request_uri = $_SERVER['REQUEST_URI']; if (preg_match('#^/([0-9]+)/?$#', $request_uri, $m)) {
wp_redirect(home_url("/カテゴリ/{$m[1]}/"), 301);
exit;
}
});
このコード自体は、特定URLを301リダイレクトするためのものです。
ただし、条件の書き方によっては、REST APIや管理画面側の通信にも影響する可能性があります。
安全にするなら、以下のようにします。
add_action('template_redirect', function() { if (is_admin()) {
return;
} if (defined('REST_REQUEST') && REST_REQUEST) {
return;
} if (wp_doing_ajax()) {
return;
} $request_uri = $_SERVER['REQUEST_URI']; if (preg_match('#^/([0-9]+)/?$#', $request_uri, $m)) {
wp_redirect(home_url("/カテゴリ/{$m[1]}/"), 301);
exit;
}
});
これで、管理画面、REST API、Ajax通信には影響しにくくなります。
すぐに直したい場合の応急処置
記事を急いで更新したい場合は、以下の方法もあります。
クラシックエディターを使う
Classic Editorプラグインを入れると、ブロックエディターを使わずに投稿できます。
ただし、根本原因の解決ではありません。
REST APIやサーバー設定の問題は残ったままなので、後で必ず原因を確認してください。
まとめ
「更新に失敗しました。返答が正しい JSON レスポンスではありません。」は、WordPressの保存処理でREST API通信が正常に返ってきていないときに出るエラーです。
まず確認すべき順番は以下です。
- パーマリンクを再保存する
- /wp-json/ にアクセスできるか確認する
- WAFを一時的にOFFにする
- キャッシュを削除する
- プラグインを停止して確認する
- テーマやfunctions.php、Code Snippetsを確認する
- SSL設定とサイトURLを確認する
特に最近コードスニペットやリダイレクト処理を追加した直後に出た場合は、そのコードがREST API通信に影響している可能性が高いです。
