お問い合わせフォームのスパムを減らす3つの対策 — CAPTCHAだけに頼らない多層防御
問い合わせフォームに迷惑メールやbot投稿が大量に届く——中小企業のサイトでありがちな悩みです。当サイトで実装している、ハニーポット・送信タイミング検証・Cloudflare Turnstileの3層を、仕組みと狙いから具体的に解説します。

自社サイトに問い合わせフォームを設置したら、英語の宣伝メールや意味のわからない投稿が毎日届くようになった——。中小企業や個人事業主のサイトで、本当によく起きる問題です。フォームは誰でも送れる窓口だからこそ、自動化されたプログラム(bot)の格好の標的になります。
最初に思いつく対策は画像認証(CAPTCHA)でしょう。ただ、それ一つでは足りません。巧妙なbotは通り抜けます。それでいて、肝心の人間のユーザーに余計な手間をかけさせてしまうこともあります。この記事では、当サイトのフォームで実際に組み合わせている3つの対策——ハニーポット・送信タイミングの検証・Cloudflare Turnstile——を、仕組みと狙いから紹介します。

フォームのスパムは、人ではなくbotの自動送信
フォームへのスパムは、人が手で一件ずつ送っているわけではありません。Web上を巡回するbotが、フォームを自動で見つけて機械的に大量送信しているケースがほとんどです。botは人間とは違う振る舞いをします。たとえば「項目を一瞬で埋めてすぐ送信する」「人間なら気づく隠し項目にも反応する」といった具合です。
逆に言えば、その“振る舞いの違い”が手がかりです。利用者に負担をかけずに、かなりの割合を弾けます。次の3つは、それぞれ違う角度からbotらしさを見抜く対策です。
対策1:ハニーポット(人間には見えない罠)
ハニーポット(おとり)は、フォームに人間には見えない入力欄をひとつ仕込む手法です。CSSで画面の外に隠してあります。通常のユーザーがそこに入力することはありません。一方、多くのbotはHTMLを機械的に読み取ります。見つけた欄をすべて埋めようとします。
- 隠し欄に入力があった送信は、botと判断して破棄する
- 利用者には何も表示されず、操作の手間はゼロ
- 外部サービスに依存しないため動作が軽い
とてもシンプルな仕組みです。それでも無差別にフォームを埋めていく単純なbotにはよく効きます。
対策2:送信が「速すぎる/古すぎる」を見抜く
人間がフォームを読み、入力し、送信するには、どんなに速くても数秒はかかりますが、botはページを開いた瞬間に送信することも珍しくありません。そこで、フォームを表示した時刻を記録しておきます。送信までの経過時間を、サーバー側でチェックするためです。
- 表示から数秒も経たない送信は「速すぎる」としてbot扱い
- 何時間も放置された古いフォームからの送信は「期限切れ」として弾く
- 時刻は改ざんできないよう、署名を付けて埋め込む
ポイントは、時刻をそのまま隠しフィールドに入れるのではなく、サーバーだけが知る鍵で署名しておくことです。こうしておけば、botが時刻を書き換えてちょうどよい経過時間を偽装することを防げます。
// フォーム表示時刻を署名付きで埋め込み、送信時に経過時間を検証する(概念図)
const MIN_SECONDS = 3; // これより速い送信はbot扱い
const MAX_SECONDS = 2 * 60 * 60; // 2時間で失効
const elapsed = (Date.now() - 表示時刻) / 1000;
if (elapsed < MIN_SECONDS) reject("速すぎる");
if (elapsed > MAX_SECONDS) reject("期限切れ");対策3:Cloudflare Turnstile(新しいCAPTCHAのかたち)
3つ目が、Cloudflareが提供する「Turnstile」で、従来の「信号機の写真をすべて選んでください」のような画像認証に代わる認証サービスです。多くの場合、利用者は何も操作しないかチェックを一つ入れるだけで通過でき、裏側でブラウザの状態を解析して人間らしさを判定する仕組みです。
- 無料で利用でき、Cloudflareの利用者でなくても使える
- 広告目的の個人データを集めない、プライバシー重視の設計
- 発行されるトークンは1回限り有効で、約5分(300秒)で失効する
当サイトでは、確認画面でTurnstileのトークンを発行し、送信時にサーバー側でトークンが本物かどうかを検証しています。検証に通らない送信は、メール送信の処理まで到達しません。
1つに頼らず「多層」で守る
ここまでの3つは、どれか一つだけで完璧というものではありません。単純なbotはハニーポットで、機械的な高速送信はタイミング検証で、より巧妙なものはTurnstileで——というように、性質の違う関門を重ねます。それで取りこぼしが減ります。

さらに、ハニーポットとタイミング検証は利用者に一切の操作を求めません。そのため「スパムは減らしたいが、問い合わせのハードルは上げたくない」という相反する要望を両立できます。フォームは、サイトと見込み客をつなぐ大切な入口なので、スパムに埋もれて本当の問い合わせを見逃さないよう、入口の守りは地味でも丁寧に作っておく価値があります。
サイトの問い合わせフォームのスパムにお困りでしたら、お問い合わせからお気軽にご相談ください。仕組みのご説明から、既存サイトへの導入まで対応できます。
本記事は2026年6月時点の情報です。Cloudflare Turnstileの仕様や提供条件は、変更される場合があります。