Como corrigir o erro de checkout do WooCommerce causado pelo cache do WP Rocket
O que é o checkout do WooCommerce com WP Rocket que não funciona?
O checkout do WooCommerce com WP Rocket é a página de finalizar compra de uma loja que usa o plugin de cache WP Rocket. O WP Rocket exclui do cache as páginas Carrinho, Finalizar compra e Minha conta automaticamente, mas só as que estiverem atribuídas nas configurações do WooCommerce. Quando essa atribuição está errada, ou quando as otimizações de JavaScript adiam os scripts do checkout e do gateway de pagamento, a página é entregue estática para todos os visitantes: o nonce de segurança expira, o cálculo de frete e o formulário param de atualizar e o cliente não consegue concluir a compra. É um dos erros mais caros de uma loja, porque acontece no exato momento da conversão.
Como identificar
- O botão ‘Finalizar compra’ / ‘Place order’ não responde ao clique e a página apenas recarrega, sem criar o pedido.
- Mensagem ‘O link que você seguiu expirou’ ou erro de nonce ao tentar finalizar, sinal de página de checkout cacheada e servida estática.
- O console do navegador (F12, aba Rede) mostra a chamada wc-ajax=checkout retornando 403 ou sem resposta enquanto o JavaScript do gateway não inicia.
- Os campos de entrega, frete e o total do pedido não atualizam ao trocar o endereço, porque o fragmento AJAX foi cacheado junto com a página.
- O problema some quando você limpa o cache do WP Rocket e volta minutos depois, quando a versão cacheada do checkout é regenerada.
- Desativar o WP Rocket faz o checkout voltar a funcionar e reativar o plugin quebra de novo.
Como prevenir
- Mantenha as páginas de carrinho, checkout e minha conta sempre atribuídas em WooCommerce -> Configurações -> Avançado, que é a condição para o WP Rocket excluí-las do cache automaticamente
- Sempre que trocar de gateway de pagamento ou atualizar o WooCommerce, exclua o novo script do Delay JavaScript Execution e da combinação de JavaScript antes de considerar o deploy concluído
- Após qualquer mudança nas otimizações do WP Rocket, finalize um pedido de teste em janela anônima com o cache limpo antes de liberar a loja
- Mantenha um único plugin de cache ativo e desligue o cache de página do host ou do Cloudflare nas rotas de checkout para não cachear o pedido por cima do WP Rocket
Causa
- As páginas Carrinho, Finalizar compra e Minha conta não estão atribuídas em WooCommerce -> Configurações -> Avançado, então o WP Rocket não as reconhece e serve a página de checkout em cache para todos os visitantes.
- A opção Delay JavaScript Execution (aba File Optimization) está segurando o script do gateway (Stripe, Mercado Pago, PagBank) e o wc-checkout.js, então o botão de finalizar pedido não dispara a requisição.
- A opção Combine JavaScript files ou Minify JavaScript files quebra o script do checkout ou do gateway ao juntar os arquivos, deixando o formulário sem o handler de submit.
- Uma URL do checkout foi adicionada manualmente em Advanced Rules -> Never Cache URL(s) com a barra final errada, ou outro plugin de cache (host, Cloudflare APO) está cacheando o checkout por cima do WP Rocket.
- O Optimize CSS Delivery / Remove Unused CSS removeu o CSS do formulário de checkout e os campos ficam invisíveis ou desalinhados, impedindo o preenchimento.
- O cart fragments AJAX (wc-ajax=get_refreshed_fragments) foi cacheado, então o mini carrinho e o total do checkout mostram um estado antigo e o pedido não fecha com o valor correto.
Como resolver
- Confirme que a causa é o WP Rocket: no painel, abra WP Rocket -> Dashboard e clique em Limpar e pré-carregar cache. Se o checkout voltar a funcionar e quebrar de novo em poucos minutos, o conflito está no cache ou nas otimizações de JavaScript do WP Rocket, não no WooCommerce.
- Verifique a atribuição das páginas do WooCommerce: garanta que as páginas estão corretamente atribuídas, porque o WP Rocket só exclui do cache as páginas que o WooCommerce informa. Confira em WooCommerce -> Configurações -> Avançado os três campos abaixo e que cada página contém o bloco ou o shortcode correspondente.
Página do carrinho -> [woocommerce_cart] Página de finalização da compra -> [woocommerce_checkout] Página da conta -> [woocommerce_my_account] - Exclua os scripts essenciais do Delay JavaScript Execution: abra WP Rocket -> File Optimization, role até Delay JavaScript Execution e adicione na lista de exclusão o script do checkout e o do seu gateway de pagamento, para que o botão de finalizar pedido volte a responder ao clique.
/woocommerce/assets/js/frontend/checkout wc-checkout js.stripe.com mercadopago jquery.min.js - Tire o checkout da combinação e minificação de JavaScript: ainda em File Optimization, na seção Minify JavaScript files, adicione os mesmos scripts do checkout e do gateway ao campo de JavaScript excluído, e desative Combine JavaScript files se o seu gateway carregar de um domínio externo.
/woocommerce/assets/js/frontend/checkout.min.js /plugins/woocommerce-gateway-stripe/ /plugins/woo-mercado-pago-module/ - Reforce a exclusão de cache e do CSS: em WP Rocket -> Advanced Rules, confirme que as páginas de carrinho, checkout e conta não estão sendo cacheadas e, se usar Remove Unused CSS, adicione o seletor do checkout ao CSS Safelist. Adicione o caminho do checkout em Never Cache URL(s) usando o padrão com curinga.
/finalizar-compra(.*) .woocommerce-checkout #order_review - Limpe o cache e teste em janela anônima: volte ao WP Rocket -> Dashboard, clique em Limpar e pré-carregar cache, limpe também o cache da CDN ou do Cloudflare e finalize um pedido de teste em uma janela anônima para confirmar que o botão de finalizar compra cria o pedido.
// functions.php do tema filho — garante que checkout, carrinho e minha conta
// nunca sejam servidos em cache, mesmo se a atribuicao do WooCommerce falhar.
add_action( 'template_redirect', function () {
if ( function_exists( 'is_checkout' ) && ( is_checkout() || is_cart() || is_account_page() ) ) {
if ( ! defined( 'DONOTCACHEPAGE' ) ) {
define( 'DONOTCACHEPAGE', true );
}
nocache_headers();
}
}, 0 );














