# Como corrigir o DNS Prefetch que não funciona no Perfmatters no WordPress

O Perfmatters DNS prefetch não funciona normalmente porque o domínio foi inserido em formato incorreto, o cache não foi limpo após salvar, ou a tag link rel=dns-prefetch é removida por outra camada de cache ou CDN antes de chegar ao navegador.

## O que é DNS Prefetch do Perfmatters não funciona?

O Perfmatters DNS prefetch é a opção do plugin que adiciona o resource hint dns-prefetch ao cabeçalho HTML do site, instruindo o navegador a resolver antecipadamente o DNS de domínios externos, como o do seu CDN, do Google Fonts ou do Google Analytics. Quando funciona, ele injeta uma tag link rel=dns-prefetch href=//domínio.com para cada domínio cadastrado, o que reduz o tempo de conexão na hora em que o recurso externo é realmente baixado. A opção fica em Perfmatters, na aba Extras, dentro do bloco Preloading, num campo de texto onde cada domínio entra em uma linha.

O problema aparece quando você cadastra os domínios mas a tag dns-prefetch simplesmente não surge no código-fonte da página. Na maioria dos casos a falha não é um bug do plugin, e sim formato de domínio fora do padrão exigido, cache antigo sendo servido depois de salvar, ou uma camada de cache de página ou de CDN que entrega um HTML gerado antes da configuração. Como o hint é apenas uma dica de desempenho, o navegador o ignora silenciosamente quando vem malformado, sem exibir nenhuma mensagem de erro visível.

## Como identificar

- Você adicionou os domínios em Perfmatters, Extras, Preloading, mas ao inspecionar o código-fonte não existe nenhuma tag 'link rel="dns-prefetch"' no cabeçalho da página.
- O navegador não mostra ganho de tempo de DNS para o domínio externo, e na aba Network do DevTools a coluna 'DNS Lookup' continua cheia para o CDN ou para o Google Fonts.
- A tag aparece com a barra dupla incorreta, por exemplo 'href="https://domínio.com"' em vez de 'href="//domínio.com"', e o recurso continua sem ganho.
- Os domínios somem do campo Preloading depois que você clica em salvar, sinal de que o valor não foi gravado.
- A configuração funciona quando o cache está desligado, mas a tag desaparece assim que o cache de página ou da CDN volta a servir a versão antiga do HTML.

**Antes de começar:** Antes de mexer nas configurações do Perfmatters ou purgar cache em produção, faça um backup do site (arquivos e banco de dados) ou teste primeiro em staging, para poder reverter caso a limpeza de cache exponha algum problema de renderização da página.

## Como prevenir

- Cadastre os domínios sempre no formato //domínio.com, um por linha, e revise o campo antes de salvar para evitar protocolo ou vírgulas que invalidam o hint.
- Inclua apenas domínios externos que o site realmente consome (CDN, Google Fonts, Analytics), porque prefetch em excesso desperdiça resolução de DNS sem ganho real.
- Padronize uma rotina de limpar o cache do plugin de cache, do host e da CDN sempre que alterar configurações de Preloading do Perfmatters.
- Valide a tag dns-prefetch no código-fonte após cada mudança, em vez de confiar apenas em o domínio ter sido salvo no painel.

Erros relacionados

- [Como corrigir funcionalidades quebradas pelo Perfmatters](https://full.services/wp-fixer/corrigir-funcionalidades-quebradas-perfmatters/)
- [Como corrigir o conflito de otimização entre Perfmatters e WP Rocket](https://full.services/wp-fixer/corrigir-conflito-perfmatters-wp-rocket/)
- [Como corrigir o erro de Lazy Load no Perfmatters](https://full.services/wp-fixer/corrigir-lazy-load-perfmatters/)

## Causa

- O domínio foi inserido com protocolo (http:// ou https://) em vez do formato exigido pelo Perfmatters, que é apenas //domínio.com com duas barras e sem o esquema, fazendo o hint sair malformado ou não ser gerado.
- Vários domínios foram colados na mesma linha ou separados por vírgula, quando o campo Preloading do Perfmatters espera exatamente um domínio por linha.
- Um cache de página ativo (o próprio cache do host, WP Rocket, LiteSpeed Cache ou WP Super Cache) está servindo um HTML estático gerado antes de você salvar a configuração, então a tag dns-prefetch ainda não foi escrita naquele arquivo de cache.
- Uma CDN ou proxy à frente do site (por exemplo Cloudflare) entrega uma cópia em cache do HTML, e a alteração no head só aparece depois de purgar o cache da borda.
- A aba Extras do Perfmatters está com o bloco Preloading desativado, ou as configurações do plugin não foram salvas porque um erro de JavaScript no admin interrompeu o submit do formulário.

## Como resolver

1. Abra a área de DNS Prefetch no Perfmatters: Acesse o painel do plugin e vá até o campo correto. A opção DNS Prefetch fica dentro do bloco Preloading, na aba Extras, e não na aba de Assets. Confirme que você está editando o campo certo antes de cadastrar os domínios.

```
Painel WP -> Configurações -> Perfmatters
Abra a aba Extras
Localize o bloco Preloading e o campo DNS Prefetch
```

2. Cadastre os domínios no formato exigido: Insira um domínio por linha começando com duas barras e sem protocolo. Esse é o formato que o Perfmatters espera para gerar a tag dns-prefetch corretamente. Domínios com http ou https na frente, ou vários numa linha só, fazem o hint não ser gerado.

```
//fonts.googleapis.com
//fonts.gstatic.com
//www.google-analytics.com
Salve as configurações do Perfmatters
```

3. Limpe o cache de página do site: Depois de salvar, limpe todo o cache para que um novo HTML seja gerado com a tag no head. Sem isso, o site continua servindo a versão antiga da página, gerada antes de você cadastrar os domínios.

```
Limpe o cache do plugin de cache ativo (WP Rocket, LiteSpeed Cache, WP Super Cache)
Limpe o cache do próprio host, se houver
Recarregue a página em uma aba anônima do navegador
```

4. Purgue o cache da CDN ou proxy: Se o site usa uma CDN ou proxy como o Cloudflare na frente, purgue o cache da borda. A CDN pode estar entregando uma cópia em cache do HTML sem a tag, mesmo depois de o WordPress já ter gerado a versão nova.

```
Acesse o painel da CDN (ex.: Cloudflare -> Caching -> Configuration)
Use a opção Purge Everything ou purgue a URL específica
Aguarde a propagação e recarregue a página
```

5. Confirme a tag no código-fonte da página: Verifique se o hint realmente foi escrito no cabeçalho. Abra o código-fonte e procure a tag dns-prefetch. Ela precisa apontar para o domínio no formato com duas barras. Se ela aparecer, o Perfmatters está gerando o hint como esperado.

```
Abra a página e use Ctrl+U para ver o código-fonte
Procure por: link rel="dns-prefetch" href="//fonts.googleapis.com"
Confira na aba Network do DevTools (F12) se o DNS Lookup do domínio caiu
```


## Código

```html
<!-- Saida esperada no <head> quando o DNS Prefetch do Perfmatters esta ativo -->
<link rel="dns-prefetch" href="//fonts.googleapis.com">
<link rel="dns-prefetch" href="//fonts.gstatic.com">
<link rel="dns-prefetch" href="//www.google-analytics.com">

<!-- Equivalente manual via functions.php, caso queira injetar sem o Perfmatters -->
<?php
add_filter( 'wp_resource_hints', 'full_dns_prefetch_hints', 10, 2 );
function full_dns_prefetch_hints( $hints, $relation_type ) {
    if ( 'dns-prefetch' === $relation_type ) {
        $hints[] = '//fonts.googleapis.com';
        $hints[] = '//fonts.gstatic.com';
        $hints[] = '//www.google-analytics.com';
    }
    return $hints;
}
```

## Perguntas frequentes

### Por que o DNS prefetch do Perfmatters não aparece no código-fonte

Na maioria dos casos o domínio foi cadastrado em formato incorreto ou o cache antigo continua sendo servido. Confirme que cada domínio está como //domínio.com em uma linha, salve, e limpe o cache de página e da CDN antes de inspecionar o head novamente.

### Qual é o formato correto do domínio no DNS Prefetch do Perfmatters

O Perfmatters espera um domínio por linha começando com duas barras e sem protocolo, por exemplo //fonts.googleapis.com. Colocar http ou https na frente, ou vários domínios na mesma linha, faz a tag dns-prefetch não ser gerada corretamente.

### Onde fica a opção DNS Prefetch no Perfmatters

A opção fica na aba Extras do plugin, dentro do bloco Preloading, num campo de texto onde você lista os domínios. Não é na aba de Assets. Depois de cadastrar, é preciso salvar e limpar o cache para a tag surgir no head.

### DNS prefetch é a mesma coisa que preconnect no Perfmatters

Não. O DNS prefetch apenas resolve o DNS do domínio antecipadamente, enquanto o preconnect também abre a conexão TCP e o handshake TLS. O preconnect é mais agressivo e deve ser usado em poucos domínios críticos, e o dns-prefetch em uma lista maior de domínios externos.

### O DNS prefetch some quando o cache liga, o que fazer

Isso indica que o HTML em cache foi gerado antes de você salvar os domínios. Limpe o cache do plugin de cache, do host e da CDN para forçar um novo HTML com a tag no head, e confirme no código-fonte que ela passou a aparecer.

### Quantos domínios devo colocar no DNS prefetch do Perfmatters

Use apenas os domínios externos que o site realmente carrega, como CDN, Google Fonts e Analytics. Cadastrar dezenas de domínios sem necessidade desperdiça resolução de DNS e não traz ganho de desempenho, podendo até atrapalhar.

### O DNS prefetch do Perfmatters melhora o PageSpeed

Ele reduz o tempo de resolução de DNS de domínios externos, o que ajuda no tempo de conexão, mas é uma otimização pontual. O ganho aparece principalmente quando o site depende de muitos recursos de terceiros, e some se a tag não chega ao navegador por cache desatualizado.

**Fonte:** [Perfmatters — How to Implement DNS Prefetching in WordPress](https://perfmatters.io/docs/dns-prefetching/)
