Contact Form 7 のスパム対策:公式に用意された対策と、どれから入れるか

Contact Form 7 のスパム対策として公式に用意されているのは、reCAPTCHA(v3)、Cloudflare Turnstile、Akismet によるフィルタ、禁止用語リスト、クイズ、画像の CAPTCHA(Really Simple CAPTCHA)です。2026年11月14日に公式ドキュメントで確かめました。当社の見立てでは、入れる順番は、まず Flamingo で送信の結果を残せるようにし、次に Turnstile か reCAPTCHA のどちらかで機械による送信を止め、それでもすり抜ける決まった宣伝は禁止用語リストで止め、量が多ければ Akismet を足す、です。どれを入れても、入れたあとに一通送り、正当な問い合わせまで止めていないかを確かめます。

この記事は、Contact Form 7 の公式ドキュメント(英語版と日本語版)と FAQ、Google Cloud の reCAPTCHA のドキュメントを確かめた範囲で書いています。送信後の表示の見方はWordPressのお問い合わせフォームに、迷惑と判定された送信の見方はFlamingoの使い方に書きました。

止められた送信は、送った人に「失敗しました」とだけ見える

公式の FAQ では、迷惑と判定された送信には、メールの送信の失敗と同じ文を出します。違いは枠の色で、オレンジの枠が迷惑のしるしです。赤の枠(送信の失敗)のときの見方はContact Form 7 でメールが届かないときの原因と直し方に書きました。同じ文にしているのは、本当に迷惑な送信をする側に判定を知らせないためと、誤って判定された人を迷惑扱いしないためとされています。

つまり、対策が強すぎて正当な問い合わせを止めていても、送った人からもこちらからも気づきにくいということです。対策を入れる前に、Contact Form 7 5.1.2 以上と Flamingo 2.0 以上で使えるスパムの記録で、何が止めたかを見られるようにしておきます。

公式に用意されている対策

reCAPTCHA(v3)

Google の仕組みで、利用者に操作を求めず、スコアで機械による送信を見分けます。キーを「お問い合わせ」→「インテグレーション」に入れるだけで、フォームにタグは要りません。公式の説明の冒頭には、Google が利用者を reCAPTCHA Enterprise に移す予定で、多くの人にとって費用が増える、という注意があります。Google Cloud のドキュメントでは、月10,000回の評価までが無料の枠です。キーの作り方とバッジの扱いはContact Form 7 の reCAPTCHA 設定に書きました。

Cloudflare Turnstile

Cloudflare の仕組みで、公式の日本語の説明では「Turnstile は無料で利用できます」とされています。Cloudflare でサイト用のウィジェットを作ってサイトキーとシークレットキーを取り、「お問い合わせ」→「インテグレーション」の Turnstile の欄の「インテグレーションのセットアップ」から入れます。ウィジェットはフォームに自動で足され、置く位置を変えたいときだけ [turnstile] のタグを使います。

Akismet

送信の内容を Akismet に送って判定する仕組みです。公式の説明では、WordPress に同梱されている Akismet のプラグイン(Akismet Anti-Spam)を有効にして API キーを入れ、フォームのタグに次のようなオプションを足します。

  • 名前の欄:[text* your-name akismet:author]
  • メールアドレスの欄:[email* your-email akismet:author_email]
  • URL の欄:[text your-url akismet:author_url]

API キーは、個人のブログは無料で、会社や商用のサイトは有料のプランです。判定には、オプションを付けた欄だけでなく、すべての入力が Akismet に送られます。動いているかは、名前の欄に viagra-test-123 と入れて送り、オレンジの枠が出るかで確かめられます。

禁止用語リスト

公式の日本語の説明では、WordPress の「設定」→「ディスカッション」にある「コメント内で許可されないキーワード」の欄に、語か IP アドレスを一行に一つずつ書きます。その語を含む送信や、その IP アドレスからの送信は、Contact Form 7 が迷惑として扱い、メールとして送りません。同じ宣伝が何度も来るときに、その中の決まった語や送信元の IP アドレスを足します。送信元の IP アドレスは、通知のメールに [_remote_ip] のメールタグを入れておくと分かります。

この欄は WordPress のコメントの設定と同じ場所なので、コメントを受け付けているサイトでは、コメントの扱いにも効くと考えられます(当社の見立て)。短い語やよく使う語を入れると、正当な問い合わせまで止めるおそれがあるので、宣伝に特有の語に絞ります。会社のサイトでコメントを止める考え方はWordPressのコメントを無効にする方法に書きました。

クイズ

[quiz capital-quiz "The capital of Japan?|Tokyo"] のように、「|」の前に質問、後に答えを書くタグです。公式は、人間なら答えられそうな質問と答えを考えるだけで、CAPTCHA と同じような役割を果たせる、としています。質問と答えの組を複数並べると、その中から一つが選ばれて出ます。

画像の CAPTCHA(Really Simple CAPTCHA)

画像の文字を読ませる方式で、Contact Form 7 の公式の CAPTCHA のモジュールです。サーバーに GD と FreeType という PHP のライブラリが要ります。公式のページには、Contact Form 7 4.3 以降は Really Simple CAPTCHA ではなく reCAPTCHA を勧める、という注記があります。

どれから入れるか(当社の見立て)

  1. Flamingo を入れて、送信の結果とスパムの記録が残るようにします。対策の効き目も、止めすぎも、ここでしか見えません。
  2. Turnstile か reCAPTCHA のどちらかを入れます。どちらもキーを入れるだけで動きます。費用の見通しを立てやすいのは、公式の日本語の説明で無料とされている Turnstile です。reCAPTCHA には、月の無料の枠と、Enterprise への移行に伴う費用の注意があります。
  3. それでも同じような宣伝が届くなら、その語や IP アドレスを禁止用語リストに足します。
  4. 量が多く、手で追いきれないなら Akismet を足します。会社のサイトは有料のプランです。公式の Akismet の説明も、一つの対策に頼らず、いくつかを組み合わせるよう勧めています。

クイズと画像の CAPTCHA は、送る人に一手間かけさせる分、問い合わせそのものが減るおそれがあるので、上の対策で足りない場合の選択肢と考えています。

入れたあとに確かめること

  • 自分のスマートフォンと会社のパソコンからフォームを一通ずつ送り、オレンジの枠が出ずに届くかを見ます。
  • Flamingo の迷惑な送信の一覧を月に一度は開き、正当な問い合わせが混じっていないかを見ます。Akismet の判定が誤っていたときは、Flamingo で「スパムではない」に戻すと Akismet に報告されると公式は書いています。
  • 対策を入れた日と設定を変えた日を記録しておきます。問い合わせが減ったときに、対策のせいかどうかを見分ける手がかりになります。月ごとの件数を残す表の作り方は問い合わせの記録シート(Excel)に書きました。

参考にした公式の情報

いずれも2026年11月14日に内容を確かめました。プラグインや管理画面の表示名は、版や言語の設定によって変わることがあります。