# Como acabar com o spam em formulários do Webflow

> Proteja um formulário do Webflow que envia a um backend de formulários, onde as opções de spam do Webflow nunca rodam, com um honeypot fora da tela e verificação humana.

Publicado em 2026-10-25 · https://ikiform.com/pt-br/guides/spam-protection/webflow

O reCAPTCHA, o bloqueio de bots e o filtro de spam do Webflow só funcionam em envios que o próprio Webflow recebe. Se seu formulário usa uma custom action para enviar a um backend de formulários, essas opções nunca veem o envio, então a proteção precisa acontecer no backend. Adicione um honeypot fora da tela no Designer, defina seus domínios e seu limite de taxa no backend e ative a verificação humana dele, que funciona com o envio normal do Webflow e sem código.

## O que muda no Webflow

O Webflow tem suas próprias ferramentas contra spam: o reCAPTCHA v2, uma opção de bloqueio de bots que roda o Cloudflare Turnstile e um filtro de spam que lê o conteúdo de cada envio. Todas ficam do lado do Webflow, então só agem sobre envios que chegam ao Webflow. No momento em que você define o **Send to** de um formulário como uma custom action, o navegador envia direto para essa URL. O Webflow nunca vê o envio, então nenhuma das verificações dele roda, seja qual for a configuração.

Diagrama: Onde as verificações de spam rodam num formulário do Webflow, com e sem custom action

1. Quando o Webflow cuida do formulário, o envio vai para o Webflow, que roda o reCAPTCHA, o bloqueio de bots e o filtro de spam antes de guardá-lo.
2. Com uma custom action, o navegador envia o mesmo formulário direto ao Ikiform.
3. As verificações do Webflow nunca veem esse envio, seja qual for a configuração.
4. O Ikiform roda o honeypot, a pontuação, o limite de taxa e a verificação humana, e guarda o envio como recebido ou spam.

Passar um formulário para uma custom action também muda onde fica a proteção contra spam. Configure-a no backend no mesmo dia.

## As opções do próprio Webflow, depois da mudança

| Opção do Webflow | Com uma custom action | O que fazer |
| --- | --- | --- |
| Elemento e validação do reCAPTCHA | Ninguém valida. O valor `g-recaptcha-response` dele chega como campo extra | Remova o elemento. Desative a validação do reCAPTCHA só se nenhum formulário que o Webflow ainda cuida precisar dela, porque a opção vale para todos os formulários do site |
| Bloqueio de bots | Não se aplica a envios que vão para outro lugar | Mantenha para os formulários que o Webflow ainda cuida |
| Filtro de spam | Não se aplica | Use a pontuação de conteúdo do backend no lugar |
| Limites de envio e notificações de formulário | Não se aplicam | O backend guarda e manda os e-mails no lugar |

O [guia do Webflow](https://ikiform.com/pt-br/docs/guides/webflow.md) na documentação cobre como apontar o Form Block para o Ikiform. Os passos abaixo adicionam a proteção contra spam por cima.

## Adicione o honeypot no Designer

O jeito rápido do Webflow de esconder um campo é **Display: none**. Alguns bots pulam campos escondidos assim, então coloque a armadilha num contêiner fora da tela. Leva um minuto e não exige plano pago:

- Dentro do formulário, adicione um **Div Block** e dê a ele uma classe como `hp`. No painel Style, defina **Position** como **Absolute**, **Left** como `-10000px`, **Width** e **Height** como `1px` e **Overflow** como **Hidden**.
- Em **Custom attributes** do Div Block, adicione `aria-hidden` com valor `true`, para que leitores de tela pulem tudo o que está dentro dele.
- Coloque dentro do Div Block um **Label** com o texto **Leave this empty** e um **Input**. Defina o **Name** do Input como `_gotcha` e adicione os atributos personalizados `tabindex` = `-1` e `autocomplete` = `off`.
- Não marque **Required** nele. Um campo obrigatório que ninguém vê bloqueia todo envio honesto.

Um `_gotcha` preenchido soma 5 à pontuação de spam do Ikiform, o suficiente para atingir sozinho o limite de 5. Você pode renomear o campo por formulário em **Honeypot field** se um modelo que você usa já tiver uma armadilha com outro nome.

## Dê nomes aos campos pensando na pontuação

O Webflow nomeia cada campo a partir do rótulo, então você recebe `Name`, `Email` e `Field 2`. Renomeie-os nas configurações de cada campo para `name`, `email` e `message`. Os nomes importam para a pontuação de spam, além dos seus dados:

- Um link num campo de nome, como `name`, `first_name` ou `subject`, soma 3. Spammers costumam colocar a URL ali, e nenhuma pessoa real faz isso.
- Um endereço num domínio de e-mail descartável soma 2, lido de qualquer campo que contenha um endereço de e-mail.
- Três ou mais links no formulário somam 2, e uma frase de spam conhecida soma 2.

## Ative a verificação humana

Nas configurações do formulário no Ikiform, defina **Spam check** como **Ikiform**. Nada muda no Webflow. Quando o formulário envia do jeito normal, o Ikiform responde com uma breve página **Checking you're human** (verificando se você é humano) em ikiform.com que roda o Cloudflare Turnstile e repassa os campos, e então o visitante cai na sua página de **Redirect after submit**. Sem conta na Cloudflare, sem chaves, sem código personalizado.

Se você adicionou o script da documentação para manter os blocos de sucesso e de erro do Webflow, ele envia com `fetch`, e um envio com `fetch` sem token recebe `403 challenge_required`. Esta versão cuida disso: volta para um envio normal para a verificação humana e mostra o tempo de espera quando um visitante bate no limite de taxa.

`Before </body> tag`:

```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()` envia o formulário sem disparar o evento `submit`, então o fallback nunca volta para dentro do script.
- Cole em **Page settings** > **Custom code** > **Before </body> tag**, ou no código de rodapé do site para todos os formulários. Código personalizado exige um plano de site pago e só roda no site publicado.
- Ele só mexe em formulários cuja action começa com `https://ikiform.com/f/`, então os formulários que o Webflow ainda cuida ficam intactos.

## Domínios permitidos e o limite de taxa

Em **Allowed domains** do formulário no Ikiform, adicione seu domínio personalizado e seu endereço de staging, como `your-site.webflow.io`. Nunca adicione `webflow.io` sozinho: todo site do Webflow bateria, inclusive os de outras pessoas. Envios de qualquer outro lugar são guardados como spam, ou recusados se você escolher **Reject**.

Para um formulário de contato, defina **Rate limit** como Strict, 2 a cada 10 minutos por visitante. Ninguém honesto escreve duas vezes em dez minutos. Um formulário de inscrição num dia de lançamento movimentado combina melhor com Relaxed, 20 por minuto por visitante. Todo formulário começa no Standard, 5 por minuto.

> Um envio julgado como spam recebe a mesma resposta de sucesso que um real, então o bot não aprende nada. Ele é guardado com o status `spam`, não dispara e-mail de notificação nem webhook, não conta no seu uso e é apagado após 30 dias. Toda segunda-feira, um workspace que bloqueou spam recebe um único e-mail de resumo com o total, os formulários mais visados e os principais motivos.

## Confira se funciona

1. Publique no seu domínio de staging `webflow.io`. Custom actions só enviam a partir do site publicado.
2. Envie o formulário normalmente. Com a verificação humana ativa, você vê a página de verificação por um instante e depois sua página de agradecimento.
3. Inspecione o formulário publicado e confirme que o contêiner do honeypot tem `aria-hidden` e fica fora da tela.
4. Envie com o honeypot preenchido, `_gotcha=bot`. Ele ainda recebe uma resposta de sucesso, mas o envio é guardado como spam e não dispara e-mail nem webhook.
5. Abra **Submissions** no painel. O novo envio está lá com todos os campos que você mandou.
6. Nada chegou? Mude o filtro de status do painel para **Spam**. O spam recebe a mesma resposta de sucesso que um envio real.

## Pegadinhas

- **Spam com as opções do Webflow ligadas.** Se o spam continua chegando depois de você ativar as ferramentas do Webflow, confira o **Send to** do formulário. Uma custom action contorna todas elas.
- **reCAPTCHA esquecido no lugar.** Com campos definidos no formulário do Ikiform, um `g-recaptcha-response` que sobrou falha com `422 validation_failed` como campo desconhecido. Remova o elemento.
- **Formulários duplicados.** Copiar um formulário copia o campo honeypot, mas nem sempre os atributos personalizados dele. Confira `tabindex` e `aria-hidden` em cada cópia.
- **Interactions no contêiner.** Uma interaction do Webflow que anima todo Div Block do formulário pode trazer o honeypot para a vista. Exclua a classe dele.

## Perguntas

### Por que ainda recebo spam no meu formulário do Webflow?

Se o formulário usa uma custom action, o reCAPTCHA, o bloqueio de bots e o filtro de spam do Webflow nunca veem o envio. A proteção precisa acontecer para onde o formulário envia. Se o Webflow cuida do formulário, experimente ativar o bloqueio de bots junto com o filtro de spam.

### Como adiciono um honeypot a um formulário do Webflow?

Adicione um Div Block dentro do formulário, tire-o da tela com posicionamento absoluto e dê a ele aria-hidden true. Coloque dentro um campo chamado _gotcha com tabindex -1 e autocomplete off, e não o torne obrigatório.

### Posso usar o reCAPTCHA num formulário do Webflow que envia ao Ikiform?

Não. O Ikiform não valida tokens do reCAPTCHA. Remova o elemento e defina o Spam check do formulário no Ikiform como Ikiform, que roda o Cloudflare Turnstile sem chaves e sem código no Webflow.

### Preciso de um plano pago do Webflow para ter proteção contra spam?

Não para o honeypot nem para as verificações do Ikiform, que funcionam com o formulário simples do Webflow. Código personalizado, usado para manter o bloco de sucesso do Webflow na página, exige um plano de site pago.

## Mais guias

- [Acabe com o spam no formulário de contato](https://ikiform.com/pt-br/guides/spam-protection.md): Acabe com o spam no formulário de contato com camadas que não custam nada a pessoas reais: honeypot, tempo, pontuação de conteúdo, limites de taxa e verificação humana só quando precisar.
- [Campo honeypot](https://ikiform.com/pt-br/guides/spam-protection/honeypot.md): Adicione a qualquer formulário um honeypot que pega bots sem atrapalhar leitores de tela, teclados ou preenchimento automático, com a verificação no servidor para cada stack.
- [Alternativas ao reCAPTCHA](https://ikiform.com/pt-br/guides/spam-protection/recaptcha-alternatives.md): Compare alternativas ao reCAPTCHA para formulários, do Turnstile e hCaptcha a prova de trabalho e nenhum captcha, e migre com uma mudança pequena e segura.
- [Sites estáticos](https://ikiform.com/pt-br/guides/spam-protection/static-site.md): Acabe com o spam num formulário de site estático mesmo sem guardar segredos nem contar envios, com um partial de honeypot, um script seguro e verificações no servidor.
- [Cloudflare Turnstile](https://ikiform.com/pt-br/guides/spam-protection/cloudflare-turnstile.md): Adicione o Cloudflare Turnstile a um formulário HTML simples: o widget, o siteverify no servidor, chaves de teste e um jeito de rodá-lo sem chaves nem servidor próprio.
- [Sem captcha](https://ikiform.com/pt-br/guides/spam-protection/without-captcha.md): Barre a maior parte do spam em formulários sem captcha nenhum: honeypot, horário de renderização assinado, pontuação de conteúdo e limite de taxa, somados em vez de usados sozinhos.
