# Webflow フォームのスパムを止める方法

> Webflow 独自のスパム設定が働かない、フォームバックエンドに送信する Webflow フォームを、画面外のハニーポットと人間確認で守ります。

公開日 2026-10-25 · https://ikiform.com/ja/guides/spam-protection/webflow

Webflow の reCAPTCHA、ボットブロック、スパムフィルターは、Webflow 自身が受け取る送信にしか働きません。フォームがカスタム action でフォームバックエンドに送信している場合、これらの設定は送信を見ないので、保護はバックエンドで行う必要があります。Designer で画面外のハニーポットを追加し、バックエンドでドメインとレート制限を設定し、人間確認をオンにします。人間確認は通常の Webflow の送信でコードなしに動きます。

## Webflow ならではの違い

Webflow には独自のスパム対策ツールがあります。reCAPTCHA v2、Cloudflare Turnstile を使うボットブロックの設定、各送信の内容を読むスパムフィルターです。どれも Webflow 側で動くので、Webflow に届いた送信にしか作用しません。フォームの **Send to** をカスタム action にした時点で、ブラウザーはその URL に直接送信します。Webflow は送信を見ないので、設定がどうであれ、そのチェックは 1 つも実行されません。

図: Webflow フォームでスパムチェックが動く場所（カスタム action の有無別）

1. Webflow がフォームを処理する場合、送信は Webflow に届き、保存前に reCAPTCHA、ボットブロック、スパムフィルターが実行されます。
2. カスタム action を使うと、ブラウザーは同じフォームを Ikiform に直接送信します。
3. 設定にかかわらず、Webflow のチェックはその送信を見ません。
4. Ikiform がハニーポット、スコア判定、レート制限、人間確認を実行し、送信を受信済みかスパムとして保存します。

フォームをカスタム action に切り替えると、スパム対策も移ります。同じ日のうちにバックエンドで設定してください。

## 切り替え後の Webflow 自身の設定

| Webflow の設定 | カスタム action の場合 | 対処 |
| --- | --- | --- |
| reCAPTCHA の要素と検証 | 誰も検証しない。`g-recaptcha-response` の値が余分なフィールドとして届く | 要素を削除する。reCAPTCHA の検証をオフにするのは、Webflow が処理するフォームでもう必要ない場合だけ。この設定はサイト上のすべてのフォームに適用されるため |
| ボットブロック | 他所へ送られる送信には適用されない | Webflow が処理するフォームのために残しておく |
| スパムフィルター | 適用されない | 代わりにバックエンドの内容スコア判定を使う |
| フォーム送信の上限と通知 | 適用されない | 代わりにバックエンドが保存し、メールで通知する |

ドキュメントの [Webflow ガイド](https://ikiform.com/ja/docs/guides/webflow.md)では、Form Block の送信先を Ikiform にする方法を説明しています。以下の手順では、その上にスパム対策を加えます。

## Designer でハニーポットを追加する

Webflow で入力欄を隠す手っ取り早い方法は **Display: none** ですが、そうして隠したフィールドを飛ばすボットもいます。代わりに、罠を画面外のラッパーに入れてください。1 分で済み、有料プランも要りません:

- フォームの中に **Div Block** を追加し、`hp` などのクラスを付けます。Style パネルで **Position** を **Absolute**、**Left** を `-10000px`、**Width** と **Height** を `1px`、**Overflow** を **Hidden** に設定します。
- Div Block の **Custom attributes** に、値を `true` にした `aria-hidden` を追加し、スクリーンリーダーが中身をすべて飛ばすようにします。
- Div Block の中に、テキストが **Leave this empty** の **Label** と **Input** を置きます。Input の **Name** を `_gotcha` にし、カスタム属性 `tabindex` = `-1` と `autocomplete` = `off` を追加します。
- **Required** にはチェックを入れないでください。誰にも見えない必須フィールドは、正直な送信をすべてブロックしてしまいます。

`_gotcha` が埋められていると Ikiform のスパムスコアに 5 が加算され、それだけでしきい値の 5 に達します。使っているテンプレートに別の名前の罠がすでにある場合は、**Honeypot field** でフォームごとにフィールド名を変えられます。

## スコア判定のためにフィールドに名前を付ける

Webflow は各入力欄にラベルにちなんだ名前を付けるので、`Name`、`Email`、`Field 2` のようになります。各入力欄の設定で `name`、`email`、`message` に変更してください。名前はデータだけでなく、スパムのスコア判定にも影響します:

- `name`、`first_name`、`subject` などの名前系フィールドにリンクがあると 3 が加算されます。スパマーはよくそこに URL を入れますが、本物の人はまず入れません。
- 使い捨てメールのドメインのアドレスは 2 が加算されます。メールアドレスを含むどのフィールドからでも判定されます。
- フォーム全体でリンクが 3 つ以上あると 2、既知のスパムフレーズがあると 2 が加算されます。

## 人間確認をオンにする

Ikiform のフォーム設定で **Spam check** を **Ikiform** にします。Webflow 側は何も変わりません。フォームが通常の方法で送信されると、Ikiform は ikiform.com 上の短い **Checking you're human** ページで応答し、Cloudflare Turnstile を実行してフィールドを送り届けた後、訪問者を **Redirect after submit** のページに移動させます。Cloudflare のアカウントもキーもカスタムコードも要りません。

Webflow の成功・エラーのブロックを使い続けるためにドキュメントのスクリプトを追加している場合、そのスクリプトは `fetch` で送信し、トークンなしの `fetch` の送信には `403 challenge_required` が返ります。この版はそれに対応しています。人間確認のために通常の送信にフォールバックし、訪問者がレート制限に達したら待ち時間を表示します。

`</body> タグの前`:

```html
<script>
  document.querySelectorAll('form[action^="https://ikiform.com/f/"]').forEach((form) => {
    const wrapper = form.closest(".w-form");
    const done = wrapper?.querySelector(".w-form-done");
    const fail = wrapper?.querySelector(".w-form-fail");
    const button = form.querySelector('[type="submit"]');

    function showError(text) {
      const slot = fail?.querySelector("div") ?? fail;
      if (slot) slot.textContent = text;
      if (fail) fail.style.display = "block";
    }

    form.addEventListener("submit", async (event) => {
      event.preventDefault();
      const label = button?.value;
      if (button) {
        button.disabled = true;
        button.value = button.dataset.wait || label;
      }
      try {
        const response = await fetch(form.action, {
          method: "POST",
          headers: { Accept: "application/json" },
          body: new FormData(form),
        });
        const result = await response.json();
        if (result.ok) {
          form.style.display = "none";
          if (fail) fail.style.display = "none";
          if (done) done.style.display = "block";
          return;
        }
        if (result.error.code === "challenge_required") {
          form.submit();
          return;
        }
        showError(
          response.headers.has("Retry-After")
            ? `Too many messages. Try again in ${response.headers.get("Retry-After")} seconds.`
            : result.error.message,
        );
      } catch {
        form.submit();
      } finally {
        if (button) {
          button.disabled = false;
          button.value = label;
        }
      }
    });
  });
</script>
```

- `form.submit()` は `submit` イベントを発火させずにフォームを送信するので、フォールバックがスクリプトに戻ってループすることはありません。
- **Page settings** > **Custom code** > **Before </body> tag** に貼り付けるか、すべてのフォームに適用するならサイトのフッターコードに貼り付けます。カスタムコードには有料のサイトプランが必要で、公開されたサイトでしか動きません。
- action が `https://ikiform.com/f/` で始まるフォームだけを対象にするので、Webflow が処理するフォームには影響しません。

## 許可ドメインとレート制限

Ikiform のフォームの **Allowed domains** に、カスタムドメインと `your-site.webflow.io` のようなステージング用のアドレスを追加します。`webflow.io` だけを追加してはいけません。他人のものも含め、すべての Webflow サイトが一致してしまいます。それ以外の場所からの送信はスパムとして保存されるか、**Reject** を選んだ場合は拒否されます。

お問い合わせフォームなら、**Rate limit** を Strict（訪問者ごとに 10 分あたり 2 件）にします。正直な人が 10 分に 2 回書くことはありません。ローンチ当日の混み合う登録フォームには Relaxed（訪問者ごとに 1 分あたり 20 件）が向いています。どのフォームも最初は Standard（1 分あたり 5 件）です。

> スパムと判定された送信にも本物と同じ成功の応答を返すので、ボットは何も学べません。ステータス `spam` で保存され、通知メールも Webhook も送らず、使用量にもカウントされず、30 日後に削除されます。スパムをブロックしたワークスペースには毎週月曜日に、合計、最も多かったフォーム、主な理由をまとめたメールが 1 通届きます。

## 動作を確認する

1. `webflow.io` のステージング用ドメインに公開します。カスタム action は公開されたサイトからしか送信されません。
2. フォームを通常どおり送信します。人間確認がオンなら、確認ページが一瞬表示され、その後サンクスページに移動します。
3. 公開されたフォームを検証ツールで調べ、ハニーポットのラッパーに `aria-hidden` があり、画面外にあることを確認します。
4. ハニーポットを `_gotcha=bot` と埋めて送信します。成功の応答は返りますが、送信データはスパムとして保存され、メールも Webhook も送られません。
5. ダッシュボードで **Submissions** を開きます。送ったすべてのフィールドを持つ新しい送信データがあります。
6. 何も届きませんか？ダッシュボードのステータスフィルターを **Spam** に切り替えてください。スパムにも本物の送信データと同じ成功の応答が返ります。

## ハマりどころ

- **Webflow の設定がオンなのにスパムが届く。** Webflow のツールをオンにした後もスパムが届き続けるなら、フォームの **Send to** を確認してください。カスタム action はそれらをすべて迂回します。
- **reCAPTCHA が残っている。** Ikiform のフォームでフィールドを定義している場合、残った `g-recaptcha-response` は未知のフィールドとして `422 validation_failed` で失敗します。要素を削除してください。
- **複製したフォーム。** フォームをコピーするとハニーポットの入力欄はコピーされますが、カスタム属性まではコピーされないことがあります。コピーごとに `tabindex` と `aria-hidden` を確認してください。
- **ラッパーへのインタラクション。** フォーム内のすべての Div Block をアニメーションさせる Webflow のインタラクションは、ハニーポットを画面内に動かしてしまうことがあります。そのクラスを除外してください。

## よくある質問

### Webflow フォームにまだスパムが届くのはなぜですか？

フォームがカスタム action を使っている場合、Webflow の reCAPTCHA、ボットブロック、スパムフィルターは送信を見ません。保護はフォームの送信先で行う必要があります。Webflow がフォームを処理している場合は、スパムフィルターに加えてボットブロックもオンにしてみてください。

### Webflow フォームにハニーポットを追加するには？

フォームの中に Div Block を追加し、absolute の配置で画面外に移動させ、aria-hidden を true にします。その中に _gotcha という名前の入力欄を置き、tabindex を -1、autocomplete を off にして、必須にはしないでください。

### Ikiform に送信する Webflow フォームで reCAPTCHA を使えますか？

いいえ。Ikiform は reCAPTCHA のトークンを検証しません。要素を削除し、Ikiform のフォームの Spam check を Ikiform にしてください。キーも Webflow のコードも不要で Cloudflare Turnstile が動きます。

### スパム対策に Webflow の有料プランは必要ですか？

ハニーポットや Ikiform のチェックには必要ありません。通常の Webflow フォームで動きます。Webflow の成功ブロックをページに残すために使うカスタムコードには、有料のサイトプランが必要です。

## その他のガイド

- [お問い合わせフォームのスパムを止める](https://ikiform.com/ja/guides/spam-protection.md): 本物の訪問者に負担をかけない層でお問い合わせフォームのスパムを止めます。ハニーポット、時間、内容のスコア、レート制限、必要なときだけの人間確認です。
- [ハニーポットフィールド](https://ikiform.com/ja/guides/spam-protection/honeypot.md): スクリーンリーダー、キーボード、自動入力の邪魔をせずにボットを捕まえるハニーポットを、各スタックのサーバー側チェックとあわせてどんなフォームにも追加します。
- [reCAPTCHA の代替](https://ikiform.com/ja/guides/spam-protection/recaptcha-alternatives.md): Turnstile や hCaptcha から Proof of Work、CAPTCHA なしまで、フォーム向け reCAPTCHA の代替を比較し、小さく安全な変更で乗り換えます。
- [静的サイト](https://ikiform.com/ja/guides/spam-protection/static-site.md): シークレットを保持できず送信数も数えられない静的サイトのフォームでも、ハニーポットのパーシャル、安全なスクリプト、サーバー側のチェックでスパムを防ぎます。
- [Cloudflare Turnstile](https://ikiform.com/ja/guides/spam-protection/cloudflare-turnstile.md): プレーンな HTML フォームに Cloudflare Turnstile を追加します。ウィジェット、サーバー側の siteverify、テスト用キー、自前のキーやサーバーなしで動かす方法まで。
- [CAPTCHA なしで](https://ikiform.com/ja/guides/spam-protection/without-captcha.md): CAPTCHA をまったく使わずにフォームスパムの大半を防ぐ方法。ハニーポット、署名付きの表示時刻、内容のスコア、レート制限を単独ではなく合算して使います。
