← ブログに戻る
WordPressContact Form 7スパムボット対策

Contact Form 7のスパムを的確に減らす

Marc Wagner·2026年10月5日·6分 で読める

どの問題が起きていますか?

3つのケースは似ていますが、原因は異なります。

  • スパムが届く。 受信箱が広告、リンク、意味のないテキストで埋まります。フォームがボットを通しています。
  • フォームがエラーを表示する。 訪問者には「There was an error trying to send your message. Please try again later.」と表示されます(他言語のサイトでは翻訳されています)。原因はスパム保護の場合も、メール送信の問題の場合もあります。
  • 本物の問い合わせが届かない。 誰も苦情を言いませんが、何も届きません。その場合、保護が人を拒否しているか、メールが受信箱に届いていない可能性があります。

保護を追加する前に、まずどのケースかを特定してください。その方法は「メール配信か、ボット対策か?」の節で説明しています。

Contact Form 7自体が備えるもの

Contact Form 7には、スパム対策がいくつか組み込まれています(バージョン6.1.7で確認)。

  • 禁止リスト。 CF7は、すべての送信を「設定 → ディスカッション」(「Disallowed Comment Keys」)のリストと照合します。一致すればスパムとみなされます。繰り返し現れる単語やドメインには有効ですが、新しいテキストには効きません。
  • クイズフィールド。 タグ[quiz]を使うと、フォームは自分で決めた質問を出します。どんなフォームにも入力するボットは失敗しますが、特定のサイトを狙って攻撃するボットは通過します。
  • Akismet。 AkismetプラグインとAkismetキーがあれば、CF7は名前、メールアドレス、本文をAkismetサービスで確認します。
  • reCAPTCHA v3。 CF7はGoogleからスクリプトを読み込み、スコアがしきい値を下回る送信を拒否します。
  • Cloudflare Turnstile。 CF7はTurnstileを統合しています。スクリプトはCloudflareから読み込まれます。

禁止リストとクイズは外部サービスなしで動作します。Akismet、reCAPTCHA、Turnstileは訪問者のデータを各提供元に送信するため、プライバシーポリシーに記載する必要があります。

追加のボット対策が意味を持つとき

専用のボット対策が役立つのは、次のような場合です。

  • 禁止リストとクイズを使ってもスパムが届き続ける
  • GoogleやCloudflareからスクリプトを読み込みたくない
  • 拒否された送信ごとに、拒否された理由を確認したい

クイズでフォームを十分に守れるなら、それ以上は必要ありません。誰も必要としない保護は、エラーの原因を一つ増やすだけです。

Contact Form 7向けにSilentShieldを設定する

公式プラグイン「SilentShield – Captcha & Anti-Spam」は、独自のコードなしでContact Form 7を保護します。Contact Form 7 6.1.7とWordPress 7.0でテスト済みです。

  1. WordPressのプラグインディレクトリからプラグインをインストールして有効化します。
  2. 「SilentShield → API / SilentShield」でキーを入力し、「Validate」をクリックし、「Activate API」をオンにして保存します。
  3. 「SilentShield → Forms」でContact Form 7をオンにします。

サイトはhttpsで動作している必要があります。そうでないとフォームを送信できません。すべての手順とテスト済みのフォームプラグインはWordPressガイドにあります。送信はすべてクォータに計上されます。料金とクォータをご覧ください。

本物の送信と失敗する試行をテストする

本物の送信: プライベートウィンドウでページを開き、フォームに手で入力して送信します。緑の枠線が付いたCF7の確認メッセージが表示されるはずです。

失敗する試行: 同じフォームを、ブラウザーを使わずにCF7のインターフェースへ送信します。フォームIDと_wpcf7_unit_tagの値は、ページのソースにあるフォームの隠しフィールドで確認できます。

curl -X POST "https://example.com/?rest_route=/contact-form-7/v1/contact-forms/123/feedback" \
  -F "_wpcf7=123" -F "_wpcf7_unit_tag=wpcf7-f123-p45-o1" -F "_wpcf7_container_post=45" \
  -F "your-name=Test" -F "[email protected]" -F "your-message=Test"

"status":"spam"を含むレスポンスが返るはずです。SilentShieldの場合、メッセージは「Behavior check」となります。

メール配信か、ボット対策か?

Contact Form 7では、「スパム」と「メールを送信できませんでした」が同じ既定のテキストになっています。見分けられる場所は二つあります。

  • メッセージの枠線の色: オレンジはスパム、赤はメール送信の失敗を意味します。ただし、テーマがCF7の色を上書きしていない場合に限ります。
  • ブラウザーでのレスポンス: 開発者ツール(ネットワークタブ)では、feedbackへのレスポンスにstatusが含まれ、その値はspamかmail_failedのどちらかです。

mail_failedであれば、ボット対策は送信を通しています。問題はWordPressのメール送信にあります。その場合は、たとえばSMTPプラグインを使ってメール設定を確認してください。spamであれば、いずれかの保護機能が拒否しています。SilentShieldの場合、メッセージに「Behavior check」のような理由が示されます。

限界

  • 人が手で書いたスパムを防げる保護はありません。
  • ブラウザーでJavaScriptが使えないと、保護されたフォームへの送信は拒否されます。
  • SilentShieldはボットからフォームを守ります。WebアプリケーションファイアウォールやDDoS対策の代わりにはなりません。

フォーム保護を設定する

関連ページ

CAPTCHAをやめる準備はできましたか?

フォームを目に見えない形で保護しましょう。クレジットカード不要。