Google フォームのスパム対策は、標準機能で届く範囲がはっきり決まっています。この記事では公式ヘルプで確認できる機能だけを整理し、「標準ではどうやっても手が届かない領域」と、その先の選択肢を切り分けます。対象は、問い合わせ窓口や応募受付に Google フォームを使っている中小企業の Web 担当・情シスの方です。
先に結論:減らせるのは「配りすぎたリンク」まで
Google フォームの標準機能で抑えられるのは主に回答者の範囲と回答回数で、内容そのものの選別はできません。
Google フォームは、フォームの作成・配布・集計を担うツールです。スパム判定エンジンではありません。したがって「怪しい回答を自動で振り分ける」という発想ではなく、「そもそも誰がこの URL にたどり着けるか」「1 人が何回送れるか」を締めるのが標準機能の主戦場になります。
そして重要なのは、この記事の後半で扱う「人が書いた営業の売り込み」は、この方法では 1 通も減らないという点です。できないことを先に確定させておくほうが、対策の順番を間違えません。フォーム全般のスパムの考え方は問い合わせフォームのスパム対策の基本にまとめています。
標準機能でできること:回答の制限・検証・受付終了
公式ヘルプで確認できる標準機能は、大きく「アクセス制限」「入力チェック」「受付コントロール」の 3 つです。
| できること | 設定場所 | 何に効くか | 限界 |
|---|---|---|---|
| 回答者をドメイン・グループに限定 | 公開/共有の設定 | 社内・会員向けフォームの外部流入 | 一般公開の窓口には使えない |
| 回答を 1 回に制限 | 公開の設定 | 同一人物の連投 | Google アカウントへのログインが必須になる |
| 回答の検証(数値・文字数・正規表現・メール形式) | 各質問の設定 | 明らかに書式が違う入力 | 記述式・段落など対象の形式が限られる |
| 回答の受付を終了する(「回答を受付中」をオフ) | 回答タブ | 一時的な荒らし、期間限定の受付 | 本物の問い合わせも同時に止まる |
| 新しい回答のメール通知/スプレッドシート連携 | 回答タブ | 気づく速さ、後からの仕分け | 届いた後の話であり、届く前は変わらない |
出典は Google の公式ヘルプです(フォームを公開して回答者と共有する、フォームのルールを設定する方法、フォームの回答を表示、管理する)。
このうち実務で効きやすいのは「回答の検証」です。電話番号欄に正規表現を、自由記述欄に最小文字数を設定するだけで、機械的に流し込まれる無意味な文字列はかなり落ちます。ただし副作用も同じ場所にあります。文字数の下限を上げすぎると、「この商品の在庫はありますか」のような一行の本物の問い合わせが送れなくなります。私たちが実フォームのデータを見てきた限り、本物の問い合わせはむしろ短いことが多く、短さを理由に締めるのは危険な設計です。
標準ではできないこと:回答画面に自前のコードを足せない
Google フォームの回答画面には、外部の JavaScript やタグを差し込む仕組みが用意されていません。
これが最大の制約です。自社サイトのフォームであれば、JavaScript を 1 行足して送信の瞬間に判定を挟む、といった対策が取れます。Google フォームはホスト側の管理画面から作った回答ページがそのまま配信されるため、その手段が使えません。サイトへの埋め込みも、公式に案内されているのは「HTML を埋め込む」で得られる iframe(別ページを枠として読み込む仕組み)を貼る方法で、枠の中身は Google 側のページのままです。外から中の送信処理に手を入れることはできません。
CAPTCHA(人間かどうかを判定する認証)についても、公式ヘルプに Google フォームへ CAPTCHA を追加する設定の記載はありません。reCAPTCHA は自分で管理しているサイトのフォームに組み込むサービスで、Google フォームの設定項目として提供されているものではない、という整理になります。
正直に書いておくと、この制約は私たちの提供している Hajik にもそのまま当てはまります。Hajik はサイトに script タグを 1 行足して、送信された瞬間に判定する仕組みです。タグを置けない Google フォームには設置できません。ボット対策全般の考え方はフォームのボット対策で扱っています。
Apps Script でできるのは「送信された後」の処理
Apps Script のフォーム送信トリガーは送信後に動くため、送信そのものを止める用途には使えません。
Google の開発者向けドキュメントでは、フォーム送信のインストーラブルトリガーは「ユーザーがフォームに回答したときに実行される」と説明されています(インストーラブル トリガー)。しかも、このトリガーに渡されるイベントオブジェクトには回答そのもの(FormResponse)が含まれると明記されています(イベント オブジェクト)。スクリプトが動く時点で回答は成立している、ということです。ここで書けるのは、次のような後処理になります。
- 本文にキーワードが含まれる回答へラベルを付け、通知先を分ける
- スプレッドシートの別シートへ振り分ける
- 一定の条件に当たった回答だけ、担当者に即時通知する
もう一つ現実的なのが受付のコントロールです。スクリプトからフォームの受付状態を切り替えるメソッドが公開されているので(Form クラス)、深夜だけ受付を閉じる、といった時間帯の運用は自動化できます。ただしこれは「量で止める」対策で、キャンペーンや取材で問い合わせが増えた正常な時間帯まで一緒に閉じてしまいます。急に増えたこと自体を攻撃の証拠として扱わないのが、私たちが判定を設計するうえでの原則です。
公開範囲と URL の配り方で減らす
URL がどこから拾われるかを見直すのは、標準機能の範囲で最も費用対効果の高い運用対策です。
Google フォームの URL は、いったんどこかに掲載されると、そのまま収集リストに載り続けます。次の順で棚卸ししてください。
- フォームの URL を直接サイトに載せず、自社ドメインの案内ページを 1 枚挟む
- 用途ごとにフォームを分ける(問い合わせ、応募、資料請求)。用途が混ざったフォームは、後から仕分けようがなくなります
- 社内・会員向けのフォームは、公開の設定でドメインやグループに限定する
- 終了したキャンペーンのフォームは受付を終了し、終了メッセージを出す
ここは設定の問題ではなく、フォーム設計の問題です。
残るのは「人が書いた営業」— 実データで見た比率
ここまでの対策をすべて実施しても、人が手で書いて送ってくる営業の売り込みは残ります。
Hajik が分析した、美容商社(国内最大手・上場)の実フォームデータでは、問い合わせフォームの送信のうち営業の確度が高いものが 12.9%、本物らしいものが 54.9%、判定が難しいものが 32.2% でした。用途が変わると比率も変わり、採用フォームでは 65.8% が人材サービスの営業、うち中途採用フォームに限れば 73.1% に達しています。なお、このデータはいずれも簡易的なヒューリスティックによる分類であり、業種・規模・フォームの性格によって比率は大きく変わります。あくまで一社・一時点のサンプルとして読んでください。
重要なのは、これらがすべて人間の手で書かれた文章だという点です。回答回数の制限も、正規表現の検証も、受付時間の制御も、この層には効きません。フォーム営業そのものの構造はフォーム営業とはで解説しています。
フォーム自体を移すかどうかの判断
判断の分かれ目は、そのフォームが「社内向けか、一般公開の窓口か」です。社内アンケートや限定配布のフォームなら、公開範囲の限定が強力に効くので Google フォームのままで十分です。一方、サイトに常設する一般公開の問い合わせ窓口で、人が書いた営業に毎日時間を取られているなら、自社ドメイン側のフォームに移すことを検討する段階です。自社サイトのフォームであれば、送信時に判定を挟む選択肢が戻ってきます。移行の全体像は問い合わせフォームの営業メール対策(実務ガイド)にまとめています。
よくある質問
Google フォームに reCAPTCHA を追加できますか
公式ヘルプに、Google フォームへ CAPTCHA を追加する設定の記載はありません。reCAPTCHA は自分で管理しているサイトのフォームに組み込むサービスです。なお、仮に追加できたとしても、防げるのは自動送信のボットまでです。私たちが分析した実データは reCAPTCHA v3 を通過した送信ばかりで、明らかなボットは事実上ゼロでした。役割が違う、という整理が正確です。
「回答を 1 回に制限」を使えば連投は止まりますか
同じ Google アカウントからの連投は止まります。ただしこの設定をオンにすると回答者は Google アカウントへのログインを求められるため、一般公開の問い合わせ窓口では回答のハードルが上がります。本物の問い合わせを取りこぼす副作用のほうが大きくなる場面が多く、社内・会員向けフォーム向けの機能と考えるのが無難です。
正規表現の検証でスパムを弾けますか
書式が明らかにおかしい入力には有効です。ただし営業の文面は日本語として自然なビジネス文書なので、正規表現では区別できません。特定の営業フレーズを禁止語として登録する方法も、本物の問い合わせが同じ言葉を使った瞬間に落ちるため、おすすめしません。
届いてしまった営業をうまく仕分ける方法はありますか
Apps Script の送信後トリガーでラベル付けと通知の出し分けをするのが、Google フォームの範囲でできる現実的な手です。自動で削除せず、ラベルを付けて人が最終確認する形にしてください。判定を自動化する場合でも、私たちは 99%+ を機械側で遮断し、残り約 1% は人が判断する前提で設計しています。
まとめ:明日やること
- 使っている Google フォームを一覧にし、「社内向け」「一般公開の窓口」に分ける
- 社内向けのものは、公開の設定でドメイン・グループ限定にする
- 一般公開のフォームは、電話番号やメールアドレスの欄に回答の検証を設定する。自由記述欄の最小文字数は設定しない(本物が短いことは珍しくありません)
- 終了したキャンペーンのフォームは受付を終了する
- それでも人が書いた営業が残るなら、自社ドメイン側のフォームへ移す検討を始める
Hajik は、GrowGroup株式会社が運営する日本語特化の判定サービスです。サイトに script タグを 1 行足すだけで、送信された瞬間に営業か本物かを判定します。保管はエンドツーエンド暗号化で、Hajik 側が保管データを復号することはできません(判定の瞬間だけ内容を AI に渡し、クレジットカード番号・マイナンバー・銀行口座・パスポート番号・健康情報の 5 種はブラウザ内で除去してから送ります)。自社サイトを含む複数の実サイトで、私たち自身が日々使っています。
自社の問い合わせフォームに何がどれだけ届いているかは、無料診断で確認できます。設置して試す場合は14 日間の無料トライアルからどうぞ。