# Como corrigir o cache mobile do WP Rocket que não funciona no iOS no WordPress

O cache mobile do WP Rocket não funciona no iOS quando a opção Separate cache files for mobile devices está desativada, quando uma camada de cache acima do WP Rocket (Cloudflare, Varnish ou NGINX) entrega a versão desktop ao iPhone, ou quando o user agent do Safari iOS não é detectado como dispositivo móvel.

## O que é cache mobile do WP Rocket que não funciona no iOS?

O cache mobile do WP Rocket é a função que cria um conjunto separado de arquivos de cache para dispositivos móveis, de forma que qualquer conteúdo específico de celular seja armazenado e servido de maneira independente da versão desktop. Segundo a documentação oficial, esse recurso vem ativado por padrão ao ativar o WP Rocket e aplica o cache de página e as demais otimizações também ao acesso mobile. O WP Rocket grava esses arquivos como index-mobile.html_gzip (ou index-mobile-webp.html_gzip quando há WebP) dentro de wp-content/cache/wp-rocket/seudominio.com/.

Quando esse cache não funciona no iOS, o iPhone ou iPad passa a receber a versão desktop em cache, um layout quebrado ou conteúdo desatualizado no Safari móvel. A detecção do dispositivo é feita pelo HTTP user agent, com a lógica na biblioteca Mobile_Detect.php do WP Rocket. O problema aparece quando essa detecção não roda (porque uma camada de cache na frente responde antes), quando a opção de arquivos separados para mobile está desativada, ou quando outra camada como o Cloudflare APO não está configurada para variar o cache por tipo de dispositivo.

## Como identificar

- Ao abrir o site no Safari do iPhone ou iPad, aparece a versão desktop em cache em vez do layout mobile, mesmo com o WP Rocket ativo.
- O conteúdo no iOS fica desatualizado: uma alteração publicada já aparece no desktop, mas o Safari móvel continua mostrando a versão antiga.
- Não existe nenhum arquivo index-mobile.html_gzip (ou index-mobile-webp.html_gzip) dentro de wp-content/cache/wp-rocket/seudominio.com/, indicando que o cache mobile não está sendo gerado.
- O mesmo site abre corretamente em mobile no Chrome do Android, mas entrega layout desktop apenas no Safari do iOS.
- Com Cloudflare APO ativo, todos os dispositivos recebem a mesma resposta em cache e o iPhone nunca recebe a variação mobile.

**Antes de começar:** Antes de mexer em regras de Varnish, NGINX, Cloudflare APO ou de instalar o helper de tablets em produção, faça um backup completo do site (arquivos e banco de dados) ou teste primeiro em um ambiente de staging, para reverter caso a entrega de cache fique inconsistente entre dispositivos.

## Como prevenir

- Mantenha a opção Separate cache files for mobile devices sempre ativa no WP Rocket, já que ela vem habilitada por padrão e é o que garante a versão mobile no iOS.
- Sempre que adicionar uma camada de cache acima do WP Rocket (Cloudflare APO, Varnish, NGINX), configure-a desde o início para variar a resposta por tipo de dispositivo.
- Depois de qualquer mudança de layout ou de configuração de cache, valide o site real em um iPhone e não apenas no modo responsivo do navegador desktop.
- Documente quais helpers do WP Rocket estão ativos (por exemplo o de tablets como mobile) para que futuras manutenções não removam o comportamento esperado no iOS.

Erros relacionados

- [Como corrigir conflitos de cache entre WP Rocket e Elementor](https://full.services/wp-fixer/corrigir-conflito-cache-wp-rocket-elementor/)
- [Como corrigir erros de integração entre WP Rocket e Cloudflare](https://full.services/wp-fixer/corrigir-integracao-wp-rocket-cloudflare/)
- [Como corrigir o cache do WP Rocket em páginas dinâmicas do WooCommerce](https://full.services/wp-fixer/corrigir-cache-wp-rocket-woocommerce/)

## Causa

- A opção Separate cache files for mobile devices (Mobile Cache) está desativada no WP Rocket: sem ela, o plugin serve o mesmo cache para desktop e mobile e o iPhone recebe a versão desktop armazenada.
- Uma camada de cache na frente do WP Rocket (Cloudflare, Varnish ou NGINX) entrega a primeira resposta gravada sem distinguir o dispositivo, então o que foi cacheado primeiro em desktop é devolvido também ao Safari iOS.
- O Cloudflare APO está ativo sem a opção Cache by device type ligada, fazendo a CDN servir uma única resposta para todos os user agents e ignorar a variação mobile do WP Rocket.
- O user agent do Safari no iOS não está sendo reconhecido como dispositivo móvel pela detecção do WP Rocket porque um proxy ou camada intermediária altera ou remove o cabeçalho User-Agent antes de chegar ao PHP.
- O iPad está sendo tratado como desktop: por padrão o WP Rocket não considera tablets como mobile, então o iPad recebe o cache desktop a menos que o helper Set tablets as mobile esteja ativo.

## Como resolver

1. Ative o cache mobile no WP Rocket: Confirme que o cache mobile está ligado. Pela aba de ferramentas do WP Rocket é possível reativar o recurso caso ele tenha sido desligado, garantindo que o plugin volte a criar arquivos separados para dispositivos móveis.

```
Painel WP -> Configurações -> WP Rocket -> aba Cache
Marque a opção Separate cache files for mobile devices
Se estiver desligado, use Painel WP -> Configurações -> WP Rocket -> aba Tools -> Mobile Cache -> Enable Mobile Cache
Clique em Salvar alterações e limpe o cache
```

2. Limpe o cache e confirme a geração do arquivo mobile: Após ativar a opção, limpe todo o cache para forçar a regeração e acesse o site por um iPhone (ou simulando o user agent do iOS). Em seguida verifique se o arquivo de cache mobile passou a existir na pasta do domínio.

```
Painel WP -> menu superior -> WP Rocket -> Clear and preload cache
Acesse uma página pelo Safari do iPhone para gerar o cache mobile
Via FTP ou gerenciador de arquivos, abra wp-content/cache/wp-rocket/seudominio.com/
Confirme a presença de index-mobile.html_gzip (ou index-mobile-webp.html_gzip)
```

3. Configure a camada de cache acima do WP Rocket: Se você usa Cloudflare APO, Varnish ou cache de servidor NGINX, ele precisa variar a resposta por tipo de dispositivo; caso contrário, entrega a versão desktop ao iOS. No Cloudflare APO, habilite o cache por tipo de dispositivo; em Varnish ou NGINX, ajuste a regra para considerar o User-Agent ou desative a camada conflitante.

```
Cloudflare -> Speed -> Optimization -> Automatic Platform Optimization -> ative Cache by device type
Se usar Varnish/NGINX, ajuste a VCL/regra para variar por User-Agent ou desative o cache da camada
Limpe o cache da CDN e do servidor após o ajuste
```

4. Trate o iPad como mobile, se necessário: Por padrão o WP Rocket não considera tablets como dispositivos móveis, então o iPad recebe o cache desktop. Se você precisa servir a versão mobile também ao iPad, instale o helper oficial que define tablets como mobile.

```
Baixe o helper oficial WP Rocket | Set tablets as mobile
Painel WP -> Plugins -> Adicionar novo -> Enviar plugin -> instale e ative o helper
Limpe o cache do WP Rocket após ativar
```

5. Verifique a entrega do user agent ao PHP: Se mesmo assim o iOS recebe a versão desktop, confirme que o cabeçalho User-Agent do Safari móvel chega íntegro ao PHP. Um proxy reverso ou CDN pode estar removendo ou normalizando o User-Agent antes da detecção do WP Rocket. Use a verificação do código abaixo para inspecionar o que o servidor recebe.

```
Crie um endpoint de diagnóstico temporário com o código da seção abaixo
Acesse pelo Safari do iPhone e confira se o User-Agent contém iPhone ou iPad
Se o User-Agent vier vazio ou alterado, ajuste o proxy/CDN para repassar o cabeçalho original
```


## Código

```php
<?php
/**
 * Diagnóstico temporário: inspeciona o User-Agent recebido e se o WP Rocket
 * classifica o acesso atual como mobile. Acesse pelo Safari do iPhone e remova depois.
 * Coloque em um mu-plugin ou no functions.php do tema filho.
 */
add_action( 'wp_footer', 'full_debug_wp_rocket_mobile' );
function full_debug_wp_rocket_mobile() {
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    $ua        = isset( $_SERVER['HTTP_USER_AGENT'] ) ? sanitize_text_field( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ) : '(vazio)';
    $is_mobile = function_exists( 'wp_is_mobile' ) ? wp_is_mobile() : false;

    echo '<!-- FULL WP Rocket mobile debug -->';
    echo '<!-- User-Agent: ' . esc_html( $ua ) . ' -->';
    echo '<!-- wp_is_mobile: ' . ( $is_mobile ? 'sim' : 'nao' ) . ' -->';
}
```

## Perguntas frequentes

### Por que o WP Rocket entrega a versão desktop no meu iPhone

Geralmente porque a opção Separate cache files for mobile devices está desligada, ou porque uma camada de cache acima do WP Rocket (Cloudflare, Varnish ou NGINX) responde primeiro sem distinguir o dispositivo. Ative o cache mobile e configure a camada da frente para variar por tipo de dispositivo.

### O cache mobile do WP Rocket vem ativado por padrão

Sim. Segundo a documentação oficial, o Mobile Cache é ativado automaticamente ao ativar o WP Rocket e cria um conjunto separado de arquivos de cache para dispositivos móveis. Se foi desativado, é possível reativá-lo pela aba Tools, em Mobile Cache, com a opção Enable Mobile Cache.

### Como confirmo que o WP Rocket está gerando o cache mobile

Verifique a pasta wp-content/cache/wp-rocket/seudominio.com/ e procure pelo arquivo index-mobile.html_gzip, ou index-mobile-webp.html_gzip quando há WebP. A presença desse arquivo confirma que o cache mobile foi gerado para a página acessada.

### O Cloudflare interfere no cache mobile do WP Rocket no iOS

Pode interferir. Se você usa o Cloudflare APO, é preciso habilitar a opção de cache por tipo de dispositivo; sem isso a CDN serve uma única resposta para todos os user agents e o iPhone nunca recebe a variação mobile gerada pelo WP Rocket.

### Como o WP Rocket identifica que o acesso é de um celular

O WP Rocket detecta dispositivos móveis pelo HTTP user agent, usando a biblioteca Mobile_Detect.php. Se um proxy ou CDN remover ou alterar o cabeçalho User-Agent antes de chegar ao PHP, a detecção falha e o iOS pode receber a versão desktop.

### Meu iPad recebe a versão desktop, isso é normal

Sim, por padrão o WP Rocket não trata tablets como dispositivos móveis, então o iPad recebe o cache desktop. Para servir a versão mobile também ao iPad, instale o helper oficial WP Rocket | Set tablets as mobile e limpe o cache em seguida.

### Limpar o cache resolve o cache mobile que não funciona no iOS

Limpar o cache ajuda a regenerar os arquivos depois de ativar a opção mobile, mas não resolve sozinho se a causa estiver em uma camada acima do WP Rocket. Combine a limpeza com a ativação do cache mobile e o ajuste da CDN ou do cache de servidor.

**Fonte:** [WP Rocket — Mobile Caching (documentação oficial)](https://docs.wp-rocket.me/article/708-mobile-caching)
