
Site Reviewsでレビュー送信が失敗するJavaScriptエラーの原因と対処法
Site Reviews 8.3系でレビュー送信時に「Cannot read properties of undefined (reading 'json')」というJavaScriptエラーが出る場合、ページ内の別のスクリプトが window.fetch 関数を置き換えている可能性が最も高い。8.2系まではXMLHttpRequestを使っていたため問題が起きず、8.3系でfetch APIに移行したことで表面化しやすい。
なぜSite Reviewsでレビュー送信が失敗するのか

Site Reviewsは8.3.0でレビュー送信の仕組みを変更し、REST APIエンドポイントを優先して使うようになった。REST APIが使えない場合は従来のadmin-ajax.phpにフォールバックする。しかし、フォールバック時にfetchの戻り値がundefinedになり、.json() を呼び出せずにエラーになる。
このエラーが起きる根本原因は、テーマや他のプラグインが読み込むスクリプトがwindow.fetchを独自実装で上書きしていることだ。上書きされたfetchは本来のPromiseを返さず、undefinedを返す。そのため応答をJSONとして解釈できず、送信処理が止まる。
.json() でエラーになるこのデモは、8.2系から8.3系への変更で、別スクリプトの干渉を受ける余地が生まれた流れを示している。
ブラウザコンソールでfetch関数の状態を確認する手順

まず、ブラウザのデベロッパーツールを開き、コンソールタブに移動する。以下の確認を順に行うと、window.fetchが上書きされているかを特定できる。
fetch.toString() を実行するfunction fetch() { [native code] } になっているか確認するawait fetch(location.href) を実行するコンソールに function fetch() { [native code] } と表示されれば、ブラウザ標準のfetchが使われている。もし別の関数名やカスタムコードが表示されたら、それが送信エラーの原因だ。
REST APIが無効化されていないか確認する方法

Site Reviews 8.3系は、/wp-json/site-reviews/v1/ という独自のRESTエンドポイントを使う。一般的なWordPress REST API(/wp-json/wp/v2/)を無効化していても影響はないが、セキュリティ対策でREST API全体をブロックしていると、フォールバック動作に不具合が出ることがある。
- ブラウザのネットワークタブで
/wp-json/site-reviews/v1/へのリクエストが404や403になっていないか確認する - セキュリティプラグインでREST APIをブロックする設定を一時的に無効化する
- CloudflareのWAFルールやファイアウォールで
/wp-json/をブロックしていないか確認する - .htaccessやNginx設定にREST APIを拒否するルールがないか調べる
もしREST APIが使えない状態でも、Site Reviewsはadmin-ajax.phpにフォールバックする設計なので、通常は完全に送信できなくなることは少ない。エラーが続く場合は、むしろfetchの上書きを疑う方が早い。
キャッシュプラグインとCloudflareの設定を見直す

LiteSpeed CacheやCloudflareのJavaScript最適化機能が、Site Reviewsの送信スクリプトに干渉することがある。特にログアウトした訪問者向けのキャッシュは、nonceと呼ばれる送信用トークンの有効期限とずれやすく、予期しないエラーを引き起こす。
- LiteSpeed CacheのJavaScript最適化、結合、遅延読み込みをすべて無効化する
- CloudflareのRocket LoaderとAuto Minifyをオフにする
- Cloudflareのキャッシュルールで
/wp-json/と/wp-admin/admin-ajax.phpをキャッシュから除外する - 変更後は必ずキャッシュをパージして、シークレットウィンドウで再テストする
ロールバックとデータ保全の判断基準

どうしても解決しない場合は、Site Reviewsを8.2.2に一時的に戻す方法がある。ただし、既存のレビューや画像データはデータベースに保存されているため、プラグインを無効化したり削除したりしても消えることはない。安全にロールバックするには、必ず事前バックアップを取る。
ロールバック前に確認すべき点をリストで示す。
- サイト全体のバックアップ(データベースとファイル)を取得する
- ステージング環境で8.2.2に戻し、送信と表示に問題がないかテストする
- 8.3系で追加された機能やデータ構造の変更が、8.2系で読み込めるか確認する
- 開発者による修正版のリリース状況を確認し、可能なら最新のパッチを待つ
特に、8.3系から導入されたREST API関連のオプションが8.2系で無視されるか、エラーにならないかを確認してから戻すのが安全だ。
よくある質問
Site Reviewsのレビュー送信だけが失敗するのはなぜ?
他の機能は正常でも、レビュー送信にだけfetch APIを使うため、ページ内のスクリプトがfetchを上書きしていると送信だけが失敗する。8.3系で顕在化したのは、8.2系までのXMLHttpRequestが影響を受けなかったからだ。
window.fetchが置き換えられている場合、どう直せばいい?
まず、原因となるスクリプトを特定する。テーマのカスタムJavaScriptや、広告・解析系のプラグインが疑わしい。原因のプラグインを無効化するか、カスタムスクリプトを修正して、元のfetchを呼び出すようにする。一時的な回避策として、Site Reviewsを8.2.2に戻す方法もある。
REST APIを無効化しているとレビュー送信に影響する?
Site Reviewsは独自の /wp-json/site-reviews/v1/ を使うため、通常のWordPress REST APIを無効化しても直接の影響はない。ただし、サイト全体でREST APIをブロックしている場合は、admin-ajax.phpへのフォールバックに失敗し、送信エラーが起きることがある。
キャッシュプラグインのJavaScript最適化を有効にしたままだとどうなる?
JavaScriptの結合や圧縮、遅延読み込みによって、Site Reviewsの送信スクリプトの実行タイミングがずれたり、コードが一部欠落したりする。ログアウトユーザー向けのキャッシュが原因でnonceが古くなると、送信が拒否されるケースもある。
ロールバックしてもレビューデータは消えない?
レビュー本文や画像、評価値はWordPressのデータベースに保存されているため、プラグインのダウングレードや無効化では消えない。ただし、データベース構造の互換性の問題が起きる可能性はあるため、必ずバックアップを取ってからロールバックする。
この記事のポイント
- Site Reviews 8.3系の送信エラーはwindow.fetchの上書きが隠れた原因になりやすい
- ブラウザコンソールでfetch.toString() とawait fetch(location.href) を確認する
- REST APIのブロックは /wp-json/site-reviews/v1/ を許可して確認する
- キャッシュプラグインとCloudflareのJavaScript最適化を無効化して切り分ける
- ロールバック前に必ずバックアップとステージングテストを行う

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている
