Como corrigir o aviso de cache do navegador no WordPress
O que é o aviso de browser caching WordPress?
Browser caching e a instrucao que diz ao navegador por quanto tempo guardar localmente arquivos estáticos do site (imagens, CSS, JavaScript e fontes), evitando baixa-los de novo a cada página. Quando esses arquivos saem do servidor sem o cabeçalho de validade, ferramentas como GTmetrix, PageSpeed Insights e Lighthouse disparam o aviso ‘Serve static assets with an efficient cache policy’ (antigo ‘Leverage browser caching’). No WordPress com Apache ou LiteSpeed, o WP Rocket grava esses cabeçalhos automaticamente no .htaccess via mod_expires e mod_headers; em Nginx a regra precisa ser adicionada no bloco do servidor manualmente, porque o .htaccess não e lido.
Como identificar
- GTmetrix ou PageSpeed Insights aponta ‘Serve static assets with an efficient cache policy’ (antes chamado ‘Leverage browser caching’) listando seus próprios CSS, JS e imagens
- No relatório, a coluna de cache (Cache TTL / Expiry) aparece como ‘None’, ‘0s’ ou ‘No expiration set’ nos arquivos do seu domínio
- A nota de performance sobe na primeira visita mas as visitas repetidas continuam lentas, sem reaproveitar arquivos do cache local
- Nas DevTools do navegador, aba Network, a coluna Size mostra o tamanho real do arquivo em vez de ‘(disk cache)’ ao recarregar a página
- Após ativar o WP Rocket o aviso some para os arquivos do site, mas permanece para scripts externos como Google Analytics, Google Fonts e Facebook pixel
Como prevenir
- Mantenha o WP Rocket ativo: ele regrava os Expires headers no .htaccess sempre que e atualizado ou reconfigurado
- Depois de instalar plugins de segurança que mexem no .htaccess, confira se o bloco entre os marcadores do WP Rocket continua presente
- Em sites Nginx, deixe a regra de cache de estáticos versionada na configuração do servidor para não se perder em migracoes de hospedagem
- Hospede localmente Google Fonts e scripts de analytics quando possível, para que herdem o cache longo do seu próprio servidor
Causa
- O servidor não envia cabeçalho Expires nem Cache-Control max-age para arquivos estáticos, entao o navegador trata cada CSS, JS e imagem como sempre vencido e baixa de novo.
- O site roda em Nginx, onde o WP Rocket não consegue gravar as regras de cache, porque o Nginx ignora o arquivo .htaccess e exige diretivas no bloco server.
- O módulo mod_expires ou mod_headers do Apache esta desativado, fazendo o bloco que o WP Rocket escreve no .htaccess não ter efeito.
- Um plugin de segurança ou o painel da hospedagem sobrescreve o .htaccess depois do WP Rocket, removendo o bloco de Expires headers gravado entre os marcadores BEGIN WP Rocket e END WP Rocket.
- O aviso vem de recursos de terceiros (Google Analytics, Google Tag Manager, Google Fonts, Facebook pixel) servidos do domínio deles com validade curta, fora do alcance do cache do seu servidor.
Como resolver
- Confirme quais arquivos disparam o aviso: Rode o site no PageSpeed Insights ou GTmetrix e abra a auditoria de cache. Separe os arquivos do seu próprio domínio (que você controla) dos de terceiros (Google, Facebook), porque so os primeiros são corrigidos no servidor.
- Ative o cache no WP Rocket (Apache ou LiteSpeed): Basta ter o WP Rocket ativo. Ele grava as regras de Expires headers e Cache-Control no .htaccess automaticamente, definindo validade de 1 ano para CSS e JavaScript, 4 meses para imagens e fontes, 1 hora para feeds e 0 segundo para HTML.
- Verifique se o bloco foi gravado no .htaccess: Abra o arquivo .htaccess na raiz do site por FTP ou gerenciador de arquivos e confirme que o bloco de Expires headers existe entre os marcadores BEGIN WP Rocket e END WP Rocket. Se você mantiver o site no Apache sem plugin de cache, adicione o bloco de Expires headers do exemplo de código desta página acima da regra principal do WordPress.
BEGIN WP Rocket END WP Rocket - Confirme que mod_expires e mod_headers estão ativos no Apache: Se o bloco esta no .htaccess mas o aviso continua, o módulo do Apache pode estar desligado. Em servidores com acesso ao terminal, habilite os módulos e reinicie o Apache.
sudo a2enmod expires headers sudo systemctl restart apache2 - Adicione a regra no bloco server se o site rodar em Nginx: No Nginx o .htaccess não e lido, entao o WP Rocket não corrige sozinho. Peca a hospedagem ou edite a configuração do site para incluir a diretiva de validade dos arquivos estáticos e recarregue o Nginx.
location ~* .(css|js|png|jpg|jpeg|webp|woff2|svg)$ { expires 4M; add_header Cache-Control "public"; } sudo nginx -t sudo systemctl reload nginx - Limpe o cache e teste de novo: Limpe o cache do WP Rocket e do CDN, recarregue o site sem cache do navegador e rode o teste novamente. O aviso deve sumir para todos os arquivos do seu domínio. Os scripts de terceiros tendem a permanecer e não prejudicam o ranqueamento.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "access plus 0 seconds"
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType image/jpeg "access plus 4 months"
ExpiresByType image/png "access plus 4 months"
ExpiresByType image/webp "access plus 4 months"
ExpiresByType image/svg+xml "access plus 4 months"
ExpiresByType font/woff2 "access plus 4 months"
ExpiresByType application/rss+xml "access plus 1 hour"
ExpiresDefault "access plus 1 month"
</IfModule>
<IfModule mod_headers.c>
Header unset Pragma
Header append Cache-Control "public"
</IfModule>














