WordPressサイトエディターで「更新に失敗しました」エラーが発生する原因と解決方法

問題の症状

WordPress 6.7以降のサイトエディター(Site Editor)で、フロントページなどのテンプレートを編集・保存しようとすると、以下のエラーが発生することがあります:

更新に失敗しました。 返答が正しい JSON レスポンスではありません。

ブラウザのDevToolsで確認すると、以下のような 403 Forbidden エラーが表示されます:

POST /wp-json/wp/v2/templates/テーマ名/front-page 403 (Forbidden)

原因の調査と特定

1. 一般的な原因ではない

最初に疑われがちな以下の原因は、今回のケースでは該当しませんでした:

  • プラグインの競合
  • ユーザー権限の問題
  • メモリ不足
  • サーバーの権限設定
  • WordPress本体の不具合

2. 真の原因:WAFによる誤検知

実際の原因は、レンタルサーバーのWAF(Web Application Firewall)による誤検知でした。

具体的な検知内容

サーバーのWAFログには以下のような記録が残されていました:

クロスサイトスクリプティングの試みの可能性11({x:window.onunload=alert})

なぜ誤検知されるのか

WordPressのブロックエディターは、スタイル情報を以下のようなJSON形式で送信します:

{
  "style": {
    "spacing": {
      "padding": {
        "top": "var:preset|spacing|50",
        "bottom": "var:preset|spacing|50"
      },
      "margin": {
        "top": "0",
        "bottom": "0"
      }
    }
  }
}

WAFは、この正当なJSON構造を XSS攻撃パターン {x:window.onunload=alert} と誤認識してブロックしてしまいます。

問題の再現と検証方法

1. 段階的なテスト

以下の手順で問題を再現できます:

  1. 空のフロントページを作成成功
  2. 簡単なコンテンツを追加成功
  3. スタイル設定(余白など)を追加403エラー発生

2. ブラウザのDevToolsで確認

  1. F12キーでDevToolsを開く
  2. Networkタブを選択
  3. サイトエディターで保存を実行
  4. 失敗したリクエストの詳細を確認

Request Headers で以下を確認:

x-wp-nonce: [数字]
content-type: application/json

Response Headers で以下を確認:

content-type: text/html; charset=UTF-8  ← 本来はapplication/jsonであるべき

3. WAFログの確認

レンタルサーバーの管理画面でWAFログを確認すると、クロスサイトスクリプティングの検知履歴が見つかります。

解決方法

Option 1: WAFの除外設定(推奨)

対象URL:

/wp-json/wp/v2/templates/*

除外理由:

WordPress Site Editor の正当なリクエスト

セキュリティ上の考慮事項

低リスクの環境(推奨):

  • 管理者が1人のみ
  • 小〜中規模サイト(1000PV/日以下)
  • 高価値ターゲットではない

高リスクの環境(慎重に検討):

  • 複数の管理者がいる
  • 大規模サイト
  • 企業サイトなど重要なサイト

Option 2: 代替手段

除外設定が困難な場合は、以下の代替手段を検討:

  1. クラシックエディターの使用
  2. テーマファイルの直接編集
  3. WordPress更新待ち

対策後の確認

WAFの除外設定を行った後、以下を確認してください:

  1. サイトエディターで正常に保存できるか
  2. 他のWordPress機能に影響がないか
  3. セキュリティログに異常がないか

予防策

1. 定期的な更新

  • WordPressコアの更新
  • テーマの更新
  • プラグインの更新

2. セキュリティ対策の維持

  • 強力なパスワードの使用
  • 定期的なバックアップ
  • ログイン試行制限の確認

3. 情報収集

  • WordPress公式フォーラムの確認
  • レンタルサーバーのお知らせ確認
  • セキュリティ情報の収集

まとめ

この問題は、WordPressの正当な機能とサーバーセキュリティ機能の互換性問題が原因です。

重要なポイント:

  1. エラーメッセージだけでは原因特定困難
  2. ブラウザのDevToolsでの詳細調査が必要
  3. WAFログの確認が決定的な証拠
  4. 適切な除外設定で解決可能

同様の問題に遭遇した場合は、まずサーバーのWAFログを確認することをお勧めします。


参考情報:

  • WordPress Version: 6.7+
  • Twenty Twenty-Five テーマ使用時に特に発生しやすい
  • レンタルサーバーの種類によって検知パターンが異なる場合あり
    今回はOnameのレンタルサーバーでした。

この記事が同じ問題で困っている方のお役に立てれば幸いです。