reCAPTCHA v3 の設定は、キーを2つ取ってフォームに貼るだけで終わります。難しいのはその先、スコアのしきい値をいくつにするかです。この記事は、自社サイトの問い合わせフォームにこれから reCAPTCHA を入れる Web 担当者・情シス・問い合わせ担当者向けです。結論から書くと、しきい値は既定の 0.5 から動かさず、まず記録だけ取ってください。扱うのは設定手順としきい値の判断までで、すでに設定済みなのに営業メールが減らないという段階の方はreCAPTCHA で営業メールが減らない理由のほうが近いはずです。
手順1:サイトキーとシークレットキーを取得する
キーの発行は Google アカウントがあれば管理コンソールで完結します。ただし入れる前に一点。Contact Form 7 の開発元は公式ページで「Google has a plan to make all reCAPTCHA users migrate to reCAPTCHA Enterprise. This means a cost increase for many of you.」と告知しています(Contact Form 7 公式)。無料の前提で設計するなら、この移行予告は把握しておいてください。
- reCAPTCHA 管理コンソールの登録画面を開き、識別用のラベルを入力します。
- reCAPTCHA タイプで v3 を選びます。
- ドメイン欄に対象サイトのドメインを入力します。www の有無に注意し、両方使っているなら両方登録します。
- サイトキー(HTML に書いてよい)とシークレットキー(サーバー側だけで使う)が発行されます。
問い合わせフォームなら v3 が基本です。
| v2 チェックボックス | v2 Invisible | v3 | |
|---|---|---|---|
| 利用者の操作 | 「私はロボットではありません」をクリック | 不要(既存ボタンで発火) | 不要 |
| サイトが受け取るもの | 通過/不通過 | 通過/不通過 | 0.0〜1.0 のスコア |
| Contact Form 7 の標準対応 | なし(アドオン要) | なし | あり |
Google は v3 を「a pure JavaScript API returning a score」と説明しています(バージョン比較)。弾く仕組みではなく、疑わしさの目盛りを渡す仕組みです。
なお v2 用のキーは v3 では動かず、登録し直しが必要です(Contact Form 7 公式に「keys for v2 don't work with the v3 API」と明記)。また Google の v3 ドキュメント冒頭には現在「This page is deprecated. See the reCAPTCHA Enterprise documentation page」との告知が出ています。
手順2:フォームに組み込む
Contact Form 7 は管理画面にキーを貼るだけ、自作フォームはサーバー側の検証まで書いて完了です。
Contact Form 7 の場合。管理画面の「お問い合わせ」→「インテグレーション」(英語表記では Contact > Integration)で「reCAPTCHA」ボックスの「インテグレーションのセットアップ」を開き、キー2つを貼って保存します。v3 はウィジェットが不要なので [recaptcha] フォームタグは要りません(残っていても 5.1 以降は無視)。標準対応は v3 のみで、v2 にはアドオンが必要だと公式 FAQにあります。設定全体はContact Form 7 のスパム対策にまとめました。
素の HTML の場合。サイトキー付きで API を読み込み、送信時にトークンを取ってサーバーへ送ります。
<script src="https://www.google.com/recaptcha/api.js?render=サイトキー"></script>
<script>
grecaptcha.ready(function () {
grecaptcha.execute('サイトキー', {action: 'submit'})
.then(function (token) { /* token をバックエンドへ送る */ });
});
</script>
Google は「reCAPTCHA tokens expire after two minutes.」とし、「make sure to call execute when the user takes the action rather than on page load」と、利用者が操作した時点で呼ぶよう明記しています(いずれもv3 の公式文書)。読み込み時に取ると、長文を書くフォームでは失敗します。
サーバー側は、トークンを https://www.google.com/recaptcha/api/siteverify へ POST します(secret と response、任意で remoteip)。v3 の応答には success のほか score と action が入り、公式は「when you verify the reCAPTCHA response, you should verify that the action name is the name you expect」と、action 名の照合まで行うよう求めています(v3 の公式文書)。hostname の確認も忘れずに。頻出エラー timeout-or-duplicate は公式のエラーコード一覧で「too old or has been used previously」、つまり2分超過か二重検証と説明されています(エラーコード一覧)。
この検証を省くと reCAPTCHA は機能しません。自作フォームで最も多い設定漏れがここです。
スコアの読み方としきい値の決め方
スコアは 0.0〜1.0 で「1.0 is very likely a good interaction, 0.0 is very likely a bot」、既定値は「By default, you can use a threshold of 0.5.」です(v3 の公式文書)。Contact Form 7 の既定も 0.50 で、wpcf7_recaptcha_threshold フィルターフックで変更できます。
ただし Contact Form 7 の公式 FAQ は、その変更方法を示した直後に「However, don't rush into doing this. You should grasp and analyze the current situation first.」(急がず、まず現状を把握し分析すること)と釘を刺しています。Google 本体も同じ順番で、まず何もせずに実行し、管理コンソールでトラフィックを見てから決めるよう勧めています。実トラフィックで学習する性質上、導入直後やステージング環境のスコアは本番と異なるとも明記されています。
もう一つ、数字を動かす前に知っておくべき事実があります。後半で示す実フォームデータでは、reCAPTCHA v3 を通過したうえで営業と判断できる送信がフォームの用途により 12.9〜73.1% 残っていました。しきい値をいくつにするかの議論は、この事実を見てからのほうが早く終わります。
| 段階 | やること |
|---|---|
| 1. 記録だけ(〜2週間) | スコアを保存する。低スコアでも送信は通す |
| 2. 分布を見る(〜1か月) | 管理コンソールと自前ログでスコアの散らばりを確認 |
| 3. 決める(1か月後) | 既定 0.5 で問題ないか検証。動かすなら下げる方向を先に |
この記事でもっとも伝えたい点はここです。しきい値を上げる前に、落ちた送信を人が後から見られる状態にしてください。上げて先に消えるのは営業メールではありません。会社の共有 IP から送っている人、古いブラウザの人、モバイル回線の人、プライバシー保護の拡張機能を入れている人、支援技術を使っている人です。いずれも本物の問い合わせ側に多く含まれます。
しかも弾かれた送信は、送信者にエラーが出るだけで受信箱に何も残らず、消えたこと自体に気づけません。営業を1通見逃すコストは削除の数秒。見積依頼を1件失うコストはそれと釣り合いません。
設置後の確認と、つまずきやすい点
動いているかは、バッジ・管理コンソールの統計・個別スコアの3点で確かめます。
- バッジと統計:正しく動いていればページ右下にバッジが出ます(Contact Form 7 公式 FAQ にも同旨の記載)。出ないなら script が読み込まれていません。管理コンソールではリクエスト数やスコアの状況、
action名を指定していれば上位10件のアクション別内訳も見られます。 - 個別スコア:Contact Form 7 では Flamingo プラグインを併用すると、送信ごとの実スコアとスパムログを確認できます。自作フォームなら siteverify の
scoreを送信内容と一緒に保存します。これが前章の「記録だけ取る」の実装にあたります。
Flamingo に「reCAPTCHA response token is empty.」と出る場合、公式 FAQ はスクリプト未読込が主因で、多くはテーマの作りに起因すると説明しています。ドメイン登録の www 有無のずれも定番です。
正しく設定しても止まらないもの:人が書いた営業メール
既定どおり設定すれば自動投稿はかなり止まります。止まらないのは、営業担当者が手で書いて送っている問い合わせです。
私たちは自社サイトと複数の実サイトに Hajik を設置して運用し、届いた送信を1件ずつ見ています。以下は Hajik が分析した、美容商社(国内最大手・上場)の実フォームデータです。3種類のフォーム・合計 1,894 件・約20か月分、いずれも reCAPTCHA v3 を通過した送信。この中に、一目でボットとわかるものは事実上ありませんでした。reCAPTCHA は期待どおり働いていたのです。
| フォームの用途 | 件数・期間 | 営業と判断できるもの | 本物らしい | 判定が難しい |
|---|---|---|---|---|
| 問い合わせフォーム | 534件・20か月 | 12.9% | 54.9% | 32.2% |
| 汎用フォーム | 1,211件・18か月 | 56.2% | 16.5% | 25.2% |
| 採用フォーム | 149件・18か月 | 65.8%(中途のみ 73.1%) | — | — |
分類は簡易的なヒューリスティックで、業種・規模・フォームの性格により比率は大きく変わります。一社・一時点のサンプルとして読んでください。
注目すべきは右端で、人が読んでも即断できない層が常に4分の1から3分の1あります。ここを機械のスコアだけで決めさせると事故が起きます。加えて営業送信のスコアは高く出ます。実在のブラウザで人が入力しているのだから当然です。しきい値を 0.7 や 0.9 にしても営業は減らず、本物だけが落ちます(自動化の検知でどこまで止まるかはフォームの bot 対策にまとめています)。
必要なのは、自動化を見る層の上に内容を読む層を重ねることです。Hajik はこの内容判定を担当し、script タグ1行で送信の瞬間に日本語の文面を判定します(reCAPTCHA と併用可)。効果は 99% 以上の遮断で、残りおよそ1%は人が判断する前提。既定はブロックではなくラベル付けです(reCAPTCHA との比較)。reCAPTCHA だけを入れている状態からの次の一手は問い合わせフォームのスパム対策ツール比較にパターン別でまとめています。
よくある質問
しきい値はいくつにすればいいですか
既定の 0.5 のまま動かさないでください。Google も Contact Form 7 も、変更前に現状のトラフィックを見ることを勧めています。上げるなら、弾かれた送信を人が後から確認できる仕組みが先です。
バッジが表示されません。設定できていないのでしょうか
その可能性が高いです。開発者ツールでスクリプトの読み込みを確認し、Contact Form 7 なら Flamingo のスパムログも合わせて見てください。
設定したのに営業メールが減りません。設定ミスですか
多くの場合ミスではありません。ログに reCAPTCHA が弾いた記録があるなら、自動投稿には機能しています。残るのは人が手で送ったもので、スコアでは止まりません。仕分けの組み方は問い合わせフォームの営業メール対策にまとめています。
明日やること
- 管理コンソールで v3 のキーを発行する。ドメインは www の有無を両方登録する。
- Contact Form 7 なら「インテグレーション」にキーを貼る。自作フォームなら siteverify での検証と
action・hostnameの照合まで実装する。 - しきい値は 0.5 のまま触らず、スコアを送信内容と一緒に保存する仕組みを先に作る。
- 1か月後にそのスコアを開き、営業メールが低スコアで落ちているかを確かめる。落ちていないなら、必要なのはしきい値の調整ではありません。
自社フォームに何が届いているかは無料診断で確認できます。判定結果を見てから決めたい場合は、14日間の無料トライアルでラベル付けだけの観察モードから試せます。