【WordPress】メールフォームのスパム対策|最短手順と原因別の追加設定

WordPress

wordpressのメールフォームから英数字だけの文章、不自然な海外リンク、同じ内容の営業文が繰り返し届く場合は、受信箱で削除を続けるより、フォームの送信段階で止める対策が必要です。

ただし、スパム対策プラグインを一つ追加すればすべて解決するわけではありません。

自動送信ボット、人が手作業で送る営業メッセージ、通知メールの配信不良は原因が異なるため、症状を切り分けて設定することが重要です。

この記事では、利用者の負担が少ない基本設定から始め、Contact Form 7の具体的な操作、ほかのフォームプラグインで確認する項目、誤判定や大量送信が残る場合の追加対策まで順番に解説します。

WordPressのメールフォームのスパム対策は複数の機能を重ねる

最初に行うべき対策は、フォームプラグイン内蔵のスパム防止機能を有効にし、Cloudflare Turnstileなどのボット判定を追加することです。

それでも届く場合は、Akismetによる内容判定、禁止用語や送信元の制限、サーバーやWAFによる送信回数の制限を段階的に追加します。

最初から多数のプラグインを重ねると、正規の問い合わせまで拒否したときに原因を特定しにくくなります。

次の順番で、一段階ずつ設定とテストを進めると安全です。

  1. WordPress本体、テーマ、フォームプラグインを更新する
    古いプラグインのままでは、現在のスパム対策機能が使えない場合や、既知の不具合が残っている場合があります。
  2. フォーム内蔵のアンチスパム機能やハニーポットを有効にする
    利用者に追加操作を求めず、自動入力するボットを判別できるため、最初の対策に向いています。
  3. Cloudflare Turnstile、reCAPTCHA、hCaptchaのいずれかを追加する
    利用中のフォームプラグインが公式対応している方法を一つ選び、複数のCAPTCHAを同時に動かさないようにします。
  4. Akismetなどの内容判定を追加する
    送信文、氏名、メールアドレスなどを総合的に判定できるため、単純なボット対策を通過するスパムにも対応しやすくなります。
  5. 繰り返し現れる語句、ドメイン、IPアドレスを個別に制限する
    正規の問い合わせを巻き込まないよう、短く一般的な単語ではなく、スパム特有の文字列を登録します。
  6. 大量送信が続く場合だけWAFやレート制限を使う
    フォームへ到達する前の通信量を抑え、WordPressとメールサーバーの負荷を軽減します。
届いている内容考えやすい送信方法優先する対策
意味のない英数字や海外リンクが大量に届く自動送信ボットハニーポット、Turnstile、Akismet、送信回数制限
自然な日本語の営業文が少数届く人による手動送信、または高度な自動生成営業目的の選択項目、固有フレーズの禁止、受信箱の振り分け
送信完了画面は出るが通知メールが届かないフォームスパムではなくメール配信設定の問題From、Reply-To、SMTP、SPF、DKIM、受信側の迷惑メール判定を確認
無関係な第三者へ自動返信が送られているフォームの自動返信機能の悪用ボット対策、レート制限、自動返信内容と送信条件の見直し

Contact Form 7の公式案内でも、Akismet、Cloudflare Turnstile、禁止用語リストなど、異なる種類の対策を組み合わせる方法が示されています。

一つの機能で完全に止めるのではなく、利用者の操作を増やしすぎない範囲で層を重ねるのが基本です。

[参照元]
サイト名:Contact Form 7 日本語公式サイト
サイトURL:https://contactform7.com/ja/faq/i-get-spam-messages-through-my-contact-forms-how-can-i-stop-them/
資料・記事タイトル:コンタクトフォームからスパムのメッセージが届きます。どうすれば防げますか?
公開・更新日時:記載なし(確認日:2026年7月24日)

最初にフォームスパムの種類を切り分ける

対策を選ぶ前に、届いているメールが「ボット投稿」「人による営業送信」「メール配信の不具合」のどれに近いかを確認します。

ここを間違えると、CAPTCHAを強化したのに営業メールが減らない、スパム対策を弱めたのに通知メールが届かない、といった遠回りが起きます。

英数字やリンクが大量に届く場合

短時間に同じ形式のメッセージが繰り返し届き、本文に意味のない英数字、暗号資産、医薬品、海外サイトのURLなどが含まれる場合は、自動送信ボットの可能性が高いと考えられます。

このタイプには、ハニーポット、Turnstile、reCAPTCHA、Akismet、送信回数制限が向いています。

フォームを公開した直後から届くこともありますが、特定の運営者だけを狙っているとは限りません。

自動巡回でフォームを見つけ、同じ仕組みで多数のサイトへ送信しているケースもあるため、メールアドレスを変更するだけでは根本的な解決にならないことがあります。

自然な日本語の営業文が届く場合

会社名、担当者名、提案内容が自然で、本文がサイトの内容にある程度合わせて書かれている場合は、人が送信している可能性があります。

このタイプはCAPTCHAを正常に通過できるため、TurnstileやreCAPTCHAだけで完全に止めることはできません。

「営業・売り込み」「SEO提案」「制作代行」など、繰り返し現れる固有フレーズを限定的に禁止する方法が現実的です。

問い合わせ目的の選択欄を設け、営業目的を別カテゴリへ分ける方法や、受信メール側で専用フォルダへ振り分ける方法も役立ちます。

ただし、「無料」「会社」「サービス」のような一般語を禁止すると、正規の問い合わせまで失うおそれがあります。

送信完了後に通知メールだけ届かない場合

フォーム上では送信完了と表示されるのに管理者宛ての通知が届かない場合は、フォームへのスパム投稿とは別問題です。

送信元のFromに訪問者のGmailやYahoo!メールを直接入れている、独自ドメインの送信認証が整っていない、サーバーの送信制限にかかっている、受信側で迷惑メール判定されているなどの原因を確認します。

SPF、DKIM、DMARCやSMTPの設定は通知メールの信頼性を高める対策であり、フォームへ入力されるスパム自体を止める機能ではありません。

Contact Form 7で行う具体的なスパム対策手順

Contact Form 7を使っている場合は、まずCloudflare Turnstileを設定し、その後にAkismetと禁止用語リストを追加する順番が分かりやすいです。

設定後はFlamingoなどでスパム判定の理由を確認できる状態にしておくと、正規メールの誤判定にも対応しやすくなります。

Cloudflare Turnstileを設定する

Contact Form 7の公式サイトは、特別な理由がなければGoogle reCAPTCHAよりCloudflare Turnstileを選ぶよう案内しています。

TurnstileはCloudflareのCDNを利用していないサイトでも使え、Contact Form 7側の連携機能が表示と検証を処理します。

  1. Cloudflareのアカウントへログインする
    アカウントがない場合は作成し、Turnstileの管理画面を開きます。
  2. サイト用のウィジェットを作成する
    対象ドメインを登録し、サイトキーとシークレットキーを取得します。
  3. WordPress管理画面で「お問い合わせ」から「インテグレーション」を開く
    Turnstileの項目にあるインテグレーション設定を選びます。
  4. サイトキーとシークレットキーを貼り付ける
    保存すると、原則としてContact Form 7で作成したすべてのフォームにTurnstileが適用されます。
  5. 実際のフォームから送信テストをする
    パソコン、スマートフォン、シークレットウィンドウなどで正常に送信できるか確認します。

ウィジェットの表示位置を変えたい場合は、フォームテンプレートへ[turnstile]タグを挿入します。

表示されない場合は、キャッシュ最適化、JavaScriptの遅延読込、コンテンツセキュリティポリシー、登録ドメインの間違いを確認してください。

[参照元]
サイト名:Contact Form 7 日本語公式サイト
サイトURL:https://contactform7.com/ja/turnstile-integration/
資料・記事タイトル:Cloudflare Turnstile インテグレーション
公開・更新日時:記載なし(確認日:2026年7月24日)

AkismetをContact Form 7へ連携する

Turnstileが主に自動送信ボットを判別するのに対し、Akismetは送信内容や送信環境を含めてスパムかどうかを判定します。

商用サイトと非商用サイトでは利用条件が異なるため、APIキーを取得するときに現在のプラン条件を確認してください。

  1. Akismet Anti-Spamをインストールまたは有効化する
    WordPress管理画面のプラグイン一覧から有効にします。
  2. AkismetのAPIキーを設定する
    案内に従ってアカウントとサイトを接続します。
  3. Contact Form 7のフォーム編集画面を開く
    氏名欄とメールアドレス欄のフォームタグへAkismet用オプションを追加します。
  4. 保存後に通常送信とスパム判定の両方をテストする
    正規の問い合わせが通ることを先に確認します。

氏名欄とメールアドレス欄は、次のように設定できます。

[text* your-name akismet:author]
[email* your-email akismet:author_email]

Akismetの動作確認では、公式が用意しているテスト用の文字列を使えます。

氏名欄へviagra-test-123、またはメール欄へakismet-guaranteed-spam@example.comを入力して送信し、スパムとして止まるか確認します。

テスト後は、必ず通常の氏名とメールアドレスでも送信し、正規の通知が届くことを確認してください。

[参照元]
サイト名:Contact Form 7 日本語公式サイト
サイトURL:https://contactform7.com/ja/spam-filtering-with-akismet/
資料・記事タイトル:Akismet によるスパムフィルタリング
公開・更新日時:記載なし(確認日:2026年7月24日)

禁止用語リストで繰り返し届く内容を止める

TurnstileとAkismetを通過する同じ営業文や特定ドメインのリンクが続く場合は、WordPressの禁止用語リストを補助的に使えます。

Contact Form 7は、WordPressの「コメント内で許可されないキーワード」に登録した語句やIPアドレスをフォーム送信にも利用できます。

  1. WordPress管理画面の「設定」を開く
  2. 「ディスカッション」を選ぶ
  3. 「コメント内で許可されないキーワード」を探す
  4. 一行につき一つの語句、メールドメイン、URLの一部、IPアドレスを入力する
  5. 変更を保存し、正規のテスト送信を行う

登録するのは、毎回ほぼ同じ形で現れる営業文、特定の不審ドメイン、明確に反復している文字列などに絞ります。

IPアドレスは変更されることがあり、共有回線では複数の利用者が同じIPを使うこともあるため、IPだけに依存しない方が安全です。

Contact Form 7のメール本文へ[_remote_ip]を追加すると、送信元IPを確認できます。

禁止語は部分一致による誤判定に注意

短い一般語を登録すると、その文字列を含む正規の問い合わせまでスパム扱いされる可能性があります。

[参照元]
サイト名:Contact Form 7 日本語公式サイト
サイトURL:https://contactform7.com/ja/comment-blacklist/
資料・記事タイトル:禁止用語リスト(旧コメントブラックリスト)
公開・更新日時:記載なし(確認日:2026年7月24日)

Flamingoでスパム判定の理由を確認する

Contact Form 7は標準状態では送信内容をWordPress内へ保存しません。

正規の問い合わせがスパム扱いされていないか確認したい場合は、同じ開発者が提供するFlamingoを使って送信内容とスパムログを保存します。

「Flamingo」から「受信メッセージ」を開き、スパム欄に入ったメッセージの理由を確認してください。

Turnstile、Akismet、禁止用語リストのどれが反応したか分かれば、必要な設定だけを調整できます。

原因が分からないままスパム判定機能全体を無効にするのではなく、誤判定している一つの機能を特定して直すことが重要です。

[参照元]
サイト名:Contact Form 7 日本語公式サイト
サイトURL:https://contactform7.com/ja/2019/05/31/why-is-this-message-marked-spam/
資料・記事タイトル:どうしてこのメッセージがスパムなの?
公開・更新日時:2019年5月31日

Contact Form 7以外のフォームプラグインで確認する設定

wordpressのメールフォームはプラグインごとに設定画面と対応サービスが異なります。

利用中のプラグイン名を確認し、非公式の追加コードより先に、フォーム本体が提供しているアンチスパム機能を探してください。

フォーム最初に確認する機能スパムが残る場合
WPFormsフォーム編集画面の「Spam Protection and Security」でModern Anti-Spam Protectionが有効か確認最短送信時間、Akismet、Turnstile、reCAPTCHA、hCaptcha、メールアドレスやキーワードのフィルターを追加
Elementor Proのフォームフォーム項目へHoneypotを追加ElementorのインテグレーションでreCAPTCHAを設定し、フォームへ対象フィールドを追加
その他のフォームプラグインAnti-Spam、Honeypot、Spam Protectionなどの公式設定を確認公式対応するCAPTCHAまたはAkismetを一つずつ追加し、送信履歴と誤判定を確認

WPFormsでは、標準のアンチスパム機能に加え、Akismet、Cloudflare Turnstile、reCAPTCHA、hCaptchaなどをフォーム単位で設定できます。

Elementorのフォームでは、見えないおとり欄を使うHoneypotとreCAPTCHAを利用できます。

どのプラグインでも、同じ役割の機能を重複させすぎるとJavaScriptの競合や誤判定が起きやすくなるため、一つ追加するたびに送信テストを行います。

[参照元]
サイト名:WPForms公式ドキュメント
サイトURL:https://wpforms.com/docs/how-to-prevent-spam-in-wpforms/
資料・記事タイトル:How to Prevent Spam in WPForms
公開・更新日時:2024年9月24日
[参照元]
サイト名:Elementor公式ヘルプ
サイトURL:https://elementor.com/help/form-widget/
資料・記事タイトル:Form widget
公開・更新日時:記載なし(確認日:2026年7月24日)

スパムが残る場合に追加する対策

基本設定後もスパムが届く場合は、届いたメッセージの共通点を確認し、狙いを定めて追加対策を行います。

制限を強くするほど正規の利用者も送信しにくくなるため、影響の小さい方法から進めてください。

不要な入力欄を減らす

サイトURL、自由記述欄、ファイル添付、自動返信など、運営上使っていない機能は削除または停止します。

特にサイトURL欄は、リンクを残したいスパムに利用されやすいため、必要がなければ設置しない方が管理しやすくなります。

自由記述欄だけの簡単なフォームより、問い合わせ種別、氏名、返信先、具体的な相談内容を分けたフォームの方が、内容に基づく判定や受信後の振り分けを行いやすくなります。

送信に必要な最低時間を設定する

対応しているフォームでは、ページを表示してから送信できるまでの最低時間を設定します。

人が内容を読むより短い時間で送信された投稿を止められるため、高速に連投するボットへ有効です。

最低時間を長くしすぎると、入力補助やブラウザーの自動入力を使う正規利用者まで拒否する可能性があるため、初期値から少しずつ調整します。

WAFやレート制限で大量送信を抑える

短時間に数百件以上の送信が続く場合は、WordPressのフォーム処理へ到達する前に通信を抑える方法を検討します。

レンタルサーバーのWAF、CDNのファイアウォール、フォーム送信先へのレート制限などが候補です。

Cloudflareの資料でも、Turnstileはフォーム上でボットを確認し、WAFやBot Managementは別のネットワーク層で通信を制御する仕組みとして区別されています。

フォームプラグインによって送信先URLや通信方式が異なるため、推測でルールを作らず、サーバー会社または利用サービスの手順に従ってください。

[参照元]
サイト名:Cloudflare Developers
サイトURL:https://developers.cloudflare.com/turnstile/
資料・記事タイトル:Cloudflare Turnstile Overview
公開・更新日時:2026年5月20日

国やIPアドレスの一括遮断は最後に行う

国内向けサイトで海外からのスパムが多い場合でも、国単位の遮断は海外在住者、旅行中の利用者、VPN利用者を巻き込む可能性があります。

まずTurnstile、Akismet、固有語句、送信回数制限を使い、それでも被害が大きい場合にアクセスログを確認して範囲を絞ります。

IPアドレスも固定とは限らないため、一つずつ登録し続けるだけではいたちごっこになりやすい対策です。

正規の問い合わせが届かなくなった場合の確認手順

スパム対策後に正規メールが届かないときは、追加した設定を一度に全部外さず、判定ログを見ながら一つずつ原因を確認します。

  1. フォーム画面の表示を確認する
    TurnstileやreCAPTCHAが表示されているか、JavaScriptエラーが出ていないかを確認します。
  2. 通常の氏名、メールアドレス、本文で送信する
    禁止用語やテスト用文字列を含まない内容を使います。
  3. 送信時のメッセージを確認する
    Contact Form 7でオレンジ色のエラーが出る場合は、スパム判定が働いた可能性があります。
  4. 保存されたスパムログを確認する
    Akismet、Turnstile、禁止用語のどれが反応したかを調べます。
  5. 送信成功なのにメールが届かない場合はメール設定へ切り替える
    From、Reply-To、送信ドメイン認証、SMTP、サーバーの送信ログ、受信側の迷惑メールフォルダを確認します。
  6. 変更は一項目ずつ行う
    変更前後の結果を記録し、正常に戻った設定を特定します。

Contact Form 7では、Fromにフォーム入力者の外部メールアドレスをそのまま使わず、サイトと同じドメインの実在するアドレスを設定します。

返信先には、追加ヘッダーのReply-Toへ入力者のメールアドレスを指定します。

この設定は、通知メールがなりすましと判断されにくくするためのもので、フォームスパムを直接止める設定ではありません。

From: サイト名 <wordpress@example.com>
Reply-To: [your-email]
[参照元]
サイト名:Contact Form 7 日本語公式サイト
サイトURL:https://contactform7.com/ja/best-practice-to-set-up-mail/
資料・記事タイトル:メールのセットアップに関するベストプラクティス
公開・更新日時:記載なし(確認日:2026年7月24日)

wordpress メールフォームのスパム対策で避けたい設定

スパムが急増すると、強い制限を一気に入れたくなりますが、正規の問い合わせを失う対策は本末転倒です。

  • 同じフォームへ複数のCAPTCHAを重ねる
    表示崩れ、JavaScript競合、送信失敗の原因を増やします。
  • 短い一般語を禁止する
    「無料」「会社」「相談」などを登録すると、通常の問い合わせまで拒否する可能性があります。
  • 原因を確認せずスパム判定全体を無効にする
    一時的に正規メールが通っても、ボット投稿も同時に通る状態になります。
  • SPF、DKIM、DMARCだけでフォームスパムが止まると考える
    これらは主に送信メールの認証と到達性に関係し、フォーム入力の受付を制限するものではありません。
  • IPアドレスを無制限に追加する
    送信元の変更に追いつけず、共有IPの正規利用者を巻き込むおそれがあります。
  • 更新していないフォームプラグインへ追加機能だけ重ねる
    互換性問題や既知の不具合を残したまま、原因の切り分けを難しくします。

目標はスパム件数を機械的にゼロへ近づけることではなく、正規の問い合わせを失わずに不要な送信を大幅に減らすことです。

スパムログと通常送信の結果を見ながら、必要最小限の制限へ調整してください。

まとめ[Q&A]

Q:wordpressのメールフォームで最初に行うスパム対策は何ですか?

A:フォーム内蔵のアンチスパム機能を有効にし、公式対応するTurnstileなどのボット判定を一つ追加する方法が基本です。

Q:Contact Form 7ではTurnstileとreCAPTCHAのどちらを選びますか?

A:Contact Form 7の公式案内では、特別な理由がなければCloudflare Turnstileが推奨されています。

Q:Akismetだけでスパムを完全に止められますか?

A:完全には止められないため、Turnstile、Akismet、禁止用語リストを役割別に組み合わせます。

Q:自然な日本語の営業メールもCAPTCHAで止まりますか?

A:人が送信している場合は通過できるため、固有フレーズの禁止、問い合わせ種別の分離、受信箱の振り分けを併用します。

Q:送信完了と表示されるのに通知メールが届かない原因は何ですか?

A:フォームスパムではなく、From、Reply-To、SMTP、SPF、DKIM、サーバーの送信制限、受信側の迷惑メール判定を確認します。

Q:スパム対策を強化したら正規メールも届かなくなりました。

A:判定機能を全部無効にせず、Flamingoなどのログで反応した機能を確認し、一項目ずつ調整してください。

Q:スパムを完全にゼロにできますか?

A:手動送信や新しい回避方法もあるためゼロを保証することはできませんが、複数の層を順番に設定すれば件数と対応負担を大きく減らせます。

さらに詳しく知りたい方へ

スパム対策後、WordPressや独自ドメインからメールを送信できない場合は、SMTP設定の切り分けが必要です。

お名前.comでメールが送信できない原因と対処法

送信済みになっているのにメールを受信できない場合は、受信側とサーバー側を分けて確認してください。

お名前.comのメールが受信できない時の対処法

コメント

タイトルとURLをコピーしました