Como corrigir o spam em formulários do WPForms com reCAPTCHA
O que é o spam que passa no reCAPTCHA do WPForms?
O reCAPTCHA do WPForms é a proteção do Google que dá uma nota de comportamento ao visitante, mas no v3 ele não bloqueia ninguém sozinho: apenas pontua de 0.0 (provável bot) a 1.0 (provável humano), e quem decide barrar é o Score Threshold configurado em WPForms -> Settings -> CAPTCHA. Se esse threshold está baixo, um bot com nota mediana passa direto e a entrada de spam é salva. Diferente do v2 Checkbox, que exige a interação ‘Não sou um robô’, o v3 roda em silêncio e bots modernos com farms de resolução conseguem notas suficientes para escapar.
Por isso o WPForms documenta a prevenção de spam em camadas, não só pelo reCAPTCHA. O plugin já traz, em Settings -> Spam Protection and Security, a Modern Anti-Spam Protection (token honeypot, ligada por padrão e dependente de JavaScript) e o Minimum Time to Submit (2 segundos por padrão), além de Akismet, filtro de palavras, filtro de país e allowlist e denylist de e-mail. Quando o spam continua apesar do reCAPTCHA, a saída não é trocar de captcha, e sim subir o threshold do v3 e empilhar essas camadas nativas, que pegam padrões que a nota do Google sozinha deixa passar.
Como identificar
- Entradas de spam continuam chegando em WPForms -> Entries mesmo com ‘Enable Google reCAPTCHA’ ligado no formulário.
- O reCAPTCHA v3 está ativo e sem erro visível, mas o volume de envios com links e texto promocional não cai.
- Os e-mails de notificação trazem mensagens em outro idioma, com URLs suspeitas, vindas de formulários protegidos por reCAPTCHA.
- Na coluna de origem das entradas aparecem submissões em poucos segundos ou em rajada, típicas de bot, mesmo com o captcha ativo.
- Ao usar reCAPTCHA v2 Invisible ou v3, nenhum desafio aparece para o bot e a nota atribuída é alta o bastante para o envio concluir.
- Marcar uma entrada como spam em Entries não reduz os envios seguintes, porque só o reCAPTCHA está filtrando.
Como prevenir
- Trate o reCAPTCHA como uma camada, não como a solução: deixe sempre a Modern Anti-Spam Protection e o Minimum Time to Submit ligados em Settings -> Spam Protection and Security em todo formulário publicado.
- Se for usar reCAPTCHA v3, defina o Score Threshold em um valor firme desde o início e revise as entradas após a publicação, porque o v3 só pontua e nunca bloqueia sozinho.
- Conecte o Akismet no site assim que colocar formulários no ar, para filtrar conteúdo reconhecidamente spam que a nota do Google deixa passar.
- Mantenha um filtro de palavras com os termos promocionais que mais aparecem nas suas entradas e revise a lista a cada onda de spam, em vez de depender só do captcha.
Causa
- O formulário usa reCAPTCHA v3, que apenas atribui uma nota e nunca bloqueia sozinho; sem um Score Threshold adequado em WPForms -> Settings -> CAPTCHA, bots com nota mediana são aprovados e o envio é salvo.
- O Score Threshold do v3 está baixo demais (por exemplo 0.3); o WPForms define que esse é o ponto em que o visitante falha na verificação, então valores baixos deixam quase tudo passar.
- O reCAPTCHA é a única camada ativa: a Modern Anti-Spam Protection em Settings -> Spam Protection and Security está desligada ou foi removida, deixando o formulário sem o token honeypot que pega bots que ignoram JavaScript.
- O Akismet não está conectado em Settings -> Spam Protection and Security, então entradas com conteúdo reconhecidamente spam pela rede do Akismet são salvas em vez de barradas.
- Não há filtro de palavra nem de país ativo na seção Filtering do formulário, permitindo que envios com termos promocionais ou de regiões que você não atende cheguem normalmente.
- O site usa reCAPTCHA v2 Invisible ou v3 contra bots de formulário que rodam em farms de resolução de captcha, que obtêm nota suficiente e contornam o desafio silencioso.
Como resolver
- Suba o Score Threshold do reCAPTCHA v3: se você usa o v3, o ajuste mais direto é endurecer a nota mínima para aprovar um envio. Suba o threshold de forma gradual e acompanhe se visitantes reais continuam conseguindo enviar antes de subir mais.
WPForms -> Settings -> CAPTCHA Localizar Score Threshold (so aparece no reCAPTCHA v3) Subir de 0.3 para 0.5 e salvar; testar; se ainda passar spam, ir a 0.7 Clicar em Save Settings - Garanta a Modern Anti-Spam Protection ligada: essa é a camada nativa do WPForms que funciona em conjunto com o reCAPTCHA. Ela usa um token honeypot dependente de JavaScript e vem ligada por padrão. Confirme que ela não foi desativada no formulário.
Editar o formulário -> Settings -> Spam Protection and Security Ativar Enable anti-spam protection (Modern Anti-Spam Protection) Confirmar Minimum Time to Submit ligado (padrão 2 segundos) Salvar o formulário - Conecte o Akismet para filtrar conteúdo: o Akismet compara o envio com a rede global de spam reportado e barra o que é reconhecido, algo que a nota do reCAPTCHA não faz. Ative a chave do Akismet no site e ligue a proteção no formulário.
Instalar e configurar o plugin Akismet com uma API key valida Editar o formulário -> Settings -> Spam Protection and Security Ativar Enable Akismet anti-spam protection Salvar o formulário - Ative o filtro de palavras e de país: na seção Filtering do formulário você bloqueia envios por termo e por região. O filtro de palavras compara linha a linha, sem distinguir maiúsculas, e o de país aceita ou nega regiões inteiras que você não atende.
Editar o formulário -> Settings -> Spam Protection and Security -> Filtering Ativar Enable keyword filter e listar um termo por linha em Keyword Filter List Ativar Enable country filter e escolher Allow ou Deny + os paises Salvar o formulário - Revise as entradas guardadas e ajuste fino: com Store spam entries ligado, o WPForms guarda o que foi barrado, o que permite recuperar falsos positivos e confirmar o que ainda passa. Use isso para calibrar threshold e filtros sem perder envio legítimo.
WPForms -> Entries -> filtrar por Spam para ver o que foi barrado Recuperar qualquer envio legitimo marcado como spam por engano Se passou spam, voltar e endurecer threshold ou adicionar termo ao filtro Repetir até o volume de spam cair sem bloquear gente real
// functions.php do tema filho — sobe o limite de nota do reCAPTCHA v3 do WPForms
// via filtro oficial, alem do que a tela permite, e descarta envios abaixo da nota.
// Use quando o spam passa mesmo com o Score Threshold da tela ja no maximo.
add_filter( 'wpforms_frontend_recaptcha_v3_threshold', function ( $threshold ) {
// 0.0 = provavel bot, 1.0 = provavel humano. 0.7 e mais rigido que o padrao.
return 0.7;
} );
// Camada extra: marca como spam todo envio cuja nota do v3 vier abaixo do limite,
// em vez de so recusar silenciosamente — assim a entrada fica revisavel em Entries.
add_filter( 'wpforms_process_initial_errors', function ( $errors, $form_data ) {
$score = isset( $_POST['wpforms']['recaptcha_v3_score'] )
? (float) $_POST['wpforms']['recaptcha_v3_score'] : 1.0;
if ( $score > 0 && $score < 0.7 ) {
$errors[ $form_data['id'] ]['footer'] = 'Envio bloqueado por suspeita de spam.';
}
return $errors;
}, 20, 2 );














