Contact Form 7を使用したメールフォームで送信後に「メッセージの送信に失敗しました。後でまたお試しください。」デフォルトメッセージでこのようなコメントが反されたことありませんか
これは、Contact Form 7(CF7)における「スパム判定による送信ブロック(誤検知)」が発生した際に出力されるものです。
「送信タイミングの問題」と感じられていたのはまさに正解で、ページを開いてから送信するまでに時間が経ち、セキュリティトークンやreCAPTCHAの認証期限が切れてしまうことが最大の発生原因です。
この現象は適切な対策を行うことで確実に防止することが可能です。原因と具体的な予防策をまとめました。
Google reCAPTCHA v3 は、ページ読み込み時に発行された認証トークンの期限が約2分間しかありません。フォームを開いたまま入力に時間をかけたり放置したりしてから送信ボタンを押すと、トークン切れでスパムスコアが低下し、オレンジ枠のエラーになります。
キャッシュプラグインやサーバーキャッシュを利用している場合、古くなったNonce(セキュリティトークン)がキャッシュされ続け、送信時に不整合を起こします。
現場での再現性・メンテナンス性を踏まえた、おすすめの予防策です。
reCAPTCHA v3 はトークン失効による誤検知が非常に多いため、より安定した別のスパム対策へ切り替えるのが一番効果的です。
Cloudflare Turnstile(無料プラグイン: Simple Cloudflare Turnstile) ユーザーにパズルを解かせずバックグラウンドで認証する最新の仕組みで、reCAPTCHAのようなタイムアウトエラーがほとんど発生しません。
WordPressの認証用トークン(Nonce)の期限切れ キャッシュプラグインやサーバーキャッシュを利用している場合、古くなったNonce(セキュリティトークン)がキャッシュされ続け、送信時に不整合を起こします。
reCAPTCHA v3 を維持したい場合は、送信ボタンを押したタイミングで Google の認証トークンを再取得する JavaScript を固定ページ(またはHTMLウィジェット)に読み込ませることで、タイムアウトによるオレンジ枠エラーを強力に防ぐことができます。 HTML
P Rocket や LiteSpeed Cache、WP Fastest Cache などのキャッシュプラグインや、ロリポップ・エックスサーバー等の「サーバー側キャッシュ機能」を利用している場合、フォームが配置されている固定ページのURLをキャッシュ除外リストに登録します。 理由: キャッシュが効いていると、期限切れの古くなったセキュリティキー(Nonce)がユーザーに配られ続けてしまい、送信エラーの原因になります。
入力内容にHTMLタグや特定の記号、URLが多数含まれる場合に、レンタルサーバーの WAF(Web Application Firewall) がスパムと誤認して通信を遮断するケースもあります。 特定の文字を入力した時だけ確定でエラーになる場合は、サーバーパネルの「WAF設定 ➔ ログ参照」を確認し、誤検知されているシグネチャを一時的に除外登録します。
reCAPTCHA v3 の削除
オレンジ枠エラーの最大の元凶であった「約2分間のトークン有効期限(タイムアウト)」が物理的に無くなりました。これにより、ユーザーが入力に10分かけても、途中で離席してもタイムアウトエラーは発生しなくなります。
Honeypot + Akismet の継続運用
Honeypot には有効期限(トークン)が存在しないため、入力時間を気にせずボットだけを正確にブロックできます。さらに Akismet と組み合わせることで、セキュリティ強度を保ったままユーザーの入力時間を無制限化できています。
WP Fastest Cache の削除
キャッシュプラグインが保持していた「期限切れの古いセキュリティキー(Nonce)」が配られなくなるため、キャッシュ起因の整合性エラーも完全に防ぐことができます。
放置テスト(重要)
お問い合わせフォームを開き、あえて何もせず 5分〜10分ほど放置 してから入力・送信します。
判定の確認
エラーにならず、緑枠の「メッセージは送信されました」が表示されれば対策成功です。
このようにプラグインの複合的な要因でエラーが発生することがあります。もし環境が一致していたいたら試してみてください。
ご相談はお問い合わせページからお送りください。