お問い合わせフォームのスパムを減らす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の仕様や提供条件は、変更される場合があります。