ガイド

Contact Form 7の迷惑メール対策 -- Turnstile・reCAPTCHA・Akismet・営業メール仕分け

Contact Form 7の迷惑メール対策 -- Turnstile・reCAPTCHA・Akismet・営業メール仕分け

最終更新日: 2026-05-09

Contact Form 7で問い合わせフォームを置いたあと、迷惑メールや営業メールが増えることがあります。

「reCAPTCHAを入れれば止まるのか」「Turnstileのほうがよいのか」「Akismetは必要なのか」「営業メールまで止められるのか」。ここで迷いやすいんです。

先に結論です。

Contact Form 7の迷惑メール対策は、入口でBotを減らす対策と、届いた後に人間が送った営業メールを分ける対策を分けて考えるのが現実的です。TurnstileやreCAPTCHAはBotに効きます。Akismetや拒否リストは内容ベースのスパム判定に効きます。ただし、人が読んで手で送る営業メールまでは完全には止められません。

この記事では、Contact Form 7で使えるTurnstile、reCAPTCHA v3、Akismet、Disallowed list、acceptance checkboxの使い分けと、FORMLOVAで届いた後に営業メールを仕分ける運用まで整理します。

問い合わせフォーム全般の営業メール対策は、問い合わせフォームの営業メール対策にまとめています。この記事では、WordPressとContact Form 7に絞ります。

まず入れる順番

迷ったら、この順番で考えると進めやすいです。

1. WordPress、Contact Form 7、関連プラグインを最新に保つ
2. TurnstileまたはreCAPTCHA v3を入れる
3. Akismetで本文ベースのスパム判定を追加する
4. 繰り返し来る語句やIPをDisallowed listに入れる
5. 営業目的ではないことの確認チェックを必要なら置く
6. それでも届く営業メールを、届いた後で分類する

最初から全部を入れる必要はありません。

ただ、Contact Form 7は公開フォームなので、何も対策しないまま長く置くとBotに拾われやすくなります。まずはTurnstileかreCAPTCHA v3を入れます。そのうえで、本文の内容を見て弾きたいならAkismet、同じ送信元や同じ語句が続くならDisallowed listを使います。

営業メールが多い場合は、入口対策だけで終わらせないでください。営業メールの多くはBotではなく、人間または人間に近い自動入力で送られてきます。そこで止めきれない分は、回答管理側で分けるほうが安定します。

Turnstileを入れる

Contact Form 7公式では、Cloudflare Turnstileの統合モジュールが用意されています。公式ページでは、reCAPTCHAを使う理由がないならTurnstileを推奨すると説明されています。

設定の流れはシンプルです。

1. CloudflareでTurnstileのsite keyとsecret keyを取得する
2. WordPress管理画面で「お問い合わせ」>「インテグレーション」を開く
3. Turnstileの「インテグレーションのセットアップ」に進む
4. site keyとsecret keyを貼り付けて保存する

Contact Form 7側で統合を保存すると、基本的にはすべてのフォームにTurnstileが適用されます。表示位置を動かしたい場合は、フォームテンプレート内に次のタグを入れます。

[turnstile]

Turnstileは、訪問者のブラウザ側でチャレンジを実行し、サーバー側でトークンを検証する仕組みです。Contact Form 7統合を使う場合、通常の利用では自分で検証コードを書く必要はありません。

新しく対策を入れるなら、私はまずTurnstileからでよいと思っています。Contact Form 7の公式導線が用意されていて、Googleアカウントに依存せず、フォーム上の体験も重くなりにくいからです。

reCAPTCHA v3を使う場合

すでにGoogle reCAPTCHAを使っている、社内標準がGoogleに寄っている、既存サイトでreCAPTCHAの運用が定着している。そういう場合はreCAPTCHA v3でも問題ありません。

Contact Form 7 5.1以降はreCAPTCHA v3に対応しています。v3は、昔の「私はロボットではありません」のチェックボックスではなく、裏側でスコアを返す方式です。

設定の流れです。

1. Google reCAPTCHA Admin ConsoleでreCAPTCHA v3のキーを発行する
2. WordPress管理画面で「お問い合わせ」>「インテグレーション」を開く
3. reCAPTCHAのSite KeyとSecret Keyを貼り付ける
4. 保存してフォーム送信を確認する

注意点があります。

reCAPTCHA v2のキーは、v3では使えません。Contact Form 7公式も、v3用のキーを取り直す必要があると説明しています。

もう1つ大事なのは、reCAPTCHA v3はスコアを返す仕組みだということです。Google公式では、サイトごとのトラフィックを見ながらしきい値を調整する考え方が説明されています。導入直後から強く弾きすぎると、本物の問い合わせを落とす可能性があります。

フォームでは、迷惑メールを減らすことより、本物の問い合わせを落とさないことのほうが大切です。最初は送信状況を見ながら調整してください。

Akismetで本文ベースのスパムを判定する

TurnstileやreCAPTCHAは、主にBotっぽい送信を減らす対策です。

本文の内容を見てスパム判定したい場合は、Akismetを使います。Contact Form 7公式では、名前、メールアドレス、URLのフィールドにAkismet用のオプションを付ける方法が案内されています。

たとえば、フォームタグは次のようにします。

[text* your-name akismet:author]
[email* your-email akismet:author_email]
[text your-url akismet:author_url]

Contact Form 7公式では、正確な判定のために、使えるAkismetオプションはできるだけ多く付けることが推奨されています。

Akismetがスパムと判定すると、Contact Form 7はメール送信を停止し、送信者にはエラーを表示します。ここで気をつけたいのは、スパム判定は100%正確ではないことです。公式ページでも、誤検知と見逃しは存在すると説明されています。

問い合わせフォームでは、誤って本物の問い合わせを弾くのが一番怖いです。Akismetを使うなら、しばらくは送信結果と問い合わせ数の変化を見てください。Flamingoを使って保存している場合は、スパム扱いになった投稿も確認し、誤検知を見直す運用にしておくと安心です。

Disallowed listで繰り返しの語句やIPを止める

同じ語句、同じURL、同じIPアドレスから迷惑メールが来る場合は、WordPressのDisallowed listも使えます。

Contact Form 7公式では、WordPressの「設定」>「ディスカッション」にあるDisallowed Comment KeysをContact Form 7でも利用できると説明されています。1行に1語または1IPを入れます。

たとえば、次のような形です。

casino-example
spam-domain.example
203.0.113.10

Contact Form 7では、メッセージ内にリストの語句が含まれる、または指定IPから送られた場合、スパムとして扱われます。

IPを確認したい場合は、メール本文にContact Form 7の特殊メールタグを入れます。

送信元IP: [_remote_ip]

ただし、Disallowed listは強い対策です。

短すぎる語句を入れると、本物の問い合わせまで弾く可能性があります。たとえば「SEO」だけを入れると、普通の相談文にSEOという単語が入っただけで落ちるかもしれません。入れるなら、具体的なドメイン、繰り返し使われる特徴語、明確なIPに絞るほうが安全です。

acceptance checkboxは抑止にはなるが、万能ではない

Contact Form 7には、同意確認用のacceptance checkboxがあります。

営業メール対策として使うなら、たとえば次のように書けます。

[acceptance not-sales] このフォームはお客様からのお問い合わせ専用です。営業・勧誘目的ではないことを確認しました。 [/acceptance]

未チェック時に通常のバリデーションエラーとして見せたい場合は、Additional Settingsに次を入れます。

acceptance_as_validation: on

これは、心理的な抑止にはなります。

ただし、営業メールを完全に止めるものではありません。人間が読んでチェックすれば送れてしまいますし、自動入力の仕組みがチェックボックスを押すこともあります。

そのため、acceptance checkboxは「これを入れたから安心」ではなく、フォーム上の意思表示として使うものだと考えてください。営業お断り文言の作り方は、問い合わせフォームの営業メール対策でも詳しく書いています。

エラー文を強くしすぎない

迷惑メールが増えると、ついエラー文を強くしたくなります。

ただ、本物の問い合わせをする人にとって、フォームのエラー文はかなり印象に残ります。

悪い例です。

不正な送信です。

もう少し穏やかにするなら、こうです。

送信内容を確認できませんでした。時間をおいて再度お試しください。

同意チェックの未入力なら、こうです。

内容を確認し、チェックを入れてから送信してください。

エラーは、送信者を責めるものではありません。どう直せば送れるかを伝えるものです。フォームのエラーメッセージ例でも、この考え方を整理しています。

営業メールが残る理由

ここまで対策しても、営業メールは残ります。

理由は、営業メールの一部がBotではないからです。

人間がブラウザでフォームを開き、文章を貼り付けて送る。人力代行が入力する。フォーム構造を読み取る自動化ツールが、人間の操作に近い形で送る。こうした送信は、TurnstileやreCAPTCHAだけでは止めきれません。

つまり、Contact Form 7の対策は次のように分ける必要があります。

Bot由来のスパム:
Turnstile、reCAPTCHA、Akismet、Disallowed listで減らす

人間由来の営業メール:
営業お断り文言、acceptance checkboxで抑止し、届いた後に分類する

この切り分けをしないと、「reCAPTCHAを入れたのに迷惑メールが減らない」という判断になりがちです。でも実際には、減っていないのはBotではなく営業メールかもしれません。

届いた後の仕分けまで設計する

Contact Form 7を使い続けるなら、フォーム入口の対策に加えて、受信後の運用を決めておくことが大切です。

たとえば、次のようなルールです。

営業メールは返信対象から外す
要確認は担当者が見る
本物の問い合わせだけを対応待ちにする
月次レポートでは営業メールを問い合わせ数から除く

ここを人間が毎回目で見て分けると、地味に時間がかかります。月に数十件でも、半年続くと大きな運用コストになります。

FORMLOVAでは、フォーム送信後の回答を営業メール、自動送信っぽい問い合わせ、本物の問い合わせに分けて扱えます。営業メールを除いて分析したり、要確認だけを見たり、回答ステータスと合わせて運用したりできます。

具体的な使い方は、営業メール自動検知の使い方にまとめています。問い合わせフォーム全体の受信後運用は、問い合わせフォーム運用まとめも参考になります。

まとめ

Contact Form 7の迷惑メール対策は、1つのプラグインで終わる話ではありません。

まず、TurnstileまたはreCAPTCHA v3でBotを減らします。本文ベースの判定にはAkismetを使います。繰り返しの語句やIPにはDisallowed listを使います。営業目的ではないことを確認したい場合は、acceptance checkboxを置きます。

ただし、人が送る営業メールは残ります。

だから、入口で止める対策と、届いた後で分ける運用をセットで考えてください。

Contact Form 7を使い続ける場合でも、FORMLOVAへ移す場合でも、大事なのは「本物の問い合わせを見失わないこと」です。迷惑メール対策の目的は、送信をゼロにすることではなく、対応すべき声を見つけやすくすることなんです。

執筆・確認情報

最終検証日:

この記事をシェア

執筆者

@Lovanaut
@Lovanaut

FORMLOVAの開発者。「ラバ = ラブ」の想いで、優しいサービスを作り続けています。

同じカテゴリの記事