# Alternativas ao reCAPTCHA para formulários de sites

> 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.

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

O Cloudflare Turnstile é a troca mais direta para o reCAPTCHA: é quase sempre invisível, usa o mesmo esquema de site key e chave secreta, e a verificação no servidor recebe os mesmos parâmetros. O hCaptcha serve para sites que querem desafios de imagem de alguém que não seja o Google, e ferramentas de prova de trabalho como o ALTCHA rodam sem terceiro nenhum. Para muitos formulários de contato, um honeypot, pontuação de conteúdo e um limite de taxa tornam o captcha desnecessário.

## Por que as pessoas abandonam o reCAPTCHA

O reCAPTCHA ainda funciona. Os motivos para substituí-lo costumam ser o custo para os visitantes e para você. A versão 2 mostra quebra-cabeças de imagem a alguns visitantes, o que é lento no celular e difícil para quem usa leitor de tela. A versão 3 é invisível, mas devolve uma pontuação cujo corte você mesmo precisa definir, sem desafio de reserva. E o reCAPTCHA agora é um produto do Google Cloud: a documentação de faturamento do Google lista uma cota gratuita de 10.000 avaliações por mês, com faixas pagas acima disso.

Algumas equipes também querem menos scripts de terceiros nas páginas. Se isso importa para suas obrigações de privacidade é uma questão para sua própria análise jurídica; esta página só compara como as ferramentas funcionam.

## As alternativas comparadas

| Opção | O que os visitantes veem | Quem valida | Vale saber |
| --- | --- | --- | --- |
| reCAPTCHA v2 | Uma caixa de seleção, às vezes quebra-cabeças de imagem | Seu servidor, com o Google | Conhecido. Os quebra-cabeças são a principal reclamação |
| reCAPTCHA v3 | Nada | Seu servidor, com o Google | Devolve uma pontuação de 0,0 a 1,0. Você escolhe o corte e lida com a zona cinzenta |
| [Cloudflare Turnstile](https://ikiform.com/pt-br/guides/spam-protection/cloudflare-turnstile.md) | Quase sempre nada, às vezes uma caixa de seleção | Seu servidor, com a Cloudflare | Sem quebra-cabeças de imagem. Sem custo para até 20 widgets |
| hCaptcha | Uma caixa de seleção, às vezes quebra-cabeças de imagem | Seu servidor, com o hCaptcha | Formato parecido com o do reCAPTCHA v2, de outra empresa. Um plano Basic gratuito, com planos pagos Pro e Enterprise |
| Friendly Captcha | Um pequeno widget que resolve um quebra-cabeça em segundo plano | Seu servidor, com o Friendly Captcha | Prova de trabalho em vez de sinais de rastreamento. Gratuito para sites pequenos não comerciais, planos pagos para os demais |
| ALTCHA | Um pequeno widget que resolve um quebra-cabeça em segundo plano | Só o seu próprio servidor | Código aberto e auto-hospedado, então sem terceiros. Você roda e mantém |
| [No captcha](https://ikiform.com/pt-br/guides/spam-protection/without-captcha.md) | Nada | Seu servidor | Honeypot, tempo assinado, pontuação de conteúdo e limites de taxa. Barra a maioria dos bots, não todos |

Toda opção, menos a última, ainda depende de uma verificação no servidor. Um widget sozinho não barra nada, porque um bot pode enviar para o seu endpoint sem carregar a página.

## O que cada opção exige das pessoas

Avalie cada opção pelo visitante que tem mais dificuldade com ela. Quebra-cabeças de imagem são lentos no celular e difíceis ou impossíveis para quem não enxerga bem; alternativas em áudio ajudam algumas pessoas e frustram outras. Verificações invisíveis, como o modo usual do Turnstile, o reCAPTCHA v3 e os widgets de prova de trabalho, não pedem nada à maioria dos visitantes, mas ainda podem falhar para quem usa navegadores focados em privacidade, redes restritivas ou aparelhos antigos. Quando isso acontece, a pessoa precisa de uma saída: uma caixa de seleção visível, uma mensagem clara ou um endereço de e-mail para escrever. Um formulário que falha em silêncio perde justamente as mensagens de que você nunca fica sabendo.

## Escolha em duas perguntas

Diagrama: Escolhendo um substituto para o reCAPTCHA em duas perguntas

1. Primeiro, pergunte se bots passam pelas verificações invisíveis. Se não, fique sem captcha, com honeypot, pontuação e limite de taxa.
2. Se passam, pergunte se você pode rodar código no servidor. Se pode, escolha um widget como Turnstile, hCaptcha ou ALTCHA e valide-o no seu servidor.
3. Sem servidor, envie o formulário a um backend que valide suas chaves do Turnstile por você, ou use uma verificação gerenciada que dispensa chaves.

A maioria dos formulários de contato para na primeira pergunta. Meça seu spam antes de adicionar qualquer widget.

## Migre do reCAPTCHA para o Turnstile

Os dois são parecidos o bastante para a migração ser de poucas linhas de cada lado. Crie um widget do Turnstile no painel da Cloudflare para os mesmos hostnames e depois mude o markup e a verificação no servidor juntos.

| Parte | reCAPTCHA v2 | Turnstile |
| --- | --- | --- |
| Script | `https://www.google.com/recaptcha/api.js` | `https://challenges.cloudflare.com/turnstile/v0/api.js` |
| Elemento | `<div class="g-recaptcha" data-sitekey>` | `<div class="cf-turnstile" data-sitekey>` |
| Campo do token | `g-recaptcha-response` | `cf-turnstile-response` |
| URL de validação | `https://www.google.com/recaptcha/api/siteverify` | `https://challenges.cloudflare.com/turnstile/v0/siteverify` |
| Parâmetros de validação | `secret`, `response`, `remoteip` | `secret`, `response`, `remoteip`, `idempotency_key` |

**Antes** (`contact.html`)

```html
<form action="/api/contact" method="POST">
  <input name="email" type="email" required />
  <textarea name="message" required></textarea>
  <div class="g-recaptcha" data-sitekey="RECAPTCHA_SITE_KEY"></div>
  <button>Send</button>
</form>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
```

**Depois** (`contact.html`)

```html
<form action="/api/contact" method="POST">
  <input name="email" type="email" required />
  <textarea name="message" required></textarea>
  <div class="cf-turnstile" data-sitekey="TURNSTILE_SITE_KEY" data-action="contact"></div>
  <button>Send</button>
</form>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
```

**Antes** (`verify.ts`)

```ts
const form = await request.formData();
const body = new URLSearchParams({
  secret: process.env.RECAPTCHA_SECRET_KEY!,
  response: String(form.get("g-recaptcha-response") ?? ""),
});
const check = await fetch("https://www.google.com/recaptcha/api/siteverify", { method: "POST", body });
const { success } = (await check.json()) as { success: boolean };
```

**Depois** (`verify.ts`)

```ts
const form = await request.formData();
const body = new URLSearchParams({
  secret: process.env.TURNSTILE_SECRET_KEY!,
  response: String(form.get("cf-turnstile-response") ?? ""),
});
const check = await fetch("https://challenges.cloudflare.com/turnstile/v0/siteverify", { method: "POST", body });
const { success, action } = (await check.json()) as { success: boolean; action?: string };
const human = success && action === "contact";
```

- Isso cobre as chaves clássicas do reCAPTCHA, validadas em `siteverify`. Chaves criadas no Google Cloud são conferidas pela API de avaliações do reCAPTCHA Enterprise; o lado do Turnstile é o mesmo.
- Se você usava a v3, remova seu corte de pontuação. O Turnstile responde passou ou falhou; confira `action` na resposta dele.
- Atualize sua Content Security Policy: permita `https://challenges.cloudflare.com` em `script-src` e `frame-src`, e tire as entradas do Google quando nada mais as usar.
- Publique o markup e a mudança no servidor num único deploy. Uma página com o widget novo enviando para um servidor que ainda espera `g-recaptcha-response` falha em todo envio.

## Substituindo o reCAPTCHA pelo Ikiform

Se seu formulário envia ao Ikiform, remova o widget do reCAPTCHA por completo. O Ikiform não valida tokens do reCAPTCHA nem do hCaptcha. O valor `g-recaptcha-response` que sobrar chegaria como campo extra, ou falharia com `422 validation_failed` como campo desconhecido se você tiver definido os campos do formulário. Depois escolha o que o substitui:

- **Nada a mais.** O honeypot, a pontuação de conteúdo e os limites de taxa rodam em todo formulário. Muitos formulários de contato não precisam de mais nada.
- **Spam check definido como Ikiform.** Cloudflare Turnstile, rodado pelo Ikiform, sem conta nem chaves. Um envio HTML simples recebe uma breve página de verificação; código com `fetch` chama `challenge()` de `@ikiform/sdk`.
- **Suas próprias chaves do Turnstile.** Mantenha seu próprio widget na página, cole as chaves nas configurações do formulário e o Ikiform valida o token.

**HTML** (`contact.html`)

```html
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="POST">
  <input name="email" type="email" required />
  <textarea name="message" required></textarea>
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
  <button>Send</button>
</form>
```

Esse formulário não tem widget nenhum. Com **Spam check** em **Ikiform**, a verificação humana acontece em ikiform.com depois do envio, então sua página não carrega script de captcha. A [documentação de spam](https://ikiform.com/pt-br/docs/spam.md#human-check) cobre cada modo.

> Se você também está saindo de um serviço de formulários hospedado, as páginas de comparação do [Formspree](https://ikiform.com/alternatives/formspree) e do [Netlify Forms](https://ikiform.com/alternatives/netlify-forms) cobrem o que mais muda.

## Confira se funciona

1. Envie o formulário após a migração. O envio é aceito e você viu no máximo uma caixa de seleção.
2. Envie ao endpoint com curl e sem token. Ele é recusado, o que prova que o servidor confere o token novo.
3. Procure `g-recaptcha` e `recaptcha/api.js` nas suas páginas. Não sobrou nada.
4. Abra **Submissions** no painel. O novo envio está lá com todos os campos que você mandou.
5. Nada chegou? Mude o filtro de status do painel para **Spam**. O spam recebe a mesma resposta de sucesso que um envio real.

## Pegadinhas

- **Configurações do construtor.** Construtores de site com uma opção de reCAPTCHA embutida podem exigir o elemento em todo formulário enquanto ela estiver ligada. Desligue a opção antes de remover os elementos.
- **Páginas em cache.** Visitantes com uma página antiga em cache ainda enviam `g-recaptcha-response` por um tempo depois do deploy. Conte com algumas falhas, ou aceite os dois tokens por um dia.
- **Pontuações da v3 em relatórios.** Se painéis ou alertas leem a pontuação do reCAPTCHA, eles ficam mudos após a migração. Atualize-os.

## Perguntas

### Qual a melhor alternativa ao reCAPTCHA?

Para a maioria dos formulários, o Cloudflare Turnstile: costuma ser invisível, não custa nada em pequena escala e valida com os mesmos parâmetros secret e response. Se você não quer terceiro nenhum, uma ferramenta auto-hospedada de prova de trabalho como o ALTCHA funciona. Muitos formulários de contato não precisam de captcha depois que honeypot, pontuação e limite de taxa estão no lugar.

### O reCAPTCHA ainda é gratuito?

A documentação de faturamento do Google lista uma cota gratuita de 10.000 avaliações por mês, com faixas pagas acima disso. Confira os preços atuais do Google antes de planejar em cima disso.

### O Ikiform valida tokens do reCAPTCHA ou do hCaptcha?

Não. O Ikiform só valida o Cloudflare Turnstile, seja a verificação gerenciada dele ou suas próprias chaves do Turnstile. Remova outros widgets de captcha dos formulários que enviam ao Ikiform.

### Migrar do reCAPTCHA para o Turnstile dá muito trabalho?

Geralmente não. Você muda a URL do script, a classe do elemento, o nome do campo do token e a URL de validação, e mantém os mesmos parâmetros secret e response. Faça o deploy da página e da mudança no servidor juntos.

## 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.
- [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.
- [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.
- [Limite de taxa](https://ikiform.com/pt-br/guides/spam-protection/rate-limiting.md): Limite a taxa de envios por visitante com um armazenamento compartilhado, responda 429 com Retry-After e evite bloquear escritórios que compartilham um IP.
- [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.
