「返答が正しい JSON レスポンスではありません。」と表示されたとき

WordPress

ワードプレスで記事を保存しようとしたとき、「返答が正しい JSONレスポンスではありません。」と表示されることがあります。
このエラーが出たとき、まず最初に確認すべきと思われる手順をまとめておきます。

環境: レンタルサーバー(ConoHa VPS)、CentOS、WordPress 5.x、Cocoon

背景 & 不具合現象

ページの保存時に「更新に失敗しました。返答が正しい JSON レスポンスではありません。」という表示が出る

レンタルサーバーに WordPress (と Cocoon )をインストールし、サイトを作っています。

サイトのページを追加していると、まれに、ワードプレスの記事を保存するタイミングで下記のエラーが出て、記事の保存ができなくなることがあります。

エラー表示:「更新に失敗しました。返答が正しい JSONレスポンスではありません。」

サイトの Linux サーバーには、WordPress、Cocoon と最小限のプラグインをインストールしているだけです。
また、このエラー表示だけでは、どの設定、機能、プログラムが悪さをしているのか、特定できる表現になっていません。原因箇所がはっきりしません。

記事・下書きの保存、更新、公開に失敗する!

上記の現象におちいると、記事、下書きの保存や更新ができなくなってしまいます。
仕方がありませんが、ワードプレスの編集画面を再度、立ち上げなおす以外ありません。
保存をしていなかった、記事の更新部分のデータについては、諦めることになります。

確率が低かったとしても、万一、データが失われてしまうと、影響が大きすぎます。
そこで、以下の設定にしてみたところ、「更新に失敗しました。…」のエラーは出なくなりました。

解決手順: Gutenberg エディターの機能を外す

Gutenberg エディターの機能を無効にします。
問題個所を切り分ける最短手順の1つです。
以下は、Cocoon の設定画面で機能を無効化する例です。

手順
① WordPress 管理画面上の「管理メニュー」から「Cocoon 設定」を選択します。
② 「エディター」タブをクリックします。
③ 「Gutenbergエディターを有効にする」のチェックを外し、「変更をまとめて保存」をクリックします。
④ 再度、記事の編集、保存を行う。

→ 多くの場合、これで動くのではないかと思います。

もし、これで動かない場合は、WordPress のパーマリンク設定を「投稿名」などに変えて、①~④を実行してみてください。

考察:まず新機能を外して更新してみる

上記は、悪さをしそうな新機能を Cocoon 側の設定で外す場合の手順です。
具体的には、「ブロックエディタ」の機能を外してみて、悪さをしている機能に関係していそうで、かつ、最も簡単に原因箇所を切り分けする手順です。

考えられる原因は主に3つ: コクーン、ワードプレス、.htaccess (サーバー、PHP)

・ 冒頭の「更新に失敗しました。…」のエラー表示からは、以下の3つの原因が考えられます。
[1] Cocoon の問題
[2] WordPress の問題(WordPress 本体か、他のプラグインが悪さをしている)
[3] サーバ側(.htaccess、PHP 等)の問題

しかし、上記のエラー表示のみからは、考えられる原因の中から1つを特定することが難しいです。

・ エラー表示の “JSON” は “JavaScript Object Notation” の略です。
この機能は、WordPress/Cocoon のブロックエディタ(Gutenberg エディター)で使用されるようになった、とのことです。
そこで、上記の手順では、ブロックエディタの機能をまず OFF にしてみて、記事の保存が可能になるかどうかを確認します。

ワードプレスはどう動くのか ~ .htaccess を書き換えようとする

・ WordPress の動きとしては、記事を保存するタイミングで、サーバに配置されている .htaccess というファイルを参照し、データを書き換えようとします。
WordPress は PHP という言語で書かれており、.htaccess や他のファイルを書き換える動きとなります。
これは、WordPress の管理画面と Linux のコンソールを同時に開いておいて、WordPress 上で設定の保存をしてみるとわかります。具体的には、Linux のコンソールで、WordPress の各ファイルの更新日時を表示させておき、WordPress の管理画面から設定の保存を実行すると、Linux のコンソール側での日時が更新されます。
・ また、WordPress の管理画面上でパーマリンクの設定を変更すると、WordPress は、設定を保存するタイミングで .htaccess を書き換えようとします。
・ しかしもし、サーバ側の設定に問題があると(例えば、.htaccess ファイルの編集権限が WordPress に与えられていない、WordPress のアップデート等のタイミングでファイルが差し替えとなり編集権限が失われた等となると)、保存のタイミングでやはりエラーとなるはずです。

WordPress や Cocoon の設定の組み合わせをいろいろと変えてみて、設定ファイルの書き換えの動作を1つずつ追っていけば、問題個所(バグ)を特定できると考えられます。しかし、開発者でもないため、WordPress のバグ取りをしても仕方がありません。また、複数のソフトウェアが絡んでいるため、複雑度も高くなってしまいます。
そこで、シンプルに新機能を外してしまうことにしました。

さらに原因を特定したいとき:.htaccess を更新する動きを確認する

これでも動かず、サーバ側の設定が怪しい場合や、さらに原因を切り分けたい場合は、以下の関連リンクを参考に、.htaccess の自動更新が正常に動いているか確認してみてください。

私の場合は、冒頭のエラーが表示されたので「ブロックエディタ」の機能をまず外しました。
また、.htaccess の編集権限も、WordPress と Cocoon のアップデート時に書き換わったようだったので、.htaccess の編集権限を確認・設定しました。

また、パーマリンクの設定は「投稿名」で固定したところ、特に問題なく動作するようになりました。安定稼働している環境では、設定をいたずらに変えずに使用するようにしました。
個人的な推測ですが、WordPress、Cocoon(?)、PHP、CentOS 等の最新バージョンの環境では、設定の組み合わせに依存するバグがあるのではないかと思っています。
※ 時間が十分にあれば、原因箇所の絞り込み・特定はできそうです。しかし、あまり時間をかけられないため対症療法的に、うまく動く設定がわかればよしと判断しています。

まとめ

「更新に失敗しました。返答が正しい JSON レスポンスではありません。」のエラーが出た場合について、まず最初に確認すべき手順をまとめました。

いずれにせよ、記事の保存のタイミングで万が一の問題が起こると、データを失ったときのリスクが大きすぎます。
そこで私の場合、安全をみて「ブロックエディタ」の機能は外すことにしました。「ブロックエディタ」は、必要により一時的に機能を入れることもある、といった程度に使用を留めています。

関連リンク
・ 【WordPress】 .htaccess の自動更新を確認する方法
・ パーミッション関連でよく使うコマンド【Linux】

タイトルとURLをコピーしました