問い合わせフォームのスパム対策方法

フォーム経由の自動送信と、メールアドレスへの直接送信を切り分け、画面側とサーバー側の対策を組み合わせます。

最終更新:2026年9月2日

迷惑メールが来たら、まず送信経路を確認する

受信箱へ届いた迷惑メールが、WEBフォームから送られたとは限りません。フォーム通知と同じ件名・形式か、入力内容が含まれているか、フォーム側の履歴があるかを確認します。メールアドレスへの直接送信には、フォームへ認証を追加しても効果がありません。

フォーム経由かを切り分ける

通知形式フォーム固有の件名、項目名、受付番号があるか確認します。
送信履歴WordPress、フォームサービス、サーバーログに同時刻の記録があるか確認します。
送信元フォーム通知用アドレスと、迷惑メールの送信経路を比較します。
対象フォーム問い合わせ、採用、資料請求など、どこから送信されたか特定します。

対策前の発生状況を記録する

  • 1日・1週間あたりの迷惑送信数
  • 発生した日時、対象フォーム、言語、URL数
  • 同じ内容、IP、メールアドレス、ドメインの繰り返し
  • 正規問い合わせ数と、迷惑メールへ誤分類された件数
  • 現在使用している認証、プラグイン、メールフィルター

対策後の効果を判断するため、導入前の基準を残します。本文や個人情報の共有範囲には注意してください。

一つの対策だけに依存しない

Turnstile・reCAPTCHA

利用者の操作やブラウザ情報を使って自動送信を判定します。サイトの利用者とフォームに合う方式を選びます。

サーバー側検証

認証サービスが返すトークンを送信処理側で検証し、失敗したリクエストを保存・送信しません。

頻度制限

同じ送信元から短時間に繰り返される送信を制限します。共用回線や社内ネットワークへの影響を考慮します。

入力検証

隠し項目、URL数、禁止形式、文字数などを補助的に使います。特定言語だけを一律拒否しないよう注意します。

認証結果はサーバー側で確認する

Turnstileなどのウィジェットを表示しても、サーバー側の送信処理が検証しなければ、攻撃者はフォーム画面を経由せず送信できます。秘密鍵はブラウザへ公開せず、サーバー側から公式の検証APIへ送ります。

  • トークンが存在するか
  • 公式検証APIが成功を返したか
  • 想定するホスト名・アクションか
  • 期限切れや同じトークンの再利用ではないか
  • 検証に失敗した場合にメール送信・保存を止めるか

Cloudflareはサーバー側検証を必須としており、トークンには有効期限と一回限りの制約があります。詳細はTurnstile公式ドキュメントで確認します。

正規利用を止めていないかテストする

  • PC・スマートフォン、主要ブラウザから正常送信できる
  • 入力エラー後も再入力・送信できる
  • 自動返信と担当者通知が届く
  • 認証失敗、期限切れ、二重送信が適切に処理される
  • JavaScriptを読み込めない場合の案内が分かる
  • プライバシーポリシーに外部認証サービスの利用を反映する必要がないか確認する

導入後も件数を確認する

スパムがゼロになることだけを目標にすると、正規の問い合わせまで拒否する設定になりがちです。迷惑送信数、正規問い合わせ数、フォームエラー、利用者からの申告を確認し、必要な範囲で調整します。