「更新に失敗しました。返答が正しい JSON レスポンスではありません。」の原因と対策

WordPressで記事を更新したときに出る「更新に失敗しました。返答が正しい JSON レスポンスではありません。」

というエラーは、WordPressのブロックエディターがサーバーと正常に通信できていないときに出ます。

主な原因

特に多い原因は、REST APIの通信エラーです。

WordPressのブロックエディターは、記事を保存するときに通常の画面更新ではなく、REST APIという仕組みを使って裏側でデータを送信します。

その通信が途中で止まったり、サーバーから想定外の返答が返ってきたりすると、このエラーになります。

1. パーマリンク設定や .htaccess の不具合

一番多い原因です。

WordPressのURL設定や .htaccess が壊れていると、REST APIのURLに正しくアクセスできず、JSONレスポンスエラーになります。

対策は、管理画面から

設定
パーマリンク
変更せずに「変更を保存」

を押してください。

これだけで .htaccess が再生成され、直ることがあります。

2. REST APIがブロックされている

WordPressは以下のようなURLを使って記事を保存します。

https://example.com/wp-json

この /wp-json/ にアクセスできない場合、ブロックエディターは保存できません。

確認方法は、ブラウザで以下にアクセスします。

https://自分のドメイン/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が

http://example.com

になっているのに、実際は

https://example.com

で運用している場合、通信エラーになることがあります。

確認する場所は以下です。

設定
一般
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/ にアクセスする

以下にアクセスします。

https://自分のドメイン/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通信が正常に返ってきていないときに出るエラーです。

まず確認すべき順番は以下です。

  1. パーマリンクを再保存する
  2. /wp-json/ にアクセスできるか確認する
  3. WAFを一時的にOFFにする
  4. キャッシュを削除する
  5. プラグインを停止して確認する
  6. テーマやfunctions.php、Code Snippetsを確認する
  7. SSL設定とサイトURLを確認する

特に最近コードスニペットやリダイレクト処理を追加した直後に出た場合は、そのコードがREST API通信に影響している可能性が高いです。