Como corrigir a remoção de query strings que não funciona no Perfmatters
O que é query strings que o Perfmatters não remove?
Query strings são o trecho de versão que o WordPress acrescenta ao fim das URLs de CSS e JS estáticos, no formato ?ver=6.5. Ele serve para invalidar o cache do navegador quando o arquivo muda, mas alguns proxies, CDNs e ferramentas de auditoria como o GTmetrix antigo recomendavam removê-lo porque tratavam URLs com query string como não cacheáveis. A opção Remove Query Strings do Perfmatters existe justamente para tirar esse ?ver= dos recursos estáticos do seu site.
O Perfmatters faz isso filtrando as URLs que passam pelos hooks style_loader_src e script_loader_src do WordPress, removendo o parâmetro ver dos assets locais. O problema aparece quando você ativa a opção e o ?ver= continua na fonte da página: na prática o Perfmatters só consegue limpar os recursos que ele enxerga por esses filtros, então assets externos, scripts enfileirados de forma incorreta ou HTML servido de um cache antigo escapam da limpeza e mantêm a query string.
Como identificar
- No código-fonte da página, arquivos como style.min.css?ver=6.5 e jquery.min.js?ver=3.7.1 continuam com o ?ver= mesmo após ativar a opção Remove Query Strings.
- A auditoria do GTmetrix ou de outra ferramenta segue apontando ‘Remove query strings from static resources’ depois de salvar as configurações do Perfmatters.
- Somente alguns arquivos perderam o ?ver=: os assets do tema e do core ficaram limpos, mas os de plugins ou de um CDN ainda mostram a query string.
- A query string sumiu ao testar em uma aba anônima, mas continua aparecendo na navegação normal porque o navegador ou um plugin de cache serve a versão antiga do HTML.
- Recursos de terceiros, como Google Fonts ou um pixel externo, mantêm parâmetros na URL e seguem listados na auditoria mesmo com a opção ativa.
Como prevenir
- Centralize a remoção de query strings em um único plugin de performance e nunca ative a mesma função no Perfmatters e no WP Rocket ao mesmo tempo, evitando conflito na ordem dos filtros.
- Hospede recursos de terceiros localmente quando possível, como as fontes do Google pela própria opção Local Google Fonts do Perfmatters, para que esses assets passem a ser tratados como locais.
- Adote o hábito de limpar o cache do plugin e da CDN sempre que alterar qualquer configuração de otimização, para que o HTML servido reflita a mudança na hora.
- Audite a página em aba anônima após cada ajuste de performance, conferindo a fonte para garantir que os assets locais saem sem o ?ver= e que nada de essencial parou de carregar.
Causa
- A opção Remove Query Strings está desmarcada em Perfmatters, Options, aba General, ou as alterações foram feitas mas o botão Save Changes não foi clicado, então o filtro nunca chegou a rodar.
- Um plugin de cache de página, como o WP Rocket, ou o cache da CDN está servindo um HTML gerado antes de você ativar a opção, então a página entregue ainda contém o ?ver= antigo até o cache ser limpo.
- Os arquivos que ainda exibem a query string são externos ao site (Google Fonts, um pixel ou um script de CDN de terceiros): o Perfmatters atua nos filtros style_loader_src e script_loader_src de assets locais e não reescreve URLs de domínios externos.
- Um plugin ou tema imprime o CSS ou o JS direto no HTML com a tag escrita à mão, sem passar pela fila do wp_enqueue_style e wp_enqueue_script, de modo que a URL nunca atravessa o filtro que o Perfmatters usa para remover o ver.
- Outro plugin de performance reaplica a versão ao asset depois do Perfmatters, ou a opção Remove Query Strings do próprio WP Rocket está ativa em paralelo, gerando comportamento conflitante na ordem dos filtros.
Como resolver
- Confirme que a opção está ativa e salva: Abra as configurações do Perfmatters e garanta que a opção Remove Query Strings esteja marcada na aba General, depois clique em Save Changes. Sem salvar, o filtro que remove o ver não é registrado e nada muda na fonte da página.
Painel WP -> Settings -> Perfmatters -> Options -> General Marque a opção 'Remove Query Strings' Clique em 'Save Changes' no rodapé da aba - Limpe todo o cache e teste em aba anônima: Limpe o cache do seu plugin de cache, da CDN e do navegador, pois o HTML servido pode ter sido gerado antes da mudança e ainda conter o ?ver=. Em seguida abra a página em uma aba anônima e veja o código-fonte para confirmar se a query string saiu.
Limpe o cache do plugin de página (ex.: WP Rocket -> Clear Cache) Faça purge do cache da CDN (ex.: Cloudflare -> Purge Everything) Abra a página em aba anônima e use Ctrl+U para ver a fonte - Separe assets locais de assets externos: Olhe na fonte da página quais URLs ainda têm ?ver= e veja o domínio de cada uma. Se forem de domínios externos como fonts.googleapis.com ou de uma CDN de terceiros, o Perfmatters não reescreve essas URLs por design: a limpeza vale para os recursos locais que passam pelos filtros de enfileiramento do WordPress.
No código-fonte, identifique as URLs que ainda têm '?ver=' Compare o domínio: local (seu site) ou externo (terceiros) Para os externos, trate a fonte (ex.: hospedar fontes localmente) em vez de esperar a limpeza - Verifique conflito com outro plugin de performance: Se o WP Rocket ou outro plugin de otimização também tiver a remoção de query strings ou a versão de assets ativa, desligue a função duplicada em um deles para evitar que um reaplique o ver depois do outro. Centralize a remoção em um único plugin e recarregue a página para testar.
Painel WP -> WP Rocket -> File Optimization (ou plugin equivalente) Desative a remoção de query strings duplicada em um dos plugins Limpe o cache e recarregue a página para confirmar - Force a remoção via filtro para assets teimosos: Para os recursos locais que ainda escapam, adicione um filtro próprio nos hooks style_loader_src e script_loader_src para remover o parâmetro ver, complementando o Perfmatters. Coloque o código em um plugin de site específico ou no functions.php do tema filho.
Edite o functions.php do tema filho ou um mu-plugin Adicione o filtro de remoção do parâmetro 'ver' (ver bloco de código abaixo) Salve, limpe o cache e confira a fonte da página
<?php
/**
* Remove o parametro ?ver= dos assets locais que escapam do Perfmatters.
* Cole em um mu-plugin ou no functions.php do tema filho.
*/
add_filter( 'style_loader_src', 'full_remove_query_strings', 15 );
add_filter( 'script_loader_src', 'full_remove_query_strings', 15 );
function full_remove_query_strings( $src ) {
if ( ! $src ) {
return $src;
}
// So mexe em URLs do proprio site: assets externos ficam intactos.
if ( strpos( $src, home_url() ) !== false && strpos( $src, '?ver=' ) !== false ) {
$src = remove_query_arg( 'ver', $src );
}
return $src;
}














