Contact Form 7(以下 CF7)の標準スパム対策は、正しく設定すれば「ボットによる自動投稿」はかなり止まります。止まらないのは、人が手で書いて送ってくる営業メールです。設定手順を管理画面の場所つきで説明し、「どこまで止まって何が残るのか」を実フォームデータで示します。WordPress を自社で運用する中小企業の Web 担当者・情シス・問い合わせ担当者向けです。
Contact Form 7 の標準スパム対策は3つ。効くのは「機械が送ったもの」に対してです
CF7 が標準で持つスパム対策は、reCAPTCHA v3 連携・Akismet 連携・許可しない単語リストの3つです。追加プラグインなしで使えるのはこの範囲で、いずれも「機械が送ったもの」「既知の悪質パターン」を落とす仕組みです。そもそもフォームに届くスパムがボット・半自動・人が書いた営業の3層に分かれるという整理は、スパムとは何かを迷惑メールとの違いから整理した記事で解説しています。
| 標準機能 | 設定場所 | 主に止まるもの | 止まらないもの |
|---|---|---|---|
| reCAPTCHA v3 連携 | お問い合わせ → インテグレーション | スクリプトによる自動投稿、大量連投 | 人が手で入力した送信 |
| Akismet 連携 | お問い合わせ → インテグレーション + フォームタグ追記 | 既知のリンクスパム、英語圏の定番スパム | 日本語で丁寧に書かれた営業文 |
| 許可しない単語リスト | 設定 → ディスカッション | 指定した語・URL・IP を含む送信 | 指定していない表現すべて |
| 必須項目・入力形式 | フォームタグ | 形式を無視する雑な自動投稿 | 正しく埋めてくる送信者 |
reCAPTCHA も Akismet も「役に立たない」わけではありません。実際のフォームデータを分析すると、reCAPTCHA v3 を設置したサイトでは、明らかなボットスパム(外国住所の羅列、ランダム文字列、テスト送信の類)は事実上ゼロでした。問題は、その先に残るものです。
設定手順:標準機能を管理画面のどこで有効化するか
3つとも管理画面で完結しますが、Akismet だけはフォームタグへの追記も必要です。
reCAPTCHA v3(お問い合わせ → インテグレーション)
- Google の reCAPTCHA 管理コンソールでサイトを登録します。種類は「reCAPTCHA v3」を選び、対象ドメイン(www の有無に注意)を登録すると、サイトキーとシークレットキーが発行されます。
- WordPress 管理画面の左メニュー「お問い合わせ」→「インテグレーション」を開きます。
- 「reCAPTCHA」のカードで「インテグレーションのセットアップ」を押し、2つのキーを貼り付けて保存します。
- 保存するとサイト全体に reCAPTCHA のスクリプトが読み込まれ、画面右下にバッジが表示されます。
注意点が3つあります。第一に、CF7 5.1 以降が対応しているのは v3 だけで、「私はロボットではありません」のチェックボックス(v2)には別プラグインが必要です。第二に、v3 は 0.0〜1.0 のスコアを返す仕組みで、CF7 は既定でスコア 0.5 未満をスパムとして扱います(wpcf7_recaptcha_threshold フィルターで変更可。CF7 公式ドキュメント参照)。第三に、このしきい値は既定のまま触らないでください。スコアは「人間らしさ」の推定値でしかなく、社内ネットワークやプライバシー保護の強いブラウザからの正当な送信も低スコアになります。上げれば営業が減るのではなく、本物が落ちます。キーの取得から設置後の確認までの手順はreCAPTCHA v3 の設定方法に、reCAPTCHA 自体を別の仕組みに置き換えたい場合の考え方はreCAPTCHA の代替を探す前ににまとめています。
バッジを CSS で非表示にする場合は、Google が定めるテキスト表記への差し替えが必要です。切り分けの詳細はreCAPTCHA との比較ページにまとめています。
Akismet(インテグレーション + フォームタグへの追記)
- Akismet Anti-Spam プラグインを有効化し、API キーを登録します。商用サイトは有料プランが必要です。
- 「お問い合わせ」→「インテグレーション」で、Akismet が接続済みと表示されているか確認します。
- 対象フォームの「フォーム」タブを開き、フォームタグに
akismet:オプションを書き足します。
[text* your-name akismet:author]
[email* your-email akismet:author_email]
[url your-url akismet:author_url]
- 保存します。以降、送信内容が Akismet に送られ、スパムと判定されるとメールは送信されず、画面にはエラーが表示されます。
この追記をしないと氏名・メール・URL が判定材料として渡らず、精度が大きく落ちます(公式ドキュメントにも明記)。「有効化しただけで CF7 にも効く」は誤解です。
なお Akismet はブログのコメントスパム対策として育った仕組みで、英語圏のリンクスパムには強い一方、日本語の営業文には「スパムらしさ」の特徴がほとんどありません(詳しくはAkismet との比較)。
許可しない単語リスト(設定 → ディスカッション)
- WordPress 管理画面の「設定」→「ディスカッション」を開きます。
- 「コメントで許可しない単語」欄に、1行につき1語(または IP アドレス)を入力します。
- 保存します。CF7 はこのリストを参照し、該当する送信をスパムとして扱います。
もともとコメント管理用の機能を CF7 が流用しているもので、公式でも案内されている使い方です。特定の URL が毎回入っている、といった限定的なケースには有効です。
ただし、この機能はもっとも事故が起きやすい設定でもあります。実データに現れる営業の定型句は「突然のご連絡失礼いたします」「貴社サイトを拝見しました」「無料で診断」といったものですが、「無料」を禁止語に入れれば「無料相談は可能ですか」という本物の問い合わせが消えます。しかも、送信者側にエラーが出るだけで受信箱には何も残らないため、消えたことに気づけません。一般名詞は入れない。これが鉄則です。
プラグインを増やしたくない場合の選択肢
追加プラグインなしでできるのは、入力形式の指定・quiz タグ・受信側での仕分けの3つです。
- 入力形式を型で縛る:
[email* your-email]のようにメール型・必須指定を使うだけで、形式を無視する雑な自動投稿は落ちます。 - quiz タグ:CF7 標準の
[quiz]タグで「1 + 2 は?|3」のような設問を出せます。単純なボットには効きますが、人が送る営業には無意味で、本物の利用者に一手間かけさせ、アクセシビリティも下がります。最終手段です。 - 受信側で仕分ける:メールソフトのフィルタで、営業に多い語を含むメールにラベルを付けます。ただしルールの保守が人力になり属人化します(考え方は仕分けワークフローの記事で整理しています)。
なお、会社名や電話番号を必須にしても営業側はきちんと埋めてくるため効果は薄めです。
答え合わせ:スパムログで「どのモジュールが弾いたか」を確認する
設定したのに減らないという相談の多くは、スパムログを見ると「どのモジュールも弾いていない」ことが原因です。CF7 5.1.2 以上と Flamingo 2.0 以上を組み合わせるとスパムログが記録され、Flamingo の受信メッセージ画面で「どのモジュールが、なぜスパムと判定したか」を確認できます。まずここを見てください。
- reCAPTCHA が弾いた記録が多い:自動投稿が来ています。標準機能は働いています。
- どのモジュールも弾いていないのに迷惑な送信が届く:機械ではなく人が送っています。ここから先は設定の追加では解決しません。
基本的な考え方はフォームスパム対策の基礎にまとめています。
標準機能で止まらないもの:人が書いた営業メール(実フォームデータ)
reCAPTCHA を通過してくる送信を数えると、フォームの性格によっては半数以上が営業でした。以下は Hajik が分析した、美容商社(国内最大手・上場)の実フォームデータです。3種類のフォーム・合計 1,894 件・約 20 か月分、すべて reCAPTCHA v3 を通過した送信、つまり「ボットが除去されたあとに残ったもの」の内訳です。
| フォーム種別 | 件数・期間 | 営業と判定された比率 | 内訳の補足 |
|---|---|---|---|
| 問い合わせフォーム | 534件・20か月 | 12.9%(確度高) | 本物らしい 54.9%、判定困難 32.2% |
| 汎用フォーム | 1,211件・18か月 | 56.2% | 本物らしい 16.5%、判定困難 25.2% |
| 採用フォーム | 149件・18か月 | 65.8%(人材サービスの営業) | 中途採用 73.1%、新卒 48.9% |
分類は簡易的なヒューリスティックによるもので、厳密なラベル付けではありません。また、これは一社・一時点のサンプルで、業種・規模・フォームの性格によって比率は大きく変わります。それでもこの構造自体は、Hajik を設置している複数の実サイトでも同じように観測しています。
季節変動も大きく、問い合わせフォームは平常月に 2〜3 割が営業ですが、12〜1 月には 0% 近くまで落ちる月もありました。一方、採用フォームは恒常的に 50% を超え、月によっては 78〜90% に達します。件数の急増を「攻撃」と解釈して自動ブロックする設計にすると、キャンペーンやメディア掲載による正当な流入まで巻き込みます。
反復も特徴です。同じ企業が同一フォームに 10 件以上送っている例が複数ありました。ここで「この会社は全部止める」としたくなりますが、同じ会社でも受け手の文脈が変われば本物の取引相談になり得ます。判定は企業単位ではなく、内容と文脈の組み合わせで行うべきです。
使い分けの結論:3層に分け、最後の層だけ内容で判断する
CF7 のスパム対策は「1つの正解を選ぶ」ものではなく、性質の違う3層を積む設計です。
| 層 | 対象 | 手段 | 判断するのは |
|---|---|---|---|
| 1. 自動投稿 | スクリプト・ボット | reCAPTCHA v3、必須項目と入力形式 | 機械(スコア) |
| 2. 既知のスパム | 定型のリンクスパム、特定の文字列 | Akismet、許可しない単語リスト | 機械(既知パターン) |
| 3. 人が書いた営業 | 日本語の営業提案 | 内容を読む AI 判定 + 人の最終確認 | AI と人 |
1層目と2層目は CF7 の標準機能で組めます。3層目だけは内容そのものを読む必要があり、ここが Hajik の領域です。
Hajik は、お問い合わせフォームに届く営業メールを選別する日本語特化の B2B SaaS です(運営は GrowGroup株式会社)。導入はサイトに script タグを 1 行追加するだけで、CF7 のフォームタグにも WordPress の設定にも手を入れず、プラグインの追加も DNS の変更も不要です。判定は送信された瞬間に行います。
データの扱いは2つのレイヤーに分かれます。判定のレイヤーでは、判定のその瞬間だけ、フォームの記入内容をそのまま AI に渡します(マスクすると申込内容や選択項目が見えず、本物の申込まで「要確認」になるためです)。ただしクレジットカード番号・マイナンバー・銀行口座・パスポート番号・健康情報の5種は、送信前にブラウザ内で除去します。保管のレイヤーはエンドツーエンド暗号化(ブラウザ内で暗号化してから保存する方式)で、保管されたデータを Hajik 側で復号することはできません。
効果は正直に書くと、99% 以上を遮断し、残りおよそ 1% は人が判断する、というのが実態です。既定の動作は「ブロック」ではなく「ラベル付け」で、迷ったら本物として扱い、担当者が最後に決められる状態を残します。全体像は問い合わせフォームの営業メール対策の実務ガイドにまとめています。
よくある質問
reCAPTCHA v3 を入れたのに営業メールが減りません。設定ミスでしょうか
設定ミスではない可能性が高いです。Flamingo のスパムログに reCAPTCHA が弾いた記録が残っているなら、自動投稿に対しては機能しています。それでも届くものは人が手で入力しているためスコアが高く出ており、しきい値では止まりません。
Akismet を有効化するだけで CF7 に効きますか
不十分です。フォームタグに akismet:author、akismet:author_email、akismet:author_url を追記して、はじめて氏名・メール・URL が判定材料として渡ります。
許可しない単語リストに営業の定型句を入れてもいいですか
一般名詞は入れないでください。「無料」「ご紹介」「拝見」は本物の問い合わせにも普通に現れます。入れるなら、繰り返し届く固有の URL のように本物が使いようのない文字列に限定してください。
プラグインをこれ以上増やしたくありません。何から手を付けるべきですか
reCAPTCHA v3 の設定と、フォームタグでの入力形式・必須指定の徹底が現実的な上限です。この3層の枠組みは CF7 以外のフォームでもそのまま使えますが、標準で使える機能の範囲はフォームごとに異なります(Google フォームでできること・できないことはGoogle フォームのスパム対策で切り分けています)。
まとめ
明日やることは、reCAPTCHA v3 をしきい値既定のまま設定し、Akismet を使うならフォームタグへの akismet: 追記まで済ませ、Flamingo のスパムログを1か月見ることです。許可しない単語リストは、一般名詞を入れないという一線だけ守ってください。それで残るものが人の書いた営業なら、設定を増やしても止まりません。
自社のフォームに何がどれくらい届いているのかを知りたい方は、まず無料診断をお試しください。実際の選別を試すなら、14日間の無料トライアルから始められます。