Como corrigir o conflito de otimização de JavaScript entre WP Rocket e Perfmatters
O que é o conflito de JS entre WP Rocket e Perfmatters?
O conflito de JS entre WP Rocket e Perfmatters ocorre porque os dois plugins oferecem as mesmas otimizacoes de JavaScript: adiar o carregamento (defer), atrasar a execução até a interacao do usuário (delay) e minificar. Quando a mesma opção fica ligada nos dois ao mesmo tempo, o mesmo arquivo de script e processado duas vezes. A documentação oficial do WP Rocket avisa que aplicar a mesma otimização em dois plugins ao mesmo tempo pode causar conflitos, e que a combinacao de JavaScript de outros plugins precisa ser desativada ao usar o Delay JavaScript execution, senao podem aparecer problemas de exibicao.
Como identificar
- Funções em JavaScript param de responder depois de ligar a otimização nos dois plugins: menu hamburguer não abre, slider não gira, formulário não envia
- Erro no console do navegador do tipo ‘Uncaught ReferenceError: jQuery is not defined’ ou ‘is not a function’, porque o script foi adiado fora de ordem
- A página carrega sem interatividade até o primeiro clique ou scroll, sinal de que o mesmo script foi atrasado (delay) pelos dois plugins
- Layout ou elementos que dependem de JavaScript (abas, accordions, contadores) aparecem quebrados so no frontend, com o admin funcionando normal
- A nota de JavaScript do PageSpeed Insights não melhora ou até cai, mesmo com defer e delay ligados nos dois plugins de otimização
Como prevenir
- Mantenha cada otimização de JavaScript (defer, delay, minificar) ligada em apenas um plugin: ou WP Rocket, ou Perfmatters, nunca nos dois ao mesmo tempo
- Antes de ligar uma opção de JavaScript no Perfmatters, confirme que a mesma opção esta desligada no WP Rocket, e o contrario
- Sempre que mexer em defer ou delay, teste o frontend em janela anonima com o console do navegador aberto, procurando por ReferenceError antes de considerar resolvido
- Documente para a equipe qual plugin cuida de cada otimização de JavaScript, para ninguem reativar a opção duplicada por engano
Causa
- Defer JavaScript do WP Rocket (aba Otimizar arquivos -> Carregar JavaScript adiado) ligado ao mesmo tempo que o Defer JavaScript do Perfmatters (Assets -> JavaScript -> Defer JavaScript): o atributo defer e aplicado em dobro no mesmo arquivo.
- Delay JavaScript Execution ligado nos dois plugins ao mesmo tempo (WP Rocket: Otimizar arquivos -> Atrasar a execução de JavaScript; Perfmatters: Assets -> JavaScript -> Delay JavaScript): o script fica preso esperando a interacao do usuário duas vezes e nunca executa na ordem certa.
- Minificacao de JavaScript ativada nos dois ao mesmo tempo: um plugin minifica um arquivo que o outro já minificou, gerando código invalido que para a execução.
- Scripts que dependem de ordem (jQuery e plugins que dependem do jQuery) sendo adiados sem exclusão: a biblioteca carrega depois do script que precisa dela e dispara ReferenceError.
- Falta de exclusão do mesmo script nos dois plugins: ao excluir um arquivo do delay so no WP Rocket e deixar ligado no Perfmatters (ou vice-versa), o script continua atrasado por um dos lados.
Como resolver
- Escolha um único plugin para adiar e atrasar o JavaScript: Cada otimização de JavaScript tem de viver em um plugin so. Decida se quem vai cuidar de defer e delay e o WP Rocket ou o Perfmatters. A recomendacao prática e centralizar no WP Rocket, que tem exclusoes em um clique para plugins e temas comuns.
Painel: WP Rocket -> Otimizar arquivos -> Carregar JavaScript adiado = ligado Painel: WP Rocket -> Otimizar arquivos -> Atrasar a execução de JavaScript = ligado - Desligue as mesmas opções de JavaScript no Perfmatters: Com o WP Rocket cuidando do JavaScript, desative Defer JavaScript, Delay JavaScript e a minificacao de JavaScript no Perfmatters para o mesmo arquivo não ser processado duas vezes.
Painel: Perfmatters -> Assets -> JavaScript -> Defer JavaScript = Off Painel: Perfmatters -> Assets -> JavaScript -> Delay JavaScript = Off Painel: Perfmatters -> Assets -> JavaScript -> Minify JavaScript = Off - Exclua do delay os scripts que quebraram: Se um recurso (menu, slider, formulário) parou ao ligar o Atrasar execução, exclua o arquivo dele do delay no plugin que ficou responsável. No WP Rocket isso vai na caixa Arquivos JavaScript excluidos, uma palavra ou caminho por linha. Alternativa por código: adicionar o atributo nowprocket na tag do script.
/wp-content/themes/seu-tema/assets/js/navigation.min.js /wp-includes/js/jquery/jquery.min.js data-nowprocket - Ligue o Safe Mode do WP Rocket se o jQuery quebrar: Quando o erro for jQuery is not defined, ative o Safe Mode dentro de Atrasar a execução de JavaScript. Ele exclui automaticamente os scripts do core do WordPress e o jQuery do delay, devolvendo a ordem de carregamento.
Painel: WP Rocket -> Otimizar arquivos -> Atrasar a execução de JavaScript -> Safe Mode for jQuery = ligado - Limpe o cache e revalide no frontend e no PageSpeed: Depois de centralizar a otimização e ajustar as exclusoes, limpe o cache e teste em janela anonima. Confirme que menu, slider e formulário respondem, que o console não tem ReferenceError e rode o PageSpeed para medir o ganho real.
Painel: WP Rocket -> Dashboard -> Limpar cache https://pagespeed.web.dev/
<?php
/**
* Excluir scripts criticos do Delay JavaScript do WP Rocket via filtro.
* Evita que jQuery e o JS do tema sejam atrasados e quebrem menu/slider/forms.
* Coloque em um plugin de snippets ou no functions.php do tema filho.
*/
add_filter( 'rocket_delay_js_exclusions', function ( $excluded ) {
$excluded[] = '/wp-includes/js/jquery/jquery.min.js';
$excluded[] = '/wp-includes/js/jquery/jquery-migrate.min.js';
$excluded[] = 'themes/seu-tema/assets/js/navigation';
return $excluded;
} );














