WordPress + Contact Form 7(以下 CF7)でお問い合わせフォームを運用していると、フォーム営業や迷惑メールが大量に届きます。本記事では、プラグイン2つと functions.php の数行の追加で、営業メールの流入を大きく減らす5つの設定を紹介します。
検証環境: WordPress 6.x + Contact Form 7 5.9.x
1. ハニーポットを入れる(プラグイン1つ)
「Honeypot for Contact Form 7」プラグインをインストールして有効化します。
CF7 のフォーム設定画面で、フォーム本文に以下を追加します。
[honeypot website class:hidden-field]
CSS で隠します(テーマの style.css に追加):
.hidden-field {
position: absolute !important;
left: -9999px !important;
height: 0 !important;
width: 0 !important;
}
これで、人間からは見えない website という入力欄が仕込まれます。Bot は機械的に全フィールドを埋めるため、website に値が入っていれば送信を拒否します。
効果: ベンダー公称で 70〜80% の Bot をブロック。
2. Cloudflare Turnstile を入れる
Cloudflare アカウントを作成し、サイトキーとシークレットキーを取得します(無料)。
「Simple Cloudflare Turnstile」プラグインをインストールして有効化、設定画面で取得したキーを入力します。
CF7 のフォーム本文に以下を追加します。
[turnstile]
これで、ユーザー操作不要のリスクスコア型 Bot 対策が動きます。
reCAPTCHA との比較: reCAPTCHA v3 でも同等の効果が得られますが、Turnstile は Cloudflare のプライバシー方針が好ましいケースがあります。お好みでどうぞ。
3. 営業お断り文言を、フォームのすぐ近くに表示する
CF7 のフォーム本文の冒頭に、以下のような注意書きを入れます。
<div class="form-notice">
<p><strong>本フォームは、サービスに関するお問い合わせ専用です。</strong></p>
<p>営業・売り込み目的のご連絡はご遠慮ください。営業目的とみなしたご連絡には返信いたしかねます。</p>
</div>
[your-name placeholder "お名前"]
[your-email placeholder "メールアドレス"]
[your-message placeholder "お問い合わせ内容"]
[turnstile]
[honeypot website class:hidden-field]
[submit "送信"]
スタイル(任意):
.form-notice {
background: #f5f5f0;
border-left: 4px solid #ff6b8e;
padding: 12px 16px;
margin-bottom: 20px;
font-size: 0.9rem;
}
サイトのフッターだけに書いても、フォーム営業ツールが読み取らないことが多いです。フォームの直前に置くのが効きます。
法律解釈の上でも、営業お断り明示があるサイトに広告メッセージを送る行為は、特定電子メール法の例外から外れる可能性が指摘されています。
4. レート制限を入れる(functions.php に数行)
同一 IP からの連投を制限します。functions.php に追加してください。
add_filter('wpcf7_validate', 'cf7_rate_limit', 10, 2);
function cf7_rate_limit($result, $tags) {
$ip = $_SERVER['REMOTE_ADDR'] ?? '';
if (!$ip) return $result;
$key = 'cf7_rl_' . md5($ip);
$count = (int) get_transient($key);
if ($count >= 5) {
$result->invalidate('', '送信が多すぎます。しばらくしてから再度お試しください。');
return $result;
}
set_transient($key, $count + 1, 60); // 60秒窓
return $result;
}
これで同一 IP からの送信を1分5回までに制限できます。バーストや連投を防げます。
5. NGワードフィルタを入れる(任意)
明らかな営業テンプレを弾く NG ワードフィルタも functions.php で実装できます。ただし正当な問い合わせを誤判定する可能性があるので、フィルタは「拒否」ではなく「件名に [SALES] を付ける」程度にとどめるのが安全です。
add_filter('wpcf7_mail_components', 'cf7_label_sales', 10, 2);
function cf7_label_sales($components, $form) {
$patterns = ['/BtoB.*マーケティング/i', '/無料診断/', '/SEO.*ツール/i', '/人材紹介/'];
foreach ($patterns as $p) {
if (preg_match($p, $components['body'])) {
$components['subject'] = '[SALES] ' . $components['subject'];
break;
}
}
return $components;
}
これで Gmail などのメールクライアント側でフィルタや振り分けが楽になります。
ここまでで止まらない分は、どうするか
5つを組み合わせれば、Bot とテンプレ系営業メールの大半は減らせます。しかし、人力代行(人間が手で打って送ってくる)と AI ベースのフォーム入力ツールには、これらは効きません。
ここから先は「届きにくくする」のではなく「届いた後で AI に仕分けてもらう」という発想に切り替える必要があります。
WordPress / CF7 でこれを自前実装するなら、wpcf7_before_send_mail フックで OpenAI API を呼んで分類結果を件名や本文に追記する、といった方法になります。ただし API コストの管理、プロンプトインジェクション対策、誤判定時の手動修正 UI を全部自分で運用することになります。
ちなみに、私が開発しているサービスでの解決
私は FORMLOVA というフォームサービスを開発しています。本記事の1〜5に相当する機能(ハニーポット用の隠しフィールド、Turnstile 標準搭載、レート制限、お断り文言テンプレ)に加えて、届いた回答を AI が自動で分類して legitimate / sales / suspicious のラベルを付ける機能を、全プラン無料で標準装備しています。
私が知る限り、AI 分類を標準装備しているフォームサービスは現時点で FORMLOVA だけです。CF7 + 自前実装の運用コストが重くなってきた方は、選択肢のひとつとして検討してみてください。
このテーマのシリーズ展開
このテーマは複数媒体で角度を変えて公開しています(日本語版)。
関連記事:
