「返答が正しいJSONレスポンスではありません」のエラー。
何回か遭遇しまして、それぞれ別の原因で発生していました。
- サブディレクトリのSSLが有効になっていなかった場合
- .htaccessの記載が間違っていた場合
- シングルクォーテーションなどの特殊文字が原因だった場合
ググっていろんなブログを徘徊したのですが、要因が複数あって原因不明な感じだったので、私の場合の解決方法をメモしておきます。
目次
case1. サブディレクトリのSSLが有効になっていなかった場合
状況
- サーバー、ドメインともにお名前.com
- とある企業様サイトを、別ドメインに移し替える作業を実施していた。
- エラーが起きたのはサブディレクトリに設置されたメディア
- 記事を更新しようとすると、「返答が正しいJSONレスポンスではありません」のエラーが発生。
- ワードプレスのトップページ(サブディレのTOP)は正常に表示される
- しかし、個別記事などの下位ページにアクセスすると、404エラーが返ってくる。
- ネイキッドドメインは、TOPページも個別ページも正常に表示される。
実施したこと
- 移転後のサブディレクトリの.htaccessを、移転前と同じ記述に変更
- サブディレクトリのSSLを有効化
普段はXサーバーがメインなので、1.の作業も2.の作業も発生しないのですが、お名前.comのサーバーはいちいち設定が必要です。
.htaccessを、移転前と同じ記述に変更
サイトの移転には、プラグイン「All in one WP migration」を使用しました。
サイト移転後のサブディレクトリの.htaccessを確認したところ
# BEGIN LiteSpeed
# "BEGIN LiteSpeed" から "END LiteSpeed" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule Litespeed>
SetEnv noabort 1
</IfModule>
# END LiteSpeed
なぜかこれしか書かれていなかったので、ワードプレスの設定部分を追記。
(# BEGIN WordPress〜# END WordPressまで)
サブディレクトリのSSLを有効化
サーバー管理画面の「基本設定」 → 「WordPress 一覧」 から、
サブディレクトリのSSL有効化の「有効にする」をクリック。
1.だけ実施してもエラーは解消しなかったのですが、
2.を実施したらすぐに直った(個別記事の更新と表示ができるようになった)ので、たぶんSSL化が原因だったのではないかと思います。
TOPドメインのSSL有効にしたら、サブディレクトリも自動的にSSL化してくれればいいのに・・・
お名前.com 嫌いです!
case2. .htaccessがエラーの原因だった場合
別件で同じエラーに遭遇した際も、.htaccessがエラーの原因でした。
ワードプレスのディレクトリ変更を行なったのですが、フォルダごとワードプレスファイルを移行した際に、.htaccessのフォルダパスがそのままになっていたため、「返答が正しいJSONレスポンスではありません」が発生しました。
このエラーに遭遇した際は、まず.htaccessを開いてみて、修正すべき箇所がないか探してみた方が良いかもしれません。
case3. シングルクォーテーションなどの特殊文字が原因だった場合
ワードプレスのテーマ「SWELL」を使用しているサイトで、ブログパーツを作成している際、「公開に失敗しました。 返答が正しい JSON レスポンスではありません。」のエラーに遭遇しました。
こちらの原因は明確で、ブログパーツ内のタイトルや本文にシングルクォーテーション(')を含むテキストがあると、保存ができないようになっています。
シングルクォーテーションも種類が3つあって
- ’ 開始
- ‘ 終了
- ' 区別なし
のうち、区別なしのみが反応してしまうようです。
区別なしを使用せず、開始または終了のシングルクォーテーションを使うことで、エラーを解消しました。
テーマのバグか、サーバーのWAFが影響しているのかわかりませんが、一部の記事だけでエラーが出る場合はこういった特殊文字が含まれていないか探してみるとヒントになるかもしれません。