# Como corrigir o CDN Rewrite que não altera URLs no Perfmatters no WordPress

O Perfmatters CDN Rewrite não funciona quando a opção Enable CDN Rewrite esta desligada, a CDN URL esta preenchida errada, ou os assets ficam fora das Included Directories, fazendo o HTML continuar servindo arquivos do domínio original em vez do CDN.

## O que é CDN Rewrite que não funciona no Perfmatters?

O Perfmatters CDN Rewrite e a função que reescreve, no HTML da página, os enderecos dos arquivos estáticos (CSS, JavaScript, imagens e fontes) do domínio do site para a CDN URL configurada. Ele não cria nem hospeda um CDN: assume que você já tem uma zona de CDN apontando para o seu site (um pull zone do BunnyCDN, KeyCDN, Cloudflare ou similar) e apenas troca o prefixo das URLs em tempo de saida, em Perfmatters -> CDN. O recurso e desligado por padrão e so passa a reescrever depois de marcado e salvo.

Quando a configuração não casa, as URLs simplesmente não mudam: você inspeciona o código-fonte da página e os assets continuam saindo de https://seusite.com/wp-content/... em vez de https://cdn.seusite.com/wp-content/.... O Perfmatters reescreve por prefixo de caminho com base nas Included Directories (padrão wp-content e wp-includes) e respeita os Excluded Strings, entao arquivos fora desses diretorios, URLs já absolutas para outro host, ou caminhos casados por uma exclusão permanecem no domínio original.

## Como identificar

- No código-fonte da página (Ctrl+U), os assets continuam com a URL do domínio do site, como https://seusite.com/wp-content/uploads/imagem.jpg, em vez do prefixo do CDN.
- Na aba Network do navegador (F12 -> Network), os arquivos CSS, JS e imagens são baixados do seu domínio e não do host do CDN configurado.
- A opção Enable CDN Rewrite aparece marcada, mas nenhuma URL muda após limpar o cache do site e do navegador.
- Apenas parte dos assets aponta para o CDN: as imagens da pasta uploads mudam, mas scripts ou fontes de outras pastas seguem no domínio original.
- Ao abrir a CDN URL de um arquivo manualmente no navegador, o arquivo carrega, provando que a zona do CDN funciona e que o problema esta na reescrita do Perfmatters.

**Antes de começar:** Antes de mexer nas configurações de CDN ou adicionar código ao site, faça um backup completo dos arquivos e do banco de dados ou teste primeiro em um ambiente de staging, para reverter rápido caso algum asset deixe de carregar e a página quebre o layout.

## Como prevenir

- Sempre confirme a reescrita no código-fonte da página logo após ativar ou alterar o CDN Rewrite, em vez de assumir que a opção marcada já resolveu.
- Mantenha as Included Directories alinhadas com as pastas reais dos seus assets e revise o campo quando adicionar plugins que sirvam arquivos de pastas proprias.
- Use Excluded Strings apenas para caminhos especificos e documentados, evitando trechos genericos que possam bloquear assets que deveriam ir para o CDN.
- Padronize a limpeza do cache de página e do CDN como último passo de qualquer mudanca na configuração de CDN, para não servir HTML antigo com URLs do domínio.
- Evite rodar mais de um recurso de reescrita de CDN ao mesmo tempo (Perfmatters e outro plugin de cache), para não gerar conflito de substituicao de URLs.

Erros relacionados

- [Como corrigir a remoção de query strings no Perfmatters](https://full.services/wp-fixer/corrigir-query-strings-perfmatters/)
- [Como corrigir o erro de Lazy Load no Perfmatters](https://full.services/wp-fixer/corrigir-lazy-load-perfmatters/)
- [Como corrigir o erro de DNS Prefetch no Perfmatters](https://full.services/wp-fixer/corrigir-dns-prefetch-perfmatters/)

## Causa

- A opção Enable CDN Rewrite em Perfmatters -> CDN esta desmarcada ou as alterações não foram salvas, entao o plugin não reescreve nenhuma URL no HTML de saida.
- O campo CDN URL esta vazio, com erro de digitacao, sem https, ou com barra final sobrando, fazendo o Perfmatters não montar um prefixo valido para substituir o domínio do site.
- Os arquivos que você espera ver no CDN estão fora das Included Directories: o padrão reescreve apenas wp-content e wp-includes, entao assets servidos de outras pastas não são tocados.
- Um valor em Excluded Strings esta casando com os caminhos dos assets (por exemplo um nome de pasta ou extensão amplo demais), forçando o Perfmatters a deixar essas URLs no domínio original.
- Um plugin de cache de página serviu uma versão do HTML gerada antes de ativar o CDN Rewrite, devolvendo a página antiga com as URLs do domínio até o cache ser limpo.
- O tema ou outro plugin imprime URLs de assets já absolutas apontando para um host diferente do domínio do site, que o Perfmatters não reconhece como caminho local para reescrever.

## Como resolver

1. Ative o CDN Rewrite e confirme a CDN URL: Em Perfmatters, abra a aba CDN, marque a opção Enable CDN Rewrite e preencha o campo CDN URL com o endereco completo da sua zona de CDN, sem barra no final. Salve as alterações ao terminar, pois o recurso fica desligado por padrão e não reescreve nada sem ser salvo.

```
Painel WP -> Perfmatters -> aba CDN
Marque Enable CDN Rewrite
CDN URL: https://cdn.seusite.com
Clique em Save Changes
```

2. Valide as Included Directories: Ainda na aba CDN, confira o campo Included Directories. O padrão reescreve apenas wp-content e wp-includes. Se os assets que ficaram de fora vem de outra pasta, acrescente o nome dela separado por virgula para que o Perfmatters passe a reescrever esses caminhos também.

```
Painel WP -> Perfmatters -> aba CDN -> Included Directories
Padrão: wp-content,wp-includes
Adicione a pasta faltante separada por virgula, sem espacos extras
Clique em Save Changes
```

3. Revise os Excluded Strings: No campo Excluded Strings, remova qualquer valor amplo demais que esteja casando com os caminhos dos assets que deveriam ir para o CDN. Um trecho genérico como um nome de pasta comum ou uma extensão pode bloquear a reescrita de arquivos que você quer no CDN.

```
Painel WP -> Perfmatters -> aba CDN -> Excluded Strings
Remova trechos genericos que casam com os assets desejados
Mantenha apenas exclusoes especificas e necessarias
Clique em Save Changes
```

4. Limpe os caches e teste no código-fonte: Limpe o cache de página do seu plugin de cache e o cache do navegador, depois recarregue uma página e abra o código-fonte. As URLs dos assets nas Included Directories devem agora comecar pela CDN URL. Se ainda aparecerem no domínio, o HTML antigo ainda esta sendo servido de algum cache.

```
Limpe o cache do seu plugin de cache de página
Navegador: recarregue com Ctrl+F5 (hard refresh)
Abra o código-fonte com Ctrl+U e procure por wp-content
Confirme que a URL comeca por https://cdn.seusite.com/wp-content/
```

5. Teste a zona do CDN e isole conflitos: Abra direto no navegador a CDN URL de um arquivo que existe no site (por exemplo a CDN URL de um arquivo CSS do tema). Se o arquivo carregar, a zona esta correta e o problema e so a reescrita. Se não carregar, ajuste o pull zone no painel do seu provedor de CDN antes de seguir.

```
Abra no navegador: https://cdn.seusite.com/wp-content/themes/seu-tema/style.css
Se carregar: a zona esta ok, foque na reescrita do Perfmatters
Se der erro: revise o origin/pull zone no painel do provedor de CDN
Desative outros plugins de otimização temporariamente para descartar conflito de reescrita
```


## Código

```php
<?php
// Verifica no rodape se as URLs estao realmente apontando para o CDN.
// Use temporariamente para depurar a reescrita do Perfmatters CDN Rewrite.
add_action( 'wp_footer', 'full_debug_cdn_rewrite', 99 );
function full_debug_cdn_rewrite() {
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    $cdn_host = 'cdn.seusite.com'; // troque pelo host da sua CDN URL
    $sample   = includes_url( 'js/jquery/jquery.min.js' );
    $usa_cdn  = ( false !== strpos( $sample, $cdn_host ) ) ? 'SIM' : 'NAO';
    echo "<!-- CDN Rewrite ativo: {$usa_cdn} | exemplo: {$sample} -->";
}
```

## Perguntas frequentes

### Por que o Perfmatters CDN Rewrite não muda as URLs dos meus assets

Na maioria dos casos a opção Enable CDN Rewrite esta desmarcada, a CDN URL esta preenchida errada, ou os assets estão fora das Included Directories. Em Perfmatters -> CDN, ative o recurso, confira a CDN URL e ajuste as pastas incluidas, depois salve e limpe o cache.

### O Perfmatters cria um CDN para mim

Não. O Perfmatters apenas reescreve as URLs dos assets do domínio do site para a CDN URL que você informar. Você precisa ter uma zona de CDN já configurada no seu provedor, como BunnyCDN ou KeyCDN, com um pull zone apontando para o seu site antes de ativar a reescrita.

### Quais arquivos o Perfmatters reescreve para o CDN

Por padrão ele reescreve os assets dentro das pastas wp-content e wp-includes, definidas no campo Included Directories. Arquivos servidos de outras pastas so passam a ser reescritos depois que você adicionar essas pastas a lista separadas por virgula.

### Ativei o CDN Rewrite mas so parte dos assets foi para o CDN

Isso costuma indicar assets fora das Included Directories ou um valor em Excluded Strings casando com esses caminhos. Confira as pastas incluidas e remova exclusoes amplas demais, depois limpe o cache e cheque novamente o código-fonte da página.

### Como confirmo que o CDN Rewrite esta funcionando

Recarregue uma página com hard refresh e abra o código-fonte com Ctrl+U. As URLs dos assets nas pastas incluidas devem comecar pela sua CDN URL, e na aba Network do navegador os arquivos devem ser baixados do host do CDN, não do seu domínio.

### Preciso limpar o cache depois de configurar o CDN no Perfmatters

Sim. Um plugin de cache de página pode estar servindo o HTML gerado antes de ativar o CDN Rewrite, com as URLs do domínio. Limpe o cache de página e o cache do navegador após salvar as configurações para ver a reescrita aplicada.

### Por que a CDN URL carrega no navegador mas o site não usa o CDN

Se o arquivo abre direto pela CDN URL, a zona esta correta e o problema esta na reescrita do Perfmatters. Reveja se o CDN Rewrite esta ativo, se a CDN URL bate com o host que funcionou e se as pastas dos assets estão nas Included Directories.

**Fonte:** [Perfmatters Documentation](https://perfmatters.io/docs/)
