Como corrigir o conflito de nonce expirado entre WP Rocket e reCAPTCHA
Perguntas frequentes
Por que o reCAPTCHA falha só depois de algumas horas com o WP Rocket ativo?
Porque o WP Rocket serve uma cópia em cache da página com um nonce gerado quando o cache foi criado. Esse token tem validade padrão de 12 a 24 horas. Passado esse tempo, o visitante envia um nonce já expirado e o reCAPTCHA ou o formulário rejeita o envio. Logo após limpar o cache funciona porque um nonce novo é gerado.
O que é um nonce e por que ele expira no cache?
Nonce é um token de uso único e temporário que o WordPress cria para garantir que uma requisição partiu da página legítima. Ele é válido por uma janela de tempo, por padrão 86400 segundos. Quando o WP Rocket congela a página em HTML estático, o nonce fica preso no valor antigo e expira sem ser renovado, ao contrário de uma página dinâmica que gera um token novo a cada carregamento.
Excluir a página do cache não vai deixar o site lento?
Não de forma perceptível. Você exclui apenas a página específica que contém o formulário, como a de contato ou o checkout, e o restante do site continua totalmente cacheado pelo WP Rocket. O ganho de performance global é mantido e só a página dinâmica passa a ser servida fresca, com nonce válido.
Preciso excluir o reCAPTCHA do Delay JavaScript Execution também?
Sim, na maioria dos casos. Se o script do Google reCAPTCHA for atrasado pelo Delay JavaScript Execution, o token pode não ser gerado antes de o visitante enviar o formulário. Adicionar os padrões google.com/recaptcha e gstatic.com/recaptcha à lista de exclusão garante que o reCAPTCHA carregue a tempo.
O problema afeta Contact Form 7, WPForms e WooCommerce da mesma forma?
Sim, porque todos usam nonce e reCAPTCHA na página que pode ser cacheada. A página de contato com Contact Form 7 ou WPForms e a página de checkout do WooCommerce são as mais afetadas. A solução é a mesma: excluir essas páginas do cache do WP Rocket e manter o script do reCAPTCHA fora do Delay JavaScript.
Como sei se o erro é do cache e não da chave do reCAPTCHA?
Limpe o cache do WP Rocket e teste o envio numa janela anônima logo em seguida. Se funcionar imediatamente após limpar e voltar a falhar horas depois, o problema é o nonce vindo do cache. Se falhar sempre, mesmo com cache limpo, aí o foco é a chave do site ou o domínio configurado no painel do reCAPTCHA.
Reduzir a validade do nonce resolve sem excluir a página do cache?
Ajuda apenas em parte e tem efeito colateral. Encurtar o nonce_life reduz a janela em que o token cacheado fica válido, mas se a validade ficar menor que o tempo de vida do cache o problema volta, e um nonce curto demais no site inteiro pode deslogar usuários. O caminho confiável é excluir a página do formulário do cache.














