CAPTCHA を使わずに WordPress のお問い合わせフォームのスパムを防ぐには?
執筆:Eureka Studio · 更新日
要点
CAPTCHA の代わりに、目に見えないチェックを組み合わせます。ボットだけが入力する隠しハニーポット欄、最小入力時間、ページキャッシュがあっても機能するトークン、そして IP ごと・メールアドレスごとの送信上限です。判断が難しいメッセージは削除せずに隔離しましょう。サーバー内で完結するプラグインなら、データを外部に送らずに Elementor、Contact Form 7、WPForms でこれを実現できます。Hushfort では、フォームプラグインの保護は Pro の機能で、無料版が守るのはコメントとレビューだけです。
手順
1手順 1
ボットがフォームを狙う様子を見る
ボットは見つけた欄をすべて埋めます。人には見えない隠し欄も例外ではありません。ページを読み込まずに直接送信してくることもあります。Hushfort のログには、ハニーポット欄の入力、トークンなし、入力が速すぎる、リンクが多すぎる、といったケースごとの理由が記録されます。
2手順 2
スパムシールドを監視モードでオンにする
Hushfort で「スパムシールド」を開いてオンにし、「モード」を「記録のみ — 監視モード (何もブロックしません)」に設定します。Hushfort Pro を導入済みなら「フォームプラグイン」はオンのままにして保存します。この状態では、まだ何もブロックせず、ブロックする予定だったものを記録します。

3手順 3
目立たない上限を設定する (Pro)
「最小入力時間」は短め (3 秒) にします。Pro では、さらに 1 つの IP (IP ごとの上限) や 1 つのメールアドレス (メールアドレスごとの上限) から 1 時間に送れるメッセージ数を制限します。「リンクの最大数」を超えるリンクを含むメッセージは隔離されます。
4手順 4
ログを確認してから「ブロック」に切り替える
数日たったら、監視モードが捕らえたものを確認します。本物のメッセージが含まれていなければ、「モード」を「ブロック (推奨)」にして保存します。

5手順 5
本物の人はそのまま送信できる
訪問者は 30 秒ほどかけて入力し、隠し欄に気づくこともなく送信します。パズルも画像の選択もありません。

なぜ重要なのか
フォームスパムはたいてい単なる迷惑ですが、それだけでは済まなくなることもあります。本物の問い合わせが埋もれ、受信トレイを流し読みする癖がつき、フォームが自動返信を送る設定ならメールサーバーの送信レピュテーションを下げることもあります。アクセスの多いサイトでは、送信のたびにフォームプラグインのすべての処理が走るため、サーバーの処理時間も奪われます。
よくある解決策の CAPTCHA は、そのコストを訪問者に押し付けます。訪問者はパズルを解かされ、一部は諦め、プライバシー保護ツールを使う人は先に進めなくなります。CAPTCHA サービスの多くは外部のコードを読み込み、訪問者のデータをサーバーの外に送ります。
もっと静かな方法があります。ボットには、人とは違う振る舞いがあり、それを気づかれずにチェックできるのです:
- 隠し欄を埋める。 ハニーポットとは、人には見えないものの HTML には存在する欄です。人は空のままにし、ボットは入力します。
- 速い。 人がフォームを埋めるには数秒かかります。ボットはミリ秒で済みます。
- 繰り返す。 1 つの IP や 1 つのメールアドレスから 1 時間に 10 通も届くなら、それは顧客ではありません。
- リンクを貼り付ける。 リンクだらけのメッセージが本物の問い合わせであることはまずありません。
よくある間違い
- 隔離せずにブロックする。 チェックで判断がつかないときは、メッセージを確認用に残しましょう。本物の顧客の質問を消してしまうことは、スパムを 1 通読むことよりもずっと悪い結果です。
- いきなり「ブロック」にする。 数日間は記録のみのモードで始めてください。ブロックさせる前に、何がブロックされていたかを確認しましょう。
- キャッシュで壊れるトークン。 スパム対策のトークンがキャッシュされたページの一部になっていると、訪問者全員が期限切れの同じトークンを共有することになります。ページの読み込み時にトークンを取得する保護を使ってください。
- チェックが 1 つだけ。 ハニーポットだけでは単純なボットしか止められません。入力時間のチェックと上限を加えましょう。
プラグインを使わない方法
ほとんどのフォームプラグインには、この基本的な仕組みが組み込まれています:
- Elementor Pro のフォーム: フィールドの一覧から「Honeypot」フィールドを追加します。
- Contact Form 7: アドオンでハニーポットを追加します。そのサービスへのデータ送信を受け入れるなら、CF7 は Akismet にも対応しています。
- WPForms: スパム対策トークンが組み込まれており、各フォームの設定で任意のハニーポットも使えます。
自分で管理しているフォームなら、簡単なハニーポットを手作業で追加することもできます:
<div style="position:absolute;left:-9999px" aria-hidden="true">
<label>Leave this empty <input type="text" name="website" tabindex="-1" autocomplete="off"></label>
</div>
<?php
if ( ! empty( $_POST['website'] ) ) {
wp_die( 'Spam detected.', 403 );
}
限界もあります。やり方はフォームプラグインごとに異なり、フォームをまたいだ共通の送信上限はたいていなく、誤判定を拾う隔離もなく、コメントやレビューには何の対策もありません。結局、同じ考え方を 5 回設定することになります。
うまくいかないときは
- 本物のメッセージが届かなくなった。 スパムシールドを監視モードに切り替えてテスト送信し、ログを見てどのチェックに引っかかったかを確認してください。
- 一部の訪問者だけフォームが失敗する。 保護を有効にした後、一度ページキャッシュを削除してください。
- それでもスパムが届く。 リンクの上限を下げる、ブロックリストに単語やドメインを追加する、あるいは既知のメールプロバイダーからのみ受け付けるべきフォームで厳格モードをオンにしてください。
Hushfort なら
Hushfort Security は無料の WordPress セキュリティプラグインで、Hushfort Pro はその上に追加する有料アドオンです。
Hushfort のスパムシールドは、無料版でコメントと WooCommerce のレビューを守ります。フォームプラグインには Hushfort Pro が必要で、人気の 6 つ(Elementor Pro、Contact Form 7、WPForms、Gravity Forms、Fluent Forms、Forminator)が同じ画面に加わります。
- 目に見えないハニーポット、最小入力時間、ページキャッシュがあっても機能する署名付きトークン。トークンは、Cookie を使わない約 2 KB の小さなスクリプトが取得します。
- Pro: デフォルトの上限は IP ごとに 1 時間あたり 5 件、メールアドレスごとに 1 時間あたり 3 件。リンクが 2 つを超えるメッセージは隔離されます。
- Pro: 約 9,900 の使い捨てメールアドレスのドメインリスト、独自のブロックリスト、ワードフィルター。
- Pro: 「スパムではない」から学習する隔離機能。
- 監視モードがあるので、実際にブロックする前に何がブロックされるかを確認できます。
CAPTCHA も外部 API も不要で、フォームのデータがサーバーの外に出ることは一切ありません。
よくある質問
ハニーポットで本当にフォームスパムを防げますか?
なぜ reCAPTCHA を避けるのですか?
ページキャッシュを使っていても機能しますか?
どのフォームプラグインに対応していますか?
スパムのようでも本物かもしれないメッセージはどうなりますか?
関連するハウツー
WordPress のコメントを無効にするには? スパムコメントを止めるには?
WordPress のコメントを無効化するか、開いたままスパムだけを止める方法。投稿と商品レビューを別々に設定でき、CAPTCHA も不要です。
手順を読むWordPress のスパム登録(偽ユーザー登録)を止めるには?
WordPress と WooCommerce のスパム登録対策。IP ごと・サイト全体の 1 時間あたりの上限とハニーポットで偽ユーザー登録を止めます。
手順を読むWordPress で偽の Googlebot を見分けてブロックするには?
WordPress で偽の Googlebot や悪質なボットをブロックする方法。本物は IP で確認し、IP ごとのリクエスト予算で負荷を抑えます。
手順を読む

