Loja em Adobe Commerce Cloud, Fastly na frente, e o TTFB é o mesmo de antes. O time olha o New Relic e vê todo request batendo no PHP. A primeira suspeita costuma ser bloco não cacheável, mas em loja recém-configurada quase sempre é mais simples: a VCL nunca foi enviada.
A documentação da Adobe é direta: "Fastly caching services do not work until you complete the initial upload of the Fastly VCL code". O módulo instalado e as credenciais salvas não bastam.
Os três passos que ligam o cache
Tudo mora em Stores > Settings > Configuration > Advanced > System. Em ordem:
- Em Full Page Cache, desmarque Use system value e escolha Fastly CDN em Caching Application. Por baixo isso grava
system/full_page_cache/caching_applicationcom o valor42, que é a constanteConfig::FASTLYdo módulo. - Abra Fastly Configuration, preencha Fastly Service ID e API token e clique em Test credentials. Em Cloud, use as credenciais que a Adobe fornece para o projeto, não um token que você gerou na sua conta Fastly.
- Salve, limpe o cache e clique em Upload VCL to Fastly.
O passo 3 é o que quase todo mundo pula. Ele copia os snippets de VCL do módulo para o seu serviço na Fastly. Sem eles, a Fastly se comporta como um proxy burro: entrega, mas não guarda.
Vale repetir o upload sempre que você atualizar o módulo Fastly. A VCL vem versionada junto com o pacote, e um snippet velho no edge com módulo novo no Magento dá comportamento estranho e difícil de rastrear.
Prove com curl em vez de achar
Os headers de diagnóstico da Fastly só aparecem quando você manda o Fastly-Debug. Sem ele, a própria VCL remove os headers antes de entregar para o navegador — é por isso que olhar no DevTools não mostra nada:
curl -sS -o /dev/null -D - -H "Fastly-Debug: 1" https://sualoja.com.br/ \
| grep -iE "^(fastly|x-cache|age)"Rode duas vezes seguidas na mesma URL. A leitura:
| Header | O que ele diz |
|---|---|
Fastly-Module-Enabled | faltou? o Caching Application não está em Fastly CDN |
Fastly-Magento-VCL-Uploaded | faltou? você não subiu a VCL |
fastly-page-cacheable | veio NO? tem bloco com cacheable="false" na página |
X-Cache | deve sair MISS na primeira chamada e HIT na segunda |
Os dois primeiros vêm preenchidos com a versão do módulo. Se todos estiverem lá e o X-Cache insistir em MISS, o problema mudou de lugar.
Não procure o X-Magento-Tags nessa resposta: a VCL apaga esse header de propósito antes de entregar ao cliente. Para conferir se a origem está mandando as tags, bata direto no servidor de origem, sem passar pela Fastly.
VCL no lugar e ainda assim MISS
Com a VCL subida, os motivos que a Adobe lista para a Fastly não guardar a resposta são poucos e concretos:
- A página devolve
Set-Cookie. Por padrão a Fastly não cacheia resposta com cookie novo. Um módulo que cria cookie no layout de home ou de categoria mata o cache da loja inteira. - Bloco marcado como não cacheável. É o
fastly-page-cacheable: NOda tabela acima, e resolve do mesmo jeito que no Varnish. - Módulo de terceiro apagando os headers do Magento na origem. Sem
X-Magento-Tagssaindo do PHP, a Fastly não tem como invalidar depois, e trata a resposta como não cacheável.
Um detalhe que confunde: com Fastly-Debug ligado ou não, o navegador do cliente recebe Cache-Control: no-store, no-cache nas páginas do Magento. Isso é de propósito — quem guarda é o edge, não o browser. Não use esse header como sinal de que a Fastly não está cacheando.
Se o cache passou a valer e a loja continua lenta, aí o problema não era CDN. Vale seguir pelo guia de performance e Core Web Vitals, porque CDN não conserta LCP de imagem gigante nem JS travando a renderização.
Perguntas rápidas
Preciso subir a VCL de novo depois de todo deploy?
Não. O upload é por serviço na Fastly, não por deploy do código. Refaça quando você atualizar a versão do módulo Fastly ou quando trocar de serviço Fastly.
Posso usar meu próprio token da Fastly em vez do que a Adobe forneceu?
Em Adobe Commerce Cloud a Adobe recomenda usar as credenciais que ela fornece para o projeto. Um token gerado por você costuma não ter permissão no serviço certo, e o Test credentials falha sem explicar direito o motivo.
O checkout e o carrinho continuam dando MISS. Está errado?
Não. Página de carrinho, checkout, conta do cliente e admin nunca devem ser cacheadas. O que precisa dar HIT é home, categoria, produto e CMS.
Pra conferir na fonte
- Set up Fastly services — Adobe Experience League
- Fastly troubleshooting — Adobe Experience League
- Fastly CDN module for Magento 2 — GitHub