Google reCAPTCHAの設定方法を調べている人の多くは、フォームに迷惑な送信が届きはじめて困っている状況にあります。設定そのものはキーを発行して2行ほどの記述を追加するだけで終わりますが、それだけで終わらせると、今度は本物の問い合わせが届かなくなる事故が起きます。この記事では、キーの発行からサーバー側の検証、しきい値の決め方、保護マークの扱いまでを公式の記載で確かめながら、受付をしている側が決めるべきことの順序として整理します。
迷惑な送信が増えている背景と、受付窓口で実際に起きていること
問い合わせフォームや応募フォームを公開していると、ある日を境に送信が急に増えることがあります。中身を開くと、名前の欄にランダムな英字が並んでいたり、本文が外国語の宣伝だったり、同じ文章が短い間隔で何度も届いていたりします。窓口の担当者からしばしば出るのは、届いた件数そのものではなく、本物の1件を見つけるために全部開かなければならないことが負担だという話です。
この負担は件数に比例しません。1日に3件しか本物が来ない窓口に迷惑な送信が50件混ざると、本物を見つける作業が1日の仕事に変わります。逆に、迷惑な送信が同じ50件でも、機械が先に仕分けていれば担当者が開くのは3件で済みます。reCAPTCHAが解決しようとしているのは、この仕分けの部分です。
もう1つ押さえておきたいのは、迷惑な送信の目的が一様ではないことです。宣伝を送り込むもの、リンクを踏ませようとするもの、フォームの送信先メールアドレスを踏み台にして別の相手に配信させようとするもの、単にサイトの構造を調べているだけのものが混ざります。目的が違えば止まり方も違い、1つの仕組みで全部が止まることはありません。設定の前に「何が何件届いているのか」を1週間分だけでも数えておくと、入れたあとに効いたかどうかを判断できます。数えずに入れると、減ったように感じるだけで、本物が減ったのかどうかも分からなくなります。
reCAPTCHAには種類がある。最初の分岐はここ
reCAPTCHAという名前で語られているものは1つではありません。公式のキー作成の手引きでは、作成時に選ぶキーの種類として、スコアベース、チェックボックス、ポリシーベースチャレンジが並んでいます。
スコアベースは、いわゆるv3と呼ばれてきた形です。回答者の画面には何も表示されず、背後で挙動を見て点数を返します。チェックボックスは、いわゆるv2で、「私は人間です」の四角をクリックさせ、怪しいときだけ画像の問題を出します。ポリシーベースチャレンジは、点数のしきい値に応じて問題を出すかどうかを切り替える形です。
選び方の基準は、受付の性質で決まります。応募や申し込みのように、回答者が最後まで進んでくれることが第一の窓口では、画面に何も表示されないスコアベースが向きます。クリックを1つ足すだけでも、そこで手続きをやめる人が出るためです。一方、送信のたびに人が読んで返信する少件数の窓口で、迷惑な送信を確実に減らしたい場合は、チェックボックスのほうが読み手の負担が軽くなります。
注意したいのは、チェックボックスについて公式の手引きが「ユーザーの負担が増えるため推奨されない」という位置づけで説明していることです。推奨されないと書かれているのは、止める力が弱いからではなく、回答者に作業を増やす形だからです。どちらを選ぶかは、止める力と離脱のどちらを重く見るかという判断であり、技術的な優劣の話ではありません。
キーを発行する手順
設定はキーの発行から始まります。管理画面はhttps://www.google.com/recaptcha/adminで、ここから新しいキーを作成します。
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys 出典: docs.cloud.google.com
画面から作る場合も、上のようにAPIから作る場合も、入力する中身は同じです。公式の手引きによると、作成時に決めるのはラベル(表示名)、キーの種類、ドメイン名、統合の種類です。
ラベルは管理画面の一覧に並ぶ名前です。サイトが1つしかないうちは何でも構いませんが、あとから増えるものなので、サイト名とフォームの用途が分かる名前にしておくと迷いません。
ドメイン名は、そのキーを使ってよいドメインの一覧です。公式の手引きでは最大250個まで追加できると記載されています。ここで押さえておきたいのは、サブドメインの扱いです。登録したドメインの配下は含まれる作りになっているため、www付きと無しを両方書く必要はありません。ただし、別のドメインで同じフォームを公開している場合は、そのドメインも追加しないと動きません。
公式の手引きは、ステージング環境と本番環境で別々のキーを作成することを推奨しています。同じキーを使い回すと、検証中の送信と本物の送信が同じ統計に混ざり、管理画面の数字が読めなくなります。また、ドメインの所有権の確認を無効にする設定については、セキュリティ上のリスクがあると明記されています。手元で動かないときにこの設定を外して回避する手順が紹介されていることがありますが、外したまま公開すると、そのキーを別のサイトから使われる状態になります。
発行が終わると、サイトキーとシークレットキーの2つが表示されます。サイトキーはHTMLに書き込むので公開されるもの、シークレットキーはサーバー側だけで使うものです。この2つの役割を取り違えて、シークレットキーをHTMLに書いてしまう間違いは実際に起きます。書いた時点でそのキーは使えなくなったものとして扱い、作り直すのが安全です。
サイト側にスクリプトを記述する
キーが手に入ったら、フォームのあるページにスクリプトを1行追加します。
reCAPTCHA_site_keyの部分は、発行したサイトキーに置き換えてください。記述箇所はサポートページでは指定されてないと思われますが、この内容の場合はheadタグ内が無難です。 出典: bring-flower.com
renderのパラメータにサイトキーを入れる形は、送信の直前に自分のコードからトークンを取りに行く使い方です。パラメータを付けずに読み込むと、ボタンに自動で結びつく動きになります。どちらでも動きますが、複数のフォームが1ページに並んでいる場合や、送信前に入力内容を確かめる処理を挟んでいる場合は、自分から呼ぶ形のほうが順序を制御できます。
ここで見落としがちなのが、トークンの寿命です。公式のガイドには、reCAPTCHAのトークンは2分で期限が切れると書かれています。ページを開いた時点でトークンを取得しておく作りにすると、長い入力欄のあるフォームでは、書き終わったころに期限が切れています。送信ボタンを押した瞬間に取得する形にしないと、真面目に長文を書いた人だけが弾かれる結果になります。応募フォームや問い合わせフォームは入力に時間がかかるため、この点はそのまま本物の取りこぼしにつながります。
アクション名も同時に決めます。公式のガイドでは、アクション名に使える文字は英数字とスラッシュとアンダースコアだけで、利用者ごとに変わる値を入れてはいけないとされています。contactやapplyのように、フォームの用途が分かる固定の名前にします。名前を分けておくと、管理画面でどのフォームに迷惑な送信が集まっているかが分かれます。
サーバー側で検証しないと、設定した意味が無くなる
設定の説明が「スクリプトを追加して終わり」で止まっている記事は少なくありませんが、それだけでは何も止まりません。画面側で取得したトークンを、サーバー側でGoogleに問い合わせて確かめる処理を書くまでが設定です。
サーバー側の検証で返ってくるのはJSONで、公式のガイドによると、成功したかどうか、点数、アクション名、問題が出された時刻、ホスト名、そしてエラーがあればその符号が含まれます。ここで確かめるべきことは3つあります。1つは成功したかどうか、2つ目は点数がしきい値を超えているか、3つ目はアクション名が想定どおりかです。
3つ目を省いている実装は多いのですが、公式のガイドは、アクション名が期待した値と一致することを確かめるよう明記しています。理由は単純で、別のページで取得したトークンをそのまま持ち込まれると、点数だけを見ている実装は通してしまうからです。ログイン画面用に取得したトークンで問い合わせフォームを通されると、統計も正しく読めなくなります。
検証をサーバー側に書くとき、失敗したときの扱いも決めます。Googleへの問い合わせ自体が時間内に返ってこなかった場合、送信を通すのか止めるのかという判断です。止める作りにすると、通信の一時的な不調で本物の応募が届かなくなります。通す作りにすると、その時間帯だけ無防備になります。受付窓口の性質によって答えは変わりますが、通す場合は、検証できなかった旨を記録に残して後から人が見られる形にしておくと、事故に気づけます。
しきい値の決め方と、本物を落とさない工夫
スコアベースを選んだ場合、点数をどこで区切るかが運用の中心になります。公式のガイドでは、1.0が正当なやり取り、0.0がボットである可能性が非常に高い状態とされ、しきい値は0.5から始めることが推奨されています。
ここで大事なのは、0.5という値が正解ではなく出発点であることです。点数の分布はサイトごとに違い、扱っている内容や訪問者の経路によって変わります。公開直後の数週間は、しきい値で止めるのではなく、点数を記録するだけにしておくのが安全です。1週間か2週間分の点数を並べてから、本物がどのあたりに集まり、迷惑な送信がどのあたりに集まるかを見て決めます。
もう1つ知っておきたいのは、点数が低く出やすい利用者が実際にいることです。社内の共有回線から複数人が同時に送る場合、企業のプロキシを経由している場合、古い端末や特定の設定を使っている場合には、本物でも低く出ることがあります。公式の資料でも、検証用の環境では実際のやり取りを基に判断するため点数が正確でない場合があると注記されています。
そのため、低い点数を即座に破棄する作りは勧められません。現実的なのは3段構えです。高い点数はそのまま受け付ける、中間の点数はチェックボックスの問題を追加で出す、極端に低い点数だけ止める。公式の手引きにポリシーベースチャレンジという種類が用意されているのは、この形を素直に組むためです。止めた送信をそのまま破棄せず、担当者が後から見られる場所に保存する運用にしておくと、しきい値を下げるべきかどうかを事実で判断できます。
保護マークの扱いと、非表示にできる条件
スコアベースを設定すると、画面の右下に保護マーク(バッジ)が表示されます。見た目の都合で非表示にしたいという相談は多いのですが、非表示にしてよい条件が公式に決まっています。
公開されている案内によると、バッジを非表示にできるのは、利用者の流れの中でreCAPTCHAのブランドを明示している場合だけです。その際には次の文章を含める必要があるとされています。
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply. 出典: developers.google.com
つまり、CSSでバッジを見えなくするだけの対応は条件を満たしません。フォームの近くに、reCAPTCHAで保護されていること、Googleのプライバシーポリシーと利用規約が適用されることを日本語で書き添え、それぞれへのリンクを配置するのが通常の形です。
この文章を書き添える作業には、副次的な効果があります。個人情報を入力する画面で、外部の仕組みが使われていることを回答者に伝えることになるためです。応募者の履歴書や、助成の申請書のように機密性の高いものを受け取るフォームでは、外部にどの情報が渡るのかを説明できる状態にしておく必要があります。個人情報の取り扱いについての判断は最終的に所管の窓口や専門家に確かめるべきものですが、個人情報保護委員会の公開資料は、社内で方針を決めるときの出発点になります。
料金と、無料で使える範囲
料金についてよく聞かれますが、2026年9月時点の公開されている案内では、reCAPTCHA Enterpriseは1か月あたり最大10,000件の評価まで無料で利用でき、それを超える規模や追加機能が有料の対象になるとされています。従来型の使い方については、1秒あたり1,000回以上または1か月あたり1,000,000回以上の規模になると有料版への移行が必要とされています。
受付窓口の規模で考えると、1か月に1万件の評価というのは相当な量です。評価はページの読み込みごとに発生するため、フォームのあるページの月間の表示回数で見積もるのが正確です。問い合わせが1日10件の窓口でも、フォームのあるページが月に5,000回開かれていれば、その回数で数えることになります。
ここでの実務的な助言は1つです。仕様と料金は変わります。公開する前に、その時点の公式の案内で無料の範囲を自分で確かめてください。この記事の数字も2026年9月時点で確かめたものであり、来年も同じである保証はありません。
設定したのにスパムが止まらないときに見るところ
設定を終えたのに迷惑な送信が続く場合、原因はだいたい次のどれかです。
1つ目は、サーバー側の検証を書いていない場合です。画面にスクリプトを追加しただけで、届いた送信を無条件に受け付けているなら、何も止まりません。フォームの送信先のURLを直接叩かれれば、画面を通らずに届きます。
2つ目は、検証しているが点数を見ていない場合です。成功したかどうかだけを確かめる実装では、スコアベースのキーはほぼ全部を通します。点数を読み、しきい値と比べる処理が必要です。
3つ目は、フォームの送信先が別の経路でも受け付けている場合です。メールで直接受け取る古い経路が残っていたり、同じ処理を呼ぶ別のURLが公開されたままになっていたりすると、そちらから入ってきます。
4つ目は、人が手で送っている場合です。reCAPTCHAが見ているのは機械らしさであり、人が手作業で宣伝を送ってくる場合には点数が高く出ます。この種類の送信を止めたい場合は、点数ではなく、本文の内容や送信の頻度で仕分ける必要があります。同じ内容が短時間に繰り返し届くパターンは、受け付けた側で回数を数えれば止められます。
5つ目は、キーに登録したドメインと、実際にフォームを公開しているドメインがずれている場合です。ずれていると検証が常に失敗する状態になり、失敗したときに通す作りにしていれば全部が通ります。ドメインを増やしたときや、独自ドメインに切り替えたときに起きやすい見落としです。
確かめる順序としては、まず管理画面でその期間の評価の件数と点数の分布を見ます。件数が0に近いなら、そもそもスクリプトが動いていません。件数はあるのに低い点数が並んでいるなら、検証側で止めていないということです。件数があり点数も高いのに迷惑な送信が続いているなら、相手は機械ではなく人です。この3つの見分けをつけてから手を入れれば、無関係な設定を触って時間を使うことがありません。
管理画面の数字を読むときは、期間を1日ではなく1週間で見ます。迷惑な送信は特定の時間帯や特定の曜日に集中することが多く、1日だけを見ると判断を誤ります。曜日ごとの件数を並べると、機械の巡回によるものと人の手によるものが分かれて見えることがあります。
利点と、引き受けることになる面倒
利点は3つに整理できます。回答者に作業を増やさずに機械の送信を減らせること、管理画面で点数の分布という事実が手に入ること、そして実装が小さくて済むことです。
引き受ける面倒も3つあります。1つは、本物を落とす可能性が残ることです。しきい値を厳しくすれば必ず起きます。2つ目は、外部の仕組みに依存することです。Googleの側で仕様が変わると、こちらの実装を直す作業が発生します。3つ目は、保護マークの文章や外部への情報の流れについて、説明できる状態を保つ責任が生じることです。
代わりの手も比べておく価値があります。入力欄を1つ追加して、人には見えない欄に何か書かれていたら弾く方法は、実装が小さく、外部への通信も発生しません。送信の間隔を数えて、短時間に繰り返す相手を止める方法も、機械の送信にはよく効きます。件数の少ない窓口では、こうした軽い手だけで足りることがあります。reCAPTCHAを入れる価値が大きいのは、フォームのあるページが広く公開されていて、機械の巡回そのものが多い場合です。
入力欄そのものの設計で、届く前に減らせるもの
reCAPTCHAの設定を終える前に、フォームの入力欄そのものを見直しておくと、そのあとの調整が楽になります。迷惑な送信の一部は、入力欄の作りが原因で呼び込まれています。
まず、自由記述の欄にURLを書けるようにしているかどうかです。宣伝を送り込む送信の多くは、本文にリンクを含めることが目的です。リンクを受け付ける必要がない窓口なら、URLを含む送信を別の場所に仕分ける決まりを1つ追加するだけで、開く件数が大きく減ります。採用の応募のように、作品のURLを受け取る必要がある窓口では使えない手ですが、その場合も、URLの欄と本文の欄を分けておけば、本文側にリンクが並んでいる送信を見分けられます。
次に、選択肢だけで完結する欄を増やすことです。機械の送信は自由記述の欄を埋めるのが得意ですが、選択肢の組み合わせが不自然になりやすい性質があります。都道府県と市区町村のように、互いに矛盾しない組み合わせしか成立しない欄を2つ用意しておくと、矛盾している送信をそのまま仕分けられます。
3つ目は、必須の欄を減らすことです。これは迷惑な送信を減らす手ではなく、本物を落とさないための手です。必須の欄が多いフォームでは、入力に時間がかかり、reCAPTCHAのトークンの期限に引っかかる確率が上がります。10個の必須欄のうち、届いた後に電話やメールで確かめれば足りるものが3個あるなら、その3個は任意に変えたほうが到達する件数が増えます。
4つ目は、送信の完了画面と受付の控えです。これも本物を落とさないための備えです。送信した本人に控えが届く作りにしておくと、届かなかったときに回答者の側から気づけます。しきい値を厳しめに設定する場合は、この備えを先に用意しておくと、取りこぼしを回収できます。
設定を進める順序を、時間の流れで並べる
ここまでの内容を、作業の順序として並べ直します。順序を守ることが、本物を落とさないための一番確実な方法です。
最初の1週間は、何も設定せずに数えます。届いた送信を、本物、迷惑な送信、判断に迷うものの3つに分けて件数を記録します。この数字が無いと、あとで効果を判断できません。
次にキーを発行します。この段階でステージング用と本番用を分けて作り、ドメインの所有権の確認は無効にしません。サイトキーとシークレットキーの保存場所も、このときに決めておきます。シークレットキーは画面側のコードに混ざらない場所に保存します。
3番目に、画面側のスクリプトと、サーバー側の検証を同時に書きます。片方だけ先に公開すると、動いているのに何も止まっていない期間ができます。この時点では、しきい値で止める処理は書きません。点数とアクション名を記録するだけにします。
4番目に、2週間分の点数を並べます。本物の送信の点数と、迷惑な送信の点数がどこに集まっているかを見ます。両方が同じあたりに集まっている場合は、点数で分けるのをやめて、チェックボックスの形に切り替えるか、入力欄の作りで分ける方向に変えます。
5番目に、しきい値を決めて止める処理を有効にします。このとき、止めた送信を破棄せず、7日間は担当者が見られる場所に保存します。本物が混ざっていないことを確かめてから、保存の期間を短くします。
最後に、保護マークについての記載をフォームの近くに追加します。バッジを表示したままにする場合は不要ですが、非表示にする場合は必須です。この作業を後回しにすると、非表示のまま条件を満たしていない状態が続きます。
受け口全体の設計として見たときの位置づけ
ここまでは、届く前に止める話でした。受付をしている側の負担を実際に決めているのは、その後ろの工程です。
止めきれなかった1件は必ず届きます。届いた1件に、誰が見るのか、いま返信したのか、まだ待たせているのかという情報が付いていないと、二重返信と返し忘れが起きます。迷惑な送信を9割減らしても、この部分が表の手作業のままなら、担当者の1日はあまり変わりません。送信されたあとの道具がそろっている形にしておくと、届いた時点で担当と状態が付き、いまどこで止まっているかを人に聞かずに読み取れます。
いまGoogleのフォームで受けていて、迷惑な送信に困っている場合、送信されたあとに何が残るかの違いはGoogleフォームとの比較に整理しています。自作のフォームにプラグインで対策を追加している場合の考え方はContact Form 7との比較に、社内がMicrosoft 365でそろっている場合はMicrosoft Formsとの比較にまとめています。
受付の種類によって、迷惑な送信の重さは変わります。応募者の書類を受け取る窓口では、1件を落とすことの損失が大きいため、しきい値を緩めて後で人が見る形が向きます。この場面の作業の流れは採用の応募受付に整理しています。締め切り前に件数が集中する公募では、止めた送信の確認が間に合わなくなるため、事前に基準を決めておく必要があります。こちらは助成金・公募の受付にまとめています。日々の窓口としての受け付けは問い合わせの受付に、イベントのように短期間に集中するものはイベントの申し込みに、それぞれ整理しています。
受け口に何を持たせられるかはできることに、実際の画面の動きは動くところを見るで確かめられます。設定を始める前に出やすい疑問はよくある質問にまとめています。
決める順序としては、まず何が何件届いているかを1週間数え、次にキーの種類を選び、サーバー側の検証を書き、しきい値は記録だけにして2週間見てから決める。この順序で進めれば、本物を落とす事故を起こさずに設定を終えられます。
Q1. reCAPTCHAはv2とv3のどちらを設定すればよいですか?
応募や申し込みのように最後まで進んでほしい窓口では、画面に何も表示されないスコアベース(v3)が向きます。クリックを1つ増やすだけで手続きをやめる人が出るためです。公式の手引きでもチェックボックス(v2)は利用者の負担が増えるため推奨されない位置づけで説明されています。件数が少なく確実に止めたい窓口ではv2も選択肢になります。
Q2. スクリプトを追加しただけでは迷惑な送信は止まらないのですか?
止まりません。画面側で取得したトークンを、サーバー側でGoogleに問い合わせて確かめる処理を書くまでが設定です。検証していない状態では、フォームの送信先を直接叩かれれば画面を通らずに届きます。検証では成功したかどうか、点数がしきい値を超えているか、アクション名が想定どおりかの3つを確かめます。
Q3. しきい値は0.5にしておけばよいですか?
0.5は公式が勧める出発点であり、正解の値ではありません。点数の分布はサイトごとに違うため、公開直後は止めずに点数を記録するだけにして、1週間から2週間分を並べてから決めるのが安全です。社内の共有回線や企業のプロキシ経由では本物でも低く出ることがあるため、低い点数を即座に破棄しない作りにしておきます。
Q4. 画面右下の保護マークは非表示にしてもよいですか?
非表示にできる条件が決まっています。利用者の流れの中でreCAPTCHAのブランドを明示し、「This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.」に相当する記載を含める場合に限られます。CSSで見えなくするだけの対応は条件を満たさないため、フォームの近くに保護されていることとリンクを書き添えます。
