Contact Form 7のスパム対策|増えたときの確認から、選び方、入れたあとのテストまで

お問い合わせフォームに、同じような営業メールが毎日届く。設定を探しているうちに、スパム対策のプラグインをいくつも入れたくなりますよね。

ただ、最初に確かめたいのは「どんな送信を止めたいのか」と「普通の問い合わせはいまも届くのか」です。機械による大量送信と、人が入力している営業メールでは、効果が出やすい対策が違います。

この記事では、Contact Form 7を使っているサイトを前提に、記録を残すところから対策の設定、導入後のテストまでを順に進めます。設定名と利用条件は2026年9月16日に公式資料で確認しています。バージョンや翻訳によって表示が違う場合は、似た項目を推測で変更せず、使っている環境の案内と照合してください。

まず、設定を変える前の状態を残す

対策を入れたあとにメールが来なくなっても、迷惑送信だけが減ったのか、正常な送信まで止まったのかは、受信件数だけでは分かりません。

先に自分で正常なテストを1件送り、送信完了の表示と受信メールを確認します。そのうえで、最近届いた迷惑送信の特徴と、現在の設定を控えます。

対象フォーム:お問い合わせ
対象ページ:/contact/
記録した日時:
現在の対策:Turnstile/Akismet/禁止用語/その他
直近に変えた設定:
迷惑送信の特徴:同じ文章、同じリンク、短い間隔など
送信日時・件数:
通常のテスト送信:完了表示あり/なし
通知メールの到着:あり/なし
元に戻すときの設定値・担当者:

送信元のメールアドレスやIPアドレスが分かる場合も、公開記事や共有範囲の広い資料へそのまま貼らないようにします。入力されたメールアドレスは、相手の本人確認にはなりません。IPアドレスも、同じ回線を使う別の人と共通になることがあります。

この段階で正常なテストが届かないなら、スパム対策の追加は後回しです。まずはContact Form 7のメールが届かないときの確認に沿って、フォームの処理とメール配送を分けて調べます。

届いているものを、3つに分けてみる

ここでの分類は、送信者を断定するためではありません。最初に試す対策を選ぶための仮の分類です。

分類記録しておきたい特徴最初に検討すること
自動送信が疑われるもの短時間に続く、同じ形式が多い、内容がサイトと無関係Turnstileなどで送信時の自動化を検出する
繰り返し届く営業・宣伝提案文や掲載先が共通している、一定の文句が繰り返されるAkismetで内容を判定するか、特徴の強い禁止用語を検討する
判断がつかないもの短文、外国語、詳細不足など、普通の相談の可能性もあるすぐに一括拒否せず、追加の特徴と正規の問い合わせへの影響を見る

たとえば、英文だからという理由だけで止めると、海外のお客さまからの送信や、外国語の氏名を使った送信まで拒否してしまいます。「営業」という単語を禁止すると、「営業日を教えてください」という普通の質問も対象になり得ます。

また、人が普通にフォームを入力する営業メールは、自動送信の検査を通ることがあります。Turnstileを入れても営業メールが残ることと、設定が間違っていることは同じではありません。

Turnstile・Akismet・禁止用語は、役割が違う

大まかな違いを先に整理します。どの対策でもすべての迷惑送信を止められるわけではありません。止めたい送信と運用条件に合わせて選びます。

対策主な役割外部サービスとの通信費用・利用条件の確認点
Turnstile送信時のブラウザ動作などから、自動化の疑いを判定するCloudflareとの検証通信がある無料プランあり。ウィジェット数などに上限がある
Akismetフォームの内容などを使い、スパムかを判定するCF7ではフォーム入力全体などをAkismetへ送る非商用のPersonalと、商用向けの有料プランを区別する
禁止用語リスト登録した文字列やIPアドレスに該当する送信を止めるこの照合のためにAkismetなどへ問い合わせる仕組みではないWordPressの設定を使う。広すぎる語による誤検知に注意

Turnstileは、フォーム本文を送って営業文かどうかを判断する仕組みではありません。ただし検証のための通信はあるので、扱われる情報はCloudflareのTurnstile向けプライバシー案内で確認します。

一方、CF7のAkismet連携では、指定した氏名・メールアドレスだけでなく、ほかの入力内容や環境情報も判定へ送られます。相談内容に機密情報が入り得るフォームは、運営者のルールやプライバシーの案内と照合してから導入してください。

禁止用語の照合そのものは、外部へ問い合わせずに行われます。ただし、TurnstileやAkismetを同時に使っていれば、そちらの通信は続きます。外部へ何が送られるかは、対策ごとに分けて見ます。

自動送信が多いなら、まずTurnstileの公式連携を確認する

Contact Form 7には、Turnstileとの連携機能があります。標準の連携を使う場合、別のTurnstile用プラグインや、独自の検証コードを追加することが前提ではありません。

Cloudflareでキーを作る

Cloudflareの管理画面でTurnstileを開き、ウィジェットを追加します。名前は「企業サイトのお問い合わせ」など、あとで用途が分かるものにします。

続いて、フォームを設置しているホスト名を登録します。入力するのは、たとえば「example.com」であり、ページのパスまで含めた「example.com/contact/」ではありません。実際に使っているホスト名を確認し、www付きや検証環境が別にある場合も必要な範囲を整理します。

ウィジェットの種類は、CF7の公式案内で推奨されている「Managed」を選びます。作成後に表示されるサイトキーとシークレットキーを、管理できる場所へ控えてください。シークレットキーを公開ページや共有画像へ載せないようにします。

2026年9月16日に確認した無料プランの条件は、1アカウントあたり最大20ウィジェット、1ウィジェットあたり10ホスト名、チャレンジ数は無制限です。小規模な事業サイトや本番用途も対象に含まれます。Turnstileのためだけに、DNSやCDNをCloudflareへ移す必要はありません。

CF7のインテグレーションへキーを登録する

WordPressの「お問い合わせ」から「インテグレーション」を開きます。Turnstileの「インテグレーションのセットアップ」へ進み、サイトキーとシークレットキーを入力して保存します。

公式連携では、ウィジェットはフォームへ自動で組み込まれます。表示位置を変える場合は、フォームの置きたい場所に次のタグを入れます。

[turnstile]

このタグは位置を調整するためのもので、すべてのフォームに手作業で追加しないと連携できない、という意味ではありません。詳しい位置の扱いはCF7のTurnstile連携手順と照合できます。

すでに別プラグインや独自コードでTurnstileを入れている場合は、先に構成を調べます。検証機能を二重に読み込む変更は避け、既存の対策も、理由が分からないまままとめて無効にはしません。インテグレーションに項目が見当たらないときも、その場でプラグイン更新と設定変更を一緒に進めず、対応バージョンと更新時の戻し方を確認します。

内容の判定を加えるなら、Akismetの設定と送信データを確認する

Akismetを使う場合は、まず事業利用に合ったプランとAPIキーを用意します。AkismetのPersonalプランは非商用向けです。個人事業だからという理由で、事業用サイトにも非商用条件を当てはめないようにしてください。

WordPressでAkismet Anti-Spamを有効にし、APIキーを設定します。プラグインがなければ追加が必要ですが、それだけでCF7側の設定まで完了するわけではありません。

次に「お問い合わせ」から対象フォームを編集し、氏名とメールアドレスのフォームタグにAkismet用の指定を加えます。以下はフィールド名が「your-name」「your-email」の場合の例です。

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

既存フォームのフィールド名は、そのまま維持します。たとえば「your-name」を「name」に変えると、メール本文側のタグとの対応が崩れるおそれがあります。追加するのはAkismet用のオプションであり、既存フォーム全体をこの例で置き換える作業ではありません。

氏名やメールアドレスなどのフォームタグに指定を加えると、Akismetとの連携が働きます。判定精度のためだけに、不要なURL入力欄や必須項目を増やす必要はありません。入力の負担がすでに大きい場合は、問い合わせフォームの必須項目を減らす考え方も合わせて見直せます。

スパム判定のテストには、専用の値を使う

Akismet連携の動作確認では、氏名欄に指定を付けたうえで、公式のテスト値を使えます。

viagra-test-123

この値を氏名欄へ入れて送信すると、Akismetでスパムとして扱われるかを確かめられます。自動返信を使うフォームでは、メールアドレスにテスト担当者が管理する受信可能なものを使い、第三者へテストメールが送られないようにします。

これはAkismetの連携を確認するためのテストです。通常の問い合わせが通ることや、Turnstileも正しく動いていることまで証明するものではありません。終わったら普通の氏名・文章でも送信し、両方の結果を残します。

同じ宣伝文が繰り返されるときは、禁止用語を絞って入れる

禁止用語リストは、WordPressの「設定」から「ディスカッション」を開き、「コメント内で許可されないキーワード」に登録します。コメント用に見える項目ですが、CF7もこのリストを使います。

公式の禁止用語リストの説明に沿って、止めたい文字列やIPアドレスを1行に一つずつ入力します。最初から大量に入れるのではなく、繰り返される迷惑送信に固有の文字列から試します。

たとえば、説明用の架空の宣伝文にだけ「架空販促パッケージXYZ」という特徴的な表現が含まれるなら、その語を候補にできます。一方、「営業」「無料」「相談」のような一般的な語は、正規の問い合わせにも出てきます。

保存前のリストを必ず控え、新しく追加した行が分かるようにしてください。誤検知したとき、以前から必要だった禁止用語まで消さずに戻せます。

IPアドレスの登録も、同じ送信元が続いたという理由だけで広い範囲をまとめて拒否しないことが大切です。同じ回線の正常な利用者まで影響を受ける可能性があります。

一度に一つ変えて、同じ1件を最後まで追う

一度に一つずつ変えるのは、複数の対策を組み合わせてはいけない、という意味ではありません。

変更を分ければ、正規の問い合わせが止まったときに、どの追加設定を戻せばよいか分かります。必要な対策を組み合わせる場合も、まず一つの変更を検証してから次へ進めます。

テストは、フォームのページを開き直し、条件を変えながら1件ずつ行います。短時間に大量送信して判定を試す必要はありません。

テスト条件確認したいこと
パソコンで普通の問い合わせ完了表示と通知メールが確認できる
スマートフォンで普通の問い合わせ検証表示や送信操作が妨げられない
実際の顧客層に合わせた氏名・言語不必要な拒否が起きていない
「営業日」など、追加した禁止語に近い正常な文章広すぎる禁止設定がない
必須項目を空にした送信入力エラーになり、成功扱いにならない
Akismetのテスト値、または追加した禁止文字列想定した対策が反応する

それぞれについて、送信日時とテスト番号を控え、画面の表示、フォーム側の判定、受信箱を同じ1件で照合します。本文へ「動作確認T01」などと書いておくと、あとでメールを探しやすくなります。

テスト番号:T01
変更した設定:
送信日時:
端末・ブラウザ:
入力条件:普通の問い合わせ
画面の結果:完了/入力エラー/スパム判定/その他
フォーム側の結果:確認できた状態を記録
通知メール:到着/未着/迷惑メールへ振り分け
自動返信:使用している場合のみ確認
次にすること:

「送信できました」と「受信箱へ届きました」は別の確認

CF7のAjax送信では、入力エラー、スパム、メール送信成功、送信失敗を別のイベントで扱えます。技術担当者が確認する場合は、CF7のDOMイベントのうち、成功の「wpcf7mailsent」と、失敗も含む「wpcf7submit」を取り違えないようにします。

ただし、成功イベントが出ても、受信側の迷惑メール判定や配送の問題が残ることがあります。WordPressのメール送信処理も、処理の成功が相手の受信を保証するわけではありません。画面の色や受信メールのどちらか一方だけでは、問題が起きた場所を切り分けられません。

CF7は、標準では送信内容を保存しません。保存済みの履歴がない環境で、過去の全送信を管理画面から調べられると思わないようにしてください。Flamingoで記録を追加する方法はありますが、保存する個人情報、閲覧権限、保存期間を決める作業も伴います。導入前の履歴が復元されるわけではありません。

正規の問い合わせが止まったら、最後の変更を戻す

普通の内容を入れたテストが変更前は通り、変更後はスパム扱いになる。この状態なら、原因が確定するまで設定を追加し続けるのではなく、直前の変更を戻して比較します。

禁止用語なら今回追加した行、Akismetなら今回追加した設定、Turnstileなら今回の連携変更というように、範囲を限定します。ほかの保護機能まで一括で止める必要はありません。

戻したあとも同じテストを行います。元の状態に戻ったなら、拒否した条件やエラーの内容を調べてから再設定します。戻らない場合は、同時に発生したメール配送やフォーム自体の不具合も調査対象になります。

設定を保留した間の連絡方法は、サイトの運営者と相談して決めます。既存の電話窓口などがある場合は、利用できる範囲を明示すると、フォーム以外から連絡したい人も迷いにくくなります。

対策を足すより、構成を調べたほうがよい状態もある

連携用の項目が見当たらない、複数のCAPTCHAが動いている、普通の問い合わせが届かない、変更前の状態へ戻せない。このような場合は、設定を触る前に構成の確認が必要です。

相談するときは、最初に残したフォームのURL、変更日時、現在の対策、正常なテストの結果をまとめます。キーや顧客の問い合わせ内容は、そのまま送らず共有方法を確認してください。

迷惑送信を減らすことと、必要な問い合わせを受け取ることはセットです。ご自身で判断しきれないときは、WordPress・フォームの設定相談で現在の対策や送信結果を一緒に整理できればと思います。

SNS SHARE

はてなブックマークでシェアXでシェアLINEでシェア