Como corrigir o erro de Critical CSS não gerado no WP Rocket
O que é Critical CSS not generated no WP Rocket?
Critical CSS (ou Critical Path CSS) e o CSS mínimo necessário para renderizar a parte visivel da página sem bloqueio de renderizacao. O WP Rocket gera esse CSS chamando uma API externa que visita cada URL do site, extrai os estilos usados acima da dobra e devolve o resultado para o plugin armazenar. No WP Rocket 3.9 e versões mais novas, a opção Remove Unused CSS gera o Used CSS de forma assincrona e o injeta como uma tag style com id wpr-usedcss logo após a tag title.
O erro Critical CSS not generated aparece quando essa geração assincrona falha: a API do WP Rocket tenta visitar a URL do seu site mas recebe uma resposta diferente de 200, esgota o tempo de espera ou e bloqueada por uma camada de segurança. Como o processo roda em segundo plano via WP-cron, a falha costuma passar despercebida até o usuário notar que o site continua com CSS bloqueante no PageSpeed Insights.
Como identificar
- A barra de notificação do WP Rocket exibe a mensagem Critical CSS generation is currently running e ela nunca conclui, ficando presa por horas.
- O painel mostra o erro Invalid response code ao tentar gerar o CSS, indicando resposta diferente de 200 (geralmente 404, 400 ou 403) na URL processada.
- Aparece a mensagem cURL error 28 ou Timeout, indicando que a API do WP Rocket não recebeu resposta dentro do limite de tempo.
- Surge a mensagem No valid stylesheets available ou Styles contain one or more errors quando os arquivos CSS estão vazios, inacessiveis ou retornam erro.
- O PageSpeed Insights continua acusando Eliminate render-blocking resources mesmo com Optimize CSS Delivery ativado, e a pasta cache/used-css/1/ não contem os arquivos .css.gz esperados.
Como prevenir
- Mantenha um cron real do servidor (a cada 5 minutos) apontando para wp-cron.php em vez de depender so do WP-cron disparado por visitas, garantindo que a fila do Used CSS seja sempre processada.
- Antes de ativar Remove Unused CSS, garanta que o site esteja publicamente acessivel, sem maintenance mode e sem bloqueio de IP nas ferramentas de segurança.
- Reduza o TTFB para menos de 1 segundo com cache de página e um bom host, evitando o limite de 20 segundos da API que dispara Timeout.
- Limite a cadeia de redirecionamentos a no máximo um salto (por exemplo HTTP direto para HTTPS com barra final), evitando o erro Too many redirections.
Causa
- Cloudflare com Bot Fight Mode ativo ou um plugin de segurança (Wordfence, iThemes, All-In-One Security) bloqueando o IP da API do WP Rocket, o que gera Invalid response code ou Connection refused.
- WP-cron desativado ou travado: sem a constante de cron rodando, a fila de geração assincrona do Used CSS nunca e processada e a notificação fica presa em running.
- A constante WP_HTTP_BLOCK_EXTERNAL definida como true no wp-config.php, que bloqueia as requisicoes HTTP de saida do servidor e provoca a mensagem User has blocked requests through HTTP.
- TTFB acima de 20 segundos ou páginas que demoram mais de 45 segundos para carregar sem cache, estourando o limite de tempo da API e retornando Timeout.
- Mais de 2 redirecionamentos na URL processada (por exemplo HTTP para HTTPS e depois com barra final), o que dispara Too many redirections e aborta a geração.
- Tema ou plugin que injeta apenas CSS inline, sem tags link de folha de estilo externa, resultando em No valid stylesheets available.
Como resolver
- Confirme o status do serviço e a licenca: Antes de mexer no site, verifique se a própria API do WP Rocket esta operacional e se sua licenca esta valida, já que ambas são pre-requisito para a geração do CSS crítico. Abra a página de status do serviço e confirme a licenca no painel do plugin.
WordPress -> Configurações -> WP Rocket -> Dashboard (verifique a validade da licenca) https://status.wp-rocket.me/ - Garanta que o WP-cron esta funcionando: A geração do Used CSS e assincrona e depende do WP-cron para processar a fila a cada 60 segundos. Se o cron estiver desativado, a notificação fica presa em running para sempre. Cheque se a constante de desativacao do cron esta no wp-config.php e, em hospedagem compartilhada, prefira um cron real do servidor.
grep DISABLE_WP_CRON wp-config.php define( 'DISABLE_WP_CRON', false ); wp cron event list --allow-root - Libere o IP e o user agent da API nas camadas de segurança: A causa mais comum e o IP da API do WP Rocket ser barrado. Desative o Bot Fight Mode no Cloudflare e adicione os IPs e o user agent da ferramenta na allowlist do firewall e do plugin de segurança. Também confirme que a query string de bypass de cache e permitida.
Cloudflare -> Security -> Bots -> Bot Fight Mode: Off ?wpr_imagedimensions=1&nowprocket=1&no_optimize=1 Wordfence -> All Options -> Allowlisted IP addresses (adicione os IPs da API) - Remova o bloqueio de HTTP externo no wp-config.php: Se o site define WP_HTTP_BLOCK_EXTERNAL como true, o servidor não consegue conversar com a API e a geração falha com User has blocked requests through HTTP. Desative o bloqueio ou, se precisar mante-lo, adicione o domínio da API a lista de hosts acessiveis.
define( 'WP_HTTP_BLOCK_EXTERNAL', false ); define( 'WP_ACCESSIBLE_HOSTS', 'wp-rocket.me,*.wp-rocket.me' ); - Limpe o Used CSS e force a regeneracao: Depois de corrigir o bloqueio, limpe o Used CSS atual e gere de novo. Use o botão do plugin para limpar e, em seguida, instale o CPCSS Debug Helper oficial para descobrir qual URL específica esta retornando erro, caso o problema persista em páginas isoladas.
WP Rocket (barra de admin) -> Clear Used CSS WordPress -> Configurações -> WP Rocket -> File Optimization -> Regenerate Used CSS ls -lah wp-content/cache/used-css/1/
<?php
// wp-config.php — destrave a geracao de Critical CSS do WP Rocket
// Coloque ANTES da linha: /* That's all, stop editing! */
// 1. Garanta que o WP-cron esteja ativo (a fila de Used CSS depende dele)
define( 'DISABLE_WP_CRON', false );
// 2. Permita requisicoes HTTP de saida para a API do WP Rocket
define( 'WP_HTTP_BLOCK_EXTERNAL', false );
// Se precisar manter o bloqueio externo, libere apenas o host da API:
// define( 'WP_HTTP_BLOCK_EXTERNAL', true );
// define( 'WP_ACCESSIBLE_HOSTS', 'wp-rocket.me,*.wp-rocket.me' );














