Como corrigir o WP Rocket que não gera cache
O que é o WP Rocket que não gera cache?
WP Rocket gera cache salvando uma cópia HTML estática de cada página em wp-content/cache/wp-rocket/ e servindo esse arquivo aos visitantes deslogados, o que dispensa o WordPress de montar a página via PHP e banco a cada requisição. Quando o cache não é gerado, esse arquivo estático não existe ou não é entregue, e cada acesso volta a executar todo o WordPress, elevando o TTFB e anulando o ganho de performance do plugin.
É importante separar dois casos. Há situações em que o WP Rocket não cacheia de propósito (visitante logado, página com query string, carrinho e checkout de e-commerce) e isso é comportamento esperado. E há falhas reais, em que a página deveria ser cacheada e não é: regra de exclusão errada, constante WP_CACHE ausente, conflito com outro plugin de cache, cache no nível do host ou permissão de escrita negada na pasta de cache.
Como identificar
- O comentário “Debug: cached@[timestamp]” não aparece no fim do código-fonte da página (Ctrl+U), mesmo recarregando duas vezes deslogado.
- O footprint do WP Rocket aparece SEM o timestamp “cached@”, indicando que o cache não está sendo gerado naquela URL.
- A pasta wp-content/cache/wp-rocket/ está vazia ou não contém os arquivos index.html / index.html_gzip do domínio.
- O TTFB não cai com o WP Rocket ativo e o cabeçalho de resposta mostra “x-cache: MISS” em vez de HIT.
- Clicar em “Limpar cache” não muda nada: a página continua sendo montada pelo PHP a cada acesso.
Como prevenir
- Mantenha apenas um plugin de cache ativo e remova sobras (advanced-cache.php, object-cache.php) ao trocar de plugin
- Antes de instalar o WP Rocket, verifique na lista oficial se o seu host já faz cache de página no servidor para não empilhar camadas
- Após migrar de domínio, mudar para HTTPS ou ajustar permalinks, desative e reative o WP Rocket para regravar o arquivo de configuração
- Confira periodicamente o footprint “cached@” no código-fonte de páginas-chave para detectar cedo quando uma URL parar de ser cacheada
Causa
- Constante WP_CACHE ausente ou no lugar errado no wp-config.php: sem 'define( 'WP_CACHE', true );' logo após o topo do wp-config.php, o advanced-cache.php do WP Rocket nem é carregado.
- Regra em Advanced Rules → Never Cache URLs excluindo a página por engano (por exemplo a entrada "/" exclui a home inteira).
- Conflito com outro plugin de cache ou sobras dele: advanced-cache.php apontando para WP Super Cache / W3 Total Cache, ou object-cache.php / wp-cache-config.php legados disputando o controle.
- Cache no nível do host servindo a página antes do WP Rocket (LiteSpeed Cache do servidor, Varnish, NGINX FastCGI, ou hosts como Kinsta/WP Engine/SiteGround que gerenciam o cache de página por conta própria).
- Permissão de escrita negada em wp-content/cache (pasta sem CHMOD 0755), impedindo o WP Rocket de gravar o arquivo HTML.
- Constante DONOTCACHEPAGE definida por outro plugin/tema, ou tema sem wp_footer() / sem a tag de fechamento do HTML, que impede o WP Rocket de fechar e salvar o arquivo de cache.
Como resolver
- Confirme o estado real do cache: Abra a página numa janela anônima (deslogado), recarregue uma vez e veja o código-fonte (Ctrl+U). Procure no fim do HTML pelo footprint do WP Rocket com o timestamp. Se o "cached@" não aparecer, aquela URL não está sendo cacheada e o diagnóstico segue.
- Garanta a constante WP_CACHE no wp-config.php: Abra o wp-config.php e confirme que a linha abaixo existe logo após o topo do wp-config.php, antes do comentário "That's all, stop editing". Se estiver ausente ou colada muito embaixo, o advanced-cache.php do WP Rocket não roda e nenhuma página é cacheada.
define( 'WP_CACHE', true ); - Revise as regras de Never Cache URLs: Vá em WP Rocket → Advanced Rules → Never Cache URL(s) e remova qualquer entrada que exclua a página afetada por engano. Confira também a caixa de opções do WP Rocket na edição da própria página/post, garantindo que o cache não foi desativado individualmente.
- Elimine conflito com outro cache: Garanta que só há um plugin de cache ativo. Abra wp-content/advanced-cache.php e confirme que ele referencia APENAS o WP Rocket. Remova sobras de plugins anteriores como wp-cache-config.php (WP Super Cache) ou object-cache.php e a pasta de config do W3 Total Cache.
wp-content/advanced-cache.php wp-content/object-cache.php wp-content/wp-cache-config.php - Corrija as permissões da pasta de cache: Pelo gerenciador de arquivos ou SSH, garanta que o WP Rocket consegue escrever. Defina wp-content/cache como 0755 e .htaccess / wp-config.php como 0644. Sem permissão de escrita, o plugin não cria o arquivo HTML e o cache nunca aparece.
chmod 0755 wp-content/cache chmod 0644 wp-config.php .htaccess - Descarte cache do host e reative o plugin: Se o host (Kinsta, WP Engine, SiteGround) ou um LiteSpeed/Varnish de servidor já gerencia o cache de página, o WP Rocket não cacheia por design e as demais otimizações continuam valendo; confirme na lista de hosts compatíveis. Depois de qualquer ajuste, desative e reative o WP Rocket para regravar o arquivo de configuração e teste de novo o passo 1.
<?php
/*
* Cole no topo do wp-config.php, logo apos a abertura <?php.
* Sem esta constante o advanced-cache.php do WP Rocket nao e carregado
* e NENHUMA pagina e cacheada.
*/
define( 'WP_CACHE', true );
/*
* Diagnostico rapido: descobrir quem esta impedindo o cache.
* Cole no functions.php do tema-filho TEMPORARIAMENTE e abra a home deslogado.
* Se DONOTCACHEPAGE aparecer como definida, outro plugin/tema esta bloqueando.
*/
add_action( 'wp_footer', function () {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
$blockers = array();
if ( defined( 'DONOTCACHEPAGE' ) && DONOTCACHEPAGE ) {
$blockers[] = 'DONOTCACHEPAGE definida por outro plugin/tema';
}
if ( ! defined( 'WP_CACHE' ) || ! WP_CACHE ) {
$blockers[] = 'WP_CACHE ausente ou false no wp-config.php';
}
$cache_dir = WP_CONTENT_DIR . '/cache';
if ( ! is_writable( $cache_dir ) ) {
$blockers[] = 'wp-content/cache SEM permissao de escrita (use chmod 0755)';
}
echo "n<!-- WPF-219 cache check: " . ( $blockers ? implode( ' | ', $blockers ) : 'nenhum bloqueador obvio' ) . " -->n";
}, 99 );














