WordPress の問い合わせフォームに届く迷惑な送信は、手軽な順に 5 段階で潰すのが結局いちばん早く、いちばん安全です。プラグインを増やさずにできることが 2 つあり、それだけで機械的な送信の大半は止まります。逆に、どれだけ積んでも止まらないものが 1 種類だけ残ります。
対象は WordPress を運用する中小企業の問い合わせ担当者・Web 担当・情シスです。私たちは問い合わせフォームの選別サービスを開発し、自社サイトを含む複数の実サイトで日々の送信を見ています。
なお、この記事はフォームに届く送信への対策に絞ります。WordPress そのものの守り方(更新・権限・ログイン)と、フォームが最も外に開いた入口であるという構造はWordPress のセキュリティ対策で扱っています。
WordPress のフォームスパムは 2 種類。効く対策がまったく違う
対策を選ぶ前に、届いているものが機械の自動送信か、人が書いた営業メールかを分けてください。
- ボットによる自動送信:プログラムがフォームの HTML を読んで機械的に埋めるもの。英語の本文、意味のない文字列、URL だらけの本文、同じ内容の連投が典型です。
- 人が書いた営業メール:実在の担当者が本文を書き、正規のブラウザから送っているもの。「突然のご連絡失礼いたします」「貴社サイトを拝見しました」「ご紹介可能な人材がおります」といった、日本語として完全に正しいビジネス文面です。
なお前者の「英語の本文」はあくまで傾向であって、判定条件にはしないでください。海外に顧客を持つ日本企業は珍しくなく、英語や海外 IP というだけで弾くと本物の商談を落とします。
厄介なのは後者です。本物の問い合わせとまったく同じ経路で届くため、「機械かどうか」を見る仕組みでは原理的に区別できません。私たちが分析した実フォームデータにも、それははっきり出ています。対象は美容商社(国内最大手・上場)の 3 種類のフォーム、合計 1,894 件・約 20 か月分。いずれも reCAPTCHA v3 を通過した送信で、明らかなボットは事実上ゼロでした。それでも中身を分類すると、問い合わせフォームで営業(確度高)が 12.9%、汎用フォームでは営業合計 56.2%、中途採用フォームに至っては 73.1% が人材サービスの営業でした。これは一社・一時点のサンプルで、簡易な分類による集計です。業種・規模・フォームの性格によって比率は大きく変わります。
手間と効果を並べると、着手順は自然に決まります。
| 段階 | やること | 手間 | プラグイン増 | 止まるもの | 止まらないもの |
|---|---|---|---|---|---|
| 1 | 必須項目とバリデーションの見直し | 小(30分) | 増えない | 構造に依存する雑な自動送信 | まじめに埋めるボット、人が書いた営業 |
| 2 | ハニーポット + 送信時間チェック | 小〜中 | 場合により 1 つ | HTML を機械的に埋める汎用ボットの大半 | ブラウザを自動操作するボット、人が書いた営業 |
| 3 | reCAPTCHA v3 | 中 | 不要(Contact Form 7 は統合済み) | ボット全般(実データで事実上ゼロ) | 人が書いた営業(まったく減らない) |
| 4 | Akismet | 中 | 1 つ(商用は有料プラン) | 世界規模で既知のスパム、英語のリンク投稿 | 日本語の丁寧な営業文 |
| 5 | 内容で選別(サーバー / AI 側) | 小(設置)〜中(運用設計) | 不要(script 1 行) | 人が書いた営業など内容で不要と判断できるもの | 判断が割れるグレーな送信(人が最終確認) |
段階 1・2:プラグインを増やさずにできる 2 つ
段階 1:必須項目とバリデーションを見直す
- URL(ホームページ)欄を廃止する。 リンク目的の自動投稿は URL 欄のあるフォームを好みます。業務上不要なら消します。
- 自由記述を 1 つに絞り、選択式を増やす。 「お問い合わせ種別」をラジオボタンにするだけで、機械的な埋め込みは形が崩れます。
- 簡単なクイズを 1 問置く。 Contact Form 7 には
quizタグが標準で用意されています(例:[quiz quiz-763 "1+1は?|2"])。画像認証ほど利用者の負担がなく、汎用ボットには効きます。
ここで最も重要なのは、やりすぎないことです。よくある事故はこの 3 つです。
- 電話番号をハイフンなし半角数字のみに限定 → 全角で打った人、ハイフンを入れた人が送れない
- 本文に最低文字数を設定 → 「この商品の在庫はありますか」という一行の本物が弾かれる
- 会社名を必須化 → 個人の方が離脱する
実データを見ると、本物の問い合わせは驚くほど短いものが多数を占めます。短い = スパム ではありません。
段階 2:ハニーポットと送信時間チェックを仕込む
ハニーポットとは、人間には見えないがフォームの HTML 上には存在する入力欄を置き、そこに値が入っていたら機械と判定する手法です。表示は変わらないので利用者の手間はゼロ。実装のポイントは 3 つです。
- CSS で隠す(
position:absolute; left:-9999pxなど)。display:noneだけだと無視するボットもいます。 tabindex="-1"とaria-hidden="true"を付ける。 これを忘れると、スクリーンリーダーやパスワードマネージャが自動入力してしまい、本物の送信を弾く事故が起きます。必ず入れてください。autocomplete="off"を付ける。 ブラウザの自動入力対策です。
Contact Form 7 には本体機能がないため、専用アドオンを入れるか、テーマの functions.php にスニペットを書きます。
あわせて有効なのが送信までの時間チェックです。フォームを開いてから送信までが 1〜2 秒しかない送信は、人間ではまず起こりません。隠しフィールドにタイムスタンプを入れるだけで実装できます。
なおこの 2 つは、フォームの HTML に手を入れられることが前提です。回答画面に自前のコードを差せない Google フォームでできること・できないことは別途整理しています。
段階 3:reCAPTCHA v3 はボットによく効く。ただし営業は 1 件も減らない
reCAPTCHA v3 は、利用者に操作をさせず挙動をスコア化して機械らしさを判定します。ボット対策としては、ここまでで残った分をほぼ引き受けてくれます。WordPress での実装上の注意点は 3 つです。
- Contact Form 7 は 5.1 以降、reCAPTCHA v3 のみに対応しています。チェックボックス型の v2 を使いたい場合は別のアドオンプラグインが必要です。
- スコアのしきい値は既定で 0.50。
wpcf7_recaptcha_thresholdフィルターフックで変更できます。しきい値を上げるほどボットは減りますが、本物の送信も落ち、しかも落ちたことが管理者には見えません。 迷ったら下げる(本物寄りに倒す)のが安全です。キーの取得と設置後の確認までの手順はreCAPTCHA v3 の設定方法にまとめています。 - reCAPTCHA の JavaScript は既定でサイトの全ページに読み込まれます。表示速度を気にするなら、フォームのあるページだけに限定するスニペットを入れてください。
前述の 1,894 件が示すとおり、役割の範囲では非常によく機能しています。 問題はその先で、reCAPTCHA は「機械かどうか」を見る仕組みなので、人が正規のブラウザから送る営業メールには設計上何もしません。詳しくは reCAPTCHA との違いにまとめています。
段階 4:Akismet は既知のスパムに効く。日本語の営業文は対象外
Akismet は、世界中のサイトから集めたスパム情報を照合して判定するサービスです。もともとブログのコメントスパム対策として作られており、Contact Form 7 からはフォームタグにオプションを足すだけで使えます。
- 名前欄:
[text* your-name akismet:author] - メール欄:
[email* your-email akismet:author_email] - URL 欄:
[url your-url akismet:author_url]
なお Akismet の Personal プランは個人・非商用向けです。企業サイトなど商用利用では有料プランが必要なので、条件と料金は公式サイトで最新のものを確認してください。実際の挙動と得意・不得意の境目はAkismet は問い合わせフォームに効くのかで検証しています。
日本語の丁寧な営業文が止まらないのは、「候補者のご紹介」「貴社サイトを拝見しました」といった文面が、実在の会社が実在の担当者名で送っている正規のビジネス連絡だからです。Akismet の判定基準では、そもそもスパムではありません。これも優劣ではなく役割の違いです。
あわせて注意したいのが、WordPress 本体の「コメントで許可しないキーワード」(設定 → ディスカッション)です。 Contact Form 7 はこの設定を参照し、該当する語や IP からの送信をスパム扱いします。ただしこれは単語単位ではなく部分一致で動き、日本語は単語の区切りがないぶん巻き込みが起きやすくなります。「無料」を入れれば「無料相談をご希望の本物」が黙って消えます。使うなら、実際に何度も送られてきた固有の文字列(特定の商材名やフレーズ)だけに限定してください。
段階 5:人が書いた営業は「機械か」ではなく「自社向けか」で分ける
ここまでの 4 段階を全部やっても、人が書いた営業メールは 1 通も減りません。判定の軸を「機械かどうか」から「その内容が自社への用件か」に切り替えます。設計は 3 層です。
- 受信は止めない。 まずはラベルを付けるだけにします。
- 自動でラベルを付ける。 本文の型(定型営業文か固有の用件か)、記入項目の整合性、AI による内容判定を組み合わせます。
- 人が最終判断する。 自動処理は 8〜9 割で十分です。残りを担当者が数秒で確認できる導線を用意します。
私たちが開発している Hajik は、この段階 5 を担当します。要点は 3 つです。
- サイトに script タグを 1 行入れるだけ。 プラグイン追加・DNS 変更・フォームの送信先(action)変更・サーバー側の改修はいずれも不要です。判定は送信された瞬間に行われ、既存のメール送信はそのまま動きます。
- 保管はエンドツーエンド暗号化(E2EE)。 内容はブラウザ内で暗号化してから保存するため、Hajik 側は保管データを復号できません。ただし AI 判定のためには、判定の瞬間だけ内容をそのまま渡します(マスクすると本物の申込が誤判定されるためです)。クレジットカード番号・マイナンバー・銀行口座・パスポート番号・健康情報の 5 種はブラウザ内で除去してから送ります。詳しくはセキュリティの考え方に書いています。
- 効果は正直に書きます。99% 以上を遮断し、残りおよそ 1% は人が判断するという前提の設計で、AI だけの全自動にはしていません。
プラグインを増やすコストは、正直に見積もったほうがいい
対策プラグインを積み上げるとスパムは減りますが、別のコストが増えます。
- 保守コスト。 プラグインが 1 つ増えるたびに更新・互換性確認・脆弱性の追跡が増えます。放置されたプラグインは攻撃面そのもので、スパム対策のつもりがサイト全体のリスクを上げます。
- 表示速度。 対策系プラグインの多くは全ページに CSS/JS を追加します。問い合わせページ以外まで重くなるのは集客上無視できません。
- 不達に気づけない。 どの層で弾かれたかが管理画面に残らない構成だと、本物が消えても誰も気づきません。
フォームスパム対策の全体像は問い合わせフォームのスパム対策の基本、営業メールまで含めた総論は問い合わせフォームの営業メール対策(実務ガイド)にまとめています。
よくある質問
プラグインを増やさずにできる対策はどれですか
段階 1 と段階 2 です。段階 2 はテーマの functions.php にスニペットを書けば実装でき、段階 3 の reCAPTCHA も Contact Form 7 なら本体統合済みで追加プラグインは不要です。
reCAPTCHA を入れたのに営業メールが減りません。設定ミスでしょうか
設定ミスではありません。reCAPTCHA は「機械かどうか」を判定する仕組みで、人が手で送っている営業メールは設計上の対象外です。しきい値を上げても解決しないので、段階 5 の考え方に切り替えてください。
スパムが急に増えました。攻撃を受けているのでしょうか
量だけで判断しないでください。実データでも、問い合わせフォームの営業比率は平常月 2〜3 割に対して 12〜1 月は 0% 近くまで落ちる月があり、採用フォームは恒常的に 50% 超・月によっては 78〜90% でした。テレビ露出や SNS で話題になったときの急増は、正常なトラフィックです。増えたら中身を見る、が正しい順序です。
何度も送ってくる会社を、まとめてブロックしてもいいですか
おすすめしません。実データでも同じ企業が同じフォームに 10 件以上送っている例が複数ありました。ただし同じ会社が、別の日には本物の取引先として問い合わせてくることがあります。判定は「送信元企業 × 文面のパターン × 受け手の業種 × 関係性」で見るべきで、企業単位の絶対的なブロックリストは作らないほうが安全です。
フォームをやめてメールアドレスを画像で載せるのはどうですか
短期的にはボットは減りますが、本物の問い合わせも確実に減ります。問い合わせは売上の入口なので、入口を狭くする対策は最後の手段にしてください。
まとめ
明日やることは 3 つです。フォームの設定だけで済む段階 1・2 を片付ける。段階 3 の reCAPTCHA を、しきい値は既定のまま入れる。それでも残る人が書いた営業を、段階 5 の「自社への用件か」で仕分ける。
まずは自社フォームがどの段階でつまずいているかを確認してください。無料診断で現状を把握できます。実際の判定を見てから決めたい場合は、14 日間の無料トライアルをご利用ください。設置は 1 行、期間中はブロックせずラベル付けだけの観察モードから始められます。