0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Contact Form7 でフォーム営業を9割減らす5つの設定 -- ハニーポット、reCAPTCHA、お断り文言、レート制限まで

0
Posted at

Gemini_Generated_Image_nx0nannx0nannx0n.png

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 + 自前実装の運用コストが重くなってきた方は、選択肢のひとつとして検討してみてください。


このテーマのシリーズ展開

このテーマは複数媒体で角度を変えて公開しています(日本語版)。

関連記事:

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?