W3 Total Cacheでお問い合わせフォームをキャッシュ対象外にする方法

送信ボタンが反応しない、完了表示が出たり出なかったり!?
W3 Total Cacheを使っているサイトでこの症状が出たら、プラグインごと停止する前に試したいことがあります。フォームページと完了ページを、ページキャッシュの対象外にして切り分ける方法です。

ただ、正直に言うと、除外だけで直るとは限りません。だからこそ、元へ戻せる準備をしてから一つずつ進めます。

この記事でわかること

この記事では、W3 Total CacheのページキャッシュからフォームまわりのURLを除外し、変更後に送信テストするところまでを扱います。

  • 設定変更前に残しておくもの
  • フォームURLと完了ページを除外欄へ入れる方法
  • 除外ルールを広げすぎない書き方
  • キャッシュ削除後の送信テスト
  • 複数のキャッシュがあるときに変更を止める条件

設定変更前にバックアップと現在の状態を残す

除外設定を入れる前に、元へ戻せる状態を作ります。バックアップファイルがあるだけでなく、どこから復元するか分かることまで確認しておくのがポイントです。

少なくとも、次の情報を控えておきます。

  • W3 Total Cacheのバージョン
  • 「Page Cache」が有効かどうか
  • 変更前の「Never cache the following pages」の内容
  • フォームページと完了ページのURL
  • 症状が起きた日時、端末、ブラウザ
  • WordPressのファイルとデータベースのバックアップ
  • バックアップから戻す手順と担当者

除外欄には最初から入っているルールがあるため、画面のスクリーンショットも残しておくと安心です。既存の行を消して書き直すのではなく、必要な行だけを追加します。

バックアップの保存先や戻し方が分からないなら、設定変更へは進まないほうがいいです。フォームは問い合わせの入口なので、直そうとして別の不具合を増やすと影響が大きくなります。現状を記録したところでいったん止める。これも立派な判断です。

フォームURLを「Never cache the following pages」へ追加する

ページキャッシュから外すURIは、「Never cache the following pages」という欄で指定します。WordPress管理画面の「Performance > Page Cache > Advanced」にあります。URIは、ドメインを除いた /contact/ のようなパス部分です。

画面表記は英語を基準にすると、次の順番になります。

  1. WordPress管理画面で「Performance」を開く
  2. 「Page Cache」を選ぶ
  3. 「Advanced」までスクロールする
  4. 「Never cache the following pages」を見つける
  5. フォームと完了ページのURIを1行に1つ追加する
  6. 「Save all settings」で保存する

たとえばフォームが https://example.com/contact/、送信後の完了ページが https://example.com/contact/thanks/ なら、まずは実在するページだけを次のように追加します。

/contact/
/contact/thanks/

W3 Total Cacheのこの欄は正規表現に対応しています。正規表現とは、複数のURIをパターンでまとめて指定する書き方です。フォームの配下に複数の完了ページがあり、すべてを除外する必要がある場合は、次のようにまとめられます。

^/contact(?:/.*)?$

この例は、/contact/contact/、その下にあるURIをまとめて対象にします。便利ですが、範囲が広がるぶん、フォームと関係のないページまで除外する可能性もあります。完了ページが一つだけなら、私は実際のURIを1行ずつ入れるほうを選びます。見返したときに意図が分かりやすく、戻すときも迷いません。

フォームと完了ページが別の階層にある場合は、それぞれのURIを追加します。

/contact/
/thanks/

完了ページを使わず、同じページ内で完了メッセージだけを表示するフォームもあります。その場合、存在しない完了ページを作ったり、推測したURIを追加したりする必要はありません。どの送信処理を使っているかはフォームプラグインや実装によって違うため、対象サイトでの挙動は要確認です。

保存後はキャッシュを削除してから送信テストする

除外ルールは、保存しただけで確認を終えません。変更前に作られたキャッシュを削除し、管理者としてログインしていない環境からフォームを送って初めて、訪問者に近い条件で比較できます。

保存後は、管理画面上部の「Performance」から「Purge All Caches」を実行します。そのあとWordPressからログアウトするか、プライベートブラウズを開いて対象ページへ移ります。

テストは次の順番で進めると、結果が混ざりにくくなります。

  1. フォームページをプライベートブラウズで開く
  2. 実在する確認用メールアドレスと、個人情報を含まないテスト内容を入力する
  3. 送信時刻を控えて、一度だけ送信する
  4. 画面上の完了表示または完了ページへの移動を確認する
  5. 管理者宛てメールと自動返信メールの到着を確認する
  6. 同じ条件でもう一度だけ再現するかを見る

つい何度も送信して確かめたくなりますが、そこは我慢したいところです。連続送信すると、メール側の迷惑送信判定やフォーム側の制限がかかって、別の問題が混ざります。1回ずつ時刻と結果を記録して、「除外前はどうだったか」「除外後に何が変わったか」を比べるほうが確実です。

結果は3通りに分かれます。完了表示は直ったのにメールが届かないなら、ページキャッシュとは別にメール配送の問題です。メールは届くのに画面だけ不安定なら、ブラウザ側のスクリプトや別の最適化設定を疑います。どちらも直っていれば、除外が効いたと考えられます。フォームを除外すれば必ず直る、という話ではないんですね。

完了表示までは進むのに管理者宛てや自動返信のメールが届かない場合は、キャッシュ設定を増やさず、Contact Form 7のメール設定と配送経路を確認する手順へ進みます。

除外しても直らないときは、別のキャッシュを切り分ける

W3 Total Cacheの「Never cache the following pages」で外せるのは、W3 Total Cacheのページキャッシュです。サーバー会社のキャッシュやCDNなど、別の仕組みがある場合は、その設定まで自動では変わりません。

まず、サイトで使っているキャッシュを分かる範囲で書き出します。

  • W3 Total CacheのPage Cache
  • レンタルサーバー側のページキャッシュ
  • CDNやリバースプロキシのキャッシュ
  • ブラウザに残っているキャッシュ
  • ほかの高速化・最適化プラグイン

ここで一気に全部を削除したり、複数の機能を同時に停止したりすると、どの変更が効いたのか分からなくなります。W3 Total Cacheの除外と削除を試して変化がなければ、次の層を一つだけ確認する。この順番なら元へ戻せます。

フォームではなく、差し替えた画像だけが古いままなら、ページキャッシュを変更する前に画像URLを比べます。WordPressで画像を差し替えたのに古いままのときの確認ポイントで、参照先とキャッシュを分ける手順を確認できます。

「Page Cache」以外にもDatabase Cache、Object Cache、Minifyなどが有効なサイトでは、設定名が似ていても役割は別です。原因が分からないまま同じURIをすべての除外欄へ追加したり、機能をまとめて停止したりするのは避けたいところです。

サーバー会社、CDN、複数の高速化プラグインが重なり、どの層が応答しているか分からない。そこまで来たら変更を止める目安です。確認できた設定、テスト時刻、結果を残したうえで、管理者や修正担当へ渡すほうが切り分けやすくなります。

自分で確認できる範囲と、変更を止める条件

バックアップと復元手順があり、W3 Total CacheのPage Cacheだけを使っていると分かるなら、既存設定の記録、URIの追加、キャッシュ削除、プライベートブラウズでの送信テストまでは進めやすい範囲です。

一方、次の状態では変更を重ねず、いったん止めるほうが安全です。

  • バックアップから戻す方法が分からない
  • フォームと完了ページの正しいURIを特定できない
  • 除外欄に既存の正規表現が多く、影響範囲を判断できない
  • サーバーやCDNにも別のキャッシュがある
  • 複数の高速化プラグインが有効になっている
  • 送信結果が毎回変わり、同じ条件で再現できない
  • 問い合わせメールの配送まで同時に不安定になっている

除外設定は原因を切り分ける手段であって、フォーム不具合の万能な修正ではありません。どこまで確認できたかを残しておけば、相談するときも設定を最初から触り直さずに済みます。

おわりに

W3 Total Cacheでフォームまわりを確認するときは、まずバックアップと現在の設定を残します。そのうえで「Performance > Page Cache > Advanced」の「Never cache the following pages」へ、フォームURLと完了ページのURIを追加します。保存後はキャッシュを削除し、ログアウトまたはプライベートブラウズで送信結果を比べるところまでが1セットです。

自分で進めやすいのは、使っているキャッシュが把握でき、元へ戻す手順がある場合です。サーバーやCDNを含む複数のキャッシュが重なっている、除外後も症状が一定しない、メール配送まで切り分けられないといった場合は、現在の設定とテスト結果を共有してもらえれば、必要な範囲から確認できます。判断に迷う段階でも、お気軽にご相談ください。

ホームページ修正・保守を見る

SNS SHARE

はてなブックマークでシェアXでシェアLINEでシェアPocketでシェア