最近、サブディレクトリにテスト環境用のWordPressを入れて作業していたところ、固定ページや投稿を公開しようとすると
公開に失敗しました。返答が正しい JSON レスポンスではありません。

というエラーが出てしまいました。ブロックエディタを使っているときに時々見かけるエラーですが、今回はちょっと特殊な原因でした。
だいたいはSSLやサーバーのセキュリティの問題なのですが、それらの基本的な対応を行っても解消されず困ってしまいました。
状況
- 本番環境はドメイン直下にWordPressをインストールして運用中
- サブディレクトリ(例:
/testsite/)に別のWordPressをインストールして検証中 - サブディレクトリ側のWordPressでのみ固定ページや記事を「公開に失敗しました。返答が正しい JSON レスポンスではありません。」状態になる
調べてみると…
ブロックエディタは「REST API」という仕組みを通じて保存や公開を行っています。
そこで https://example.com/testsite/wp-json/ にアクセスしてみると、なぜかトップページにリダイレクトされてしまいました。
でも https://example.com/testsite/?rest_route=/ にアクセスすると、JSONデータ(コードのかたまり)がちゃんと返ってきます。つまりREST自体は生きていて、「/wp-json/」というURLだけが壊れている状態でした。
原因
調べた結果、ルート(本番環境)のWordPressで使っていた Converter for Media というプラグインが .htaccess に特殊なリライトルールを書き込んでいて、それがサブディレクトリにも影響していました。
このプラグインは、アップロードした画像を自動的に WebP/AVIF に変換して軽くする便利なものです。ただ、その仕組みの中で .htaccess に RewriteOptions Inherit を追加します。
その結果、ルート直下のリライトルールがサブディレクトリにも継承され、/wp-json/ へのアクセスがルート側に吸い込まれてしまっていたのです。
解決策
応急処置(すぐ直す方法)
サブディレクトリ側のテーマの functions.php に以下を追記しました:
// REST API のURLを ?rest_route=/ 形式に強制
add_filter('rest_url', function ($url, $path, $blog_id, $scheme) {
$home = home_url('/', $scheme);
return add_query_arg('rest_route', '/' . ltrim($path, '/'), $home);
}, 10, 4);
これでブロックエディタが /wp-json/ ではなく/?rest_route=/wp/v2/... を使うようになり、公開エラーは即解消しました。
このコードは基本的には どのWordPressでもそのまま使えます。
仕組みは「REST API の URL を /wp-json/ から ?rest_route=/ に強制的に書き換える」だけなので、サーバー環境やテーマを問わず動作します。
ただし、通常の環境では /wp-json/ が正常に動くので、このコードは不要です。
あくまで .htaccess の影響などで /wp-json/ が壊れている環境の応急処置 として使うもの、と考えてください。
プラグインの扱いについて
今回の原因だった Converter for Media は「画像を軽くする」ためのプラグインで、止めても見た目や機能には影響がありません。
そのため私はテスト環境では いったん停止して作業を続ける ことにしました。
根本的な解決
- Converter for Media を停止またはアンインストールする
- ルート側の
.htaccessをWordPress標準のものに戻す(設定→パーマリンクで保存すると再生成される) - もし使い続けたいなら、サブディレクトリ環境には影響しないように調整する
まとめ
- ブロックエディタの「JSONレスポンスが正しくありません」は REST APIが動いていない サイン
- サブディレクトリ環境では、ルートのWordPressやプラグインの
.htaccess設定が影響することがある - 今回は Converter for Media が原因で
.htaccessが継承され、/wp-json/が壊れていた - 応急処置として
functions.phpでrest_urlを?rest_route=/に差し替えるとすぐ直る - 画像を軽くするだけのプラグインなので、止めても見た目や機能には影響なし。私は停止して作業を進めた
同じように「サブディレクトリでWordPressを動かしたら公開できない!」という人は、まず /wp-json/ と /?rest_route=/ をチェックしてみてください。



