Caching para SEO

Como o caching no navegador e no servidor com Cache-Control, ETags e CDNs melhora o desempenho e os Core Web Vitals, e as armadilhas de caching que afetam o rastreamento.

Publicado pela primeira vez: 2 de jul. de 2026 · Última atualização: 8 de ago. de 2026 · Avançado
Idiomas

O caching armazena uma cópia de uma página ou recurso — no navegador, na borda de uma CDN ou no próprio cache de um rastreador — para que ele não precise ser gerado ou baixado novamente. Não é um fator de ranqueamento direto, mas alimenta duas coisas que importam: velocidade da página e Core Web Vitals (por meio de TTFB e LCP) e eficiência de rastreamento. O rastreador do Google só considera ETag e Last-Modified (além de max-age como sugestão de novo rastreamento) — prefere ETag, e outras diretivas de cache HTTP não são compatíveis. Os erros de cache mais arriscados não são durações lentas; são configurações incorretas de CDN e caches desatualizados que bloqueiam ou induzem os bots ao erro.

TL;DR — O caching opera em três camadas importantes para SEO: navegador, edge da CDN e o cache de solicitações condicionais do próprio crawler. Não é um fator de ranqueamento, mas impulsiona a velocidade da página (TTFB/LCP e, via bfcache, os Core Web Vitals de navegações repetidas) e a eficiência de rastreamento. O crawler do Google prefere ETag a Last-Modified, lê max-age apenas como uma sugestão de novo rastreamento e — segundo a própria documentação — “other HTTP caching directives aren’t supported.” (tradução: outras diretivas de caching HTTP não são compatíveis.) As CDNs recebem uma permissão de taxa de rastreamento maior, mas somente depois que o cache aquece; os riscos reais são lançamentos com cache frio e configurações incorretas de CDN/WAF que bloqueiam bots diretamente.

Evidence for this claim Google's crawler documentation supports ETag/If-None-Match and Last-Modified/If-Modified-Since, prefers ETag when both are present, and says other HTTP caching directives are unsupported; Google's separate max-age advice is a recrawl-timing hint, not proof it follows browser cache semantics. Scope: Google crawling Confidence: high · Verified: Crawling December: HTTP caching Evidence for this claim HTTP caching uses Cache-Control and validators to control reuse and revalidation. Scope: Current official or standards documentation. Confidence: high · Verified: MDN: HTTP caching Evidence for this claim Browser caches can reuse stored responses according to HTTP caching semantics. Scope: Current official or standards documentation. Confidence: high · Verified: MDN: HTTP caching

As três camadas do caching

Caching para SEO não é uma coisa só — são três camadas, cada uma controlada de uma forma um pouco diferente:

  1. Cache do navegador — o dispositivo do visitante armazena arquivos para que visualizações repetidas pulem a rede. É disso que o PageSpeed Insights reclama com “Serve static assets with an efficient cache policy” (sirva recursos estáticos com uma política de cache eficiente).
  2. Cache da CDN / edge — uma rede de distribuição de conteúdo armazena cópias em nós de edge no mundo todo (veja o aprofundamento sobre CDN e SEO para o tratamento completo). A descrição do próprio Google: as CDNs são intermediárias entre sua origem e o usuário, e historicamente seu maior foco é o caching — armazenar o conteúdo de uma URL para que seu servidor não precise servir aquele arquivo novamente por algum tempo.
  3. Cache no lado do crawler — Googlebot e Bingbot mantêm seu próprio registro sobre se o conteúdo mudou, usando solicitações condicionais. Essa é a alavanca do orçamento de rastreamento, e a mecânica pertence ao aprofundamento sobre solicitações condicionais; aqui vou mantê-la em nível de resumo.

“Cache do navegador” acima é uma abreviação para mais de um mecanismo. Conforme o guia de caching HTTP da MDN, vale separar: o cache HTTP privado (por navegador, indexado pela solicitação e, nos navegadores modernos, particionado pelo site de nível superior para limitar o rastreamento entre sites), o cache em memória usado na sessão atual, o bfcache abordado abaixo e — separadamente — o Cache Storage de um service worker, controlado pelo próprio JavaScript do site e não governado diretamente pelos cabeçalhos Cache-Control. “Verificar o cache do navegador” pode significar quatro etapas de depuração diferentes, dependendo de qual deles está realmente se comportando mal.

Como o caching alimenta os Core Web Vitals

Buscar recursos pela rede é lento e caro. O caching remove a latência da rede e o custo de transferência de tudo o que não mudou. Isso entra diretamente em duas medidas próximas dos vitals: TTFB (uma resposta em cache pula a regeneração na origem) e LCP (imagens, CSS e fontes em cache são renderizados mais cedo).

Cache-Control, nas diretivas que importam

Cache-Control é o cabeçalho principal. Estas são as diretivas que vale conhecer:

  • max-age=<seconds> — por quanto tempo uma cópia fresca é válida. Para recursos imutáveis e versionados, a documentação do Chrome Lighthouse recomenda caching por um ano ou mais — por exemplo, Cache-Control: max-age=31536000.
  • no-cachenão significa “não faça cache”. Significa “armazene, mas faça uma nova validação com o servidor antes de reutilizar”. Ainda permite o fluxo leve de 304.
  • no-store — a única que realmente significa não armazenar cópia alguma em nenhum cache HTTP. É uma diretiva de caching, não um controle geral de privacidade — conforme a RFC 9111, não é uma forma confiável de apagar o histórico do navegador e não diz nada sobre o Cache Storage próprio de um service worker.
  • public / private — se caches compartilhados (como uma CDN) podem armazenar a resposta ou somente o navegador do usuário final.
  • immutable — pula a revalidação enquanto a resposta ainda estiver fresca. Não significa “nunca fica obsoleta” — quando o max-age acaba, as regras normais de frescor voltam a valer.
  • must-revalidate — a outra ponta da linha do tempo: só importa depois que uma resposta fica obsoleta e informa ao cache que ele precisa revalidar com a origem, em vez de servir a cópia obsoleta mesmo assim.
  • s-maxage, stale-while-revalidate, stale-if-error — controles mais detalhados, principalmente para CDNs e outros caches compartilhados (um período de frescor separado para caches compartilhados, reutilização limitada de conteúdo obsoleto enquanto uma busca em segundo plano roda e reutilização limitada de conteúdo obsoleto quando há um erro na origem, respectivamente). O suporte varia por navegador/CDN, portanto verifique o suporte atual antes de depender deles — e nenhuma dessas diretivas extras é considerada pelo crawler do Google, como veremos.

Cache-busting com nomes de arquivo versionados

O truque que permite fazer caching agressivo e atualizar instantaneamente: coloque um hash de conteúdo no nome do arquivo — style.x234dff.css. Como a URL é a chave do cache, mudar o arquivo muda a URL, então os caches buscam a nova versão imediatamente enquanto as versões antigas permanecem em cache pelo tempo que você quiser. Tanto o guia de cache HTTP do web.dev quanto o texto da própria equipe de engenharia de front-end do Bing descrevem o mesmo padrão — o Bing transforma o conteúdo dos arquivos em hash dentro da URL para que “the URL acts as the cache key,” (tradução) «a URL funcione como a chave do cache», mantendo os caches consistentes e permitindo tempos de expiração longos.

A armadilha do bfcache — quando no-store prejudica silenciosamente os CWV

Aqui está um ponto pouco abordado. O back/forward cache (bfcache) é o que faz pressionar “voltar” restaurar uma página instantaneamente. Uma restauração do bfcache pula completamente a medição de LCP/CLS/INP, então é uma vantagem pura para seus dados de campo do CrUX. Mas, conforme o guia de bfcache do Google, definir Cache-Control: no-store no próprio documento da página historicamente fez os navegadores se recusarem a armazenar essa página no bfcache. Se você precisa de frescor em um documento HTML, mas não quer abrir mão da elegibilidade para o cache de voltar/avançar, use no-cache ou max-age=0 em vez de no-store.

Como um cache decide se algo está “fresco o suficiente”

Antes de qualquer validador entrar em ação, um cache verifica o frescor: a idade da resposta armazenada já passou do período de frescor que o Cache-Control forneceu (ou, na ausência de um período explícito, de um período heurístico que o cache pode estimar)? O cabeçalho de resposta Age informa há quanto tempo um cache compartilhado já mantém uma resposta, permitindo saber — no DevTools ou em um log da CDN — quanto tempo de frescor ainda resta. Se estiver fresca, o cache pode reutilizá-la imediatamente, sem solicitação alguma. Se estiver obsoleta, ele deve validá-la antes de reutilizar, que é exatamente onde ETag/If-None-Match e Last-Modified/If-Modified-Since são úteis — descritos a seguir, para a versão mais restrita do Googlebot desse mecanismo HTTP geral.

Como o Googlebot usa caching (o ângulo da eficiência de rastreamento)

O Google fez um pedido excepcionalmente direto em sua publicação de dezembro de 2024, Crawling December: HTTP caching: habilite o caching para que seus crawlers possam pular o download novamente de páginas que não mudaram. O dado marcante da publicação é que as buscas que podem usar cache vêm diminuindocerca de 0,026% do total de buscas podiam usar cache há 10 anos, e hoje esse número é 0,017%. Números pequenos, mas o Google claramente quer que caminhem na direção oposta.

ETag versus Last-Modified — qual o Google prefere

A infraestrutura de rastreamento do Google dá suporte aos dois validadores padrão: ETag (com If-None-Match) e Last-Modified (com If-Modified-Since). O Google recomenda fortemente o ETag porque seu valor não é estruturado e, portanto, é menos propenso aos erros de análise que uma string de data convida — e, se ambos estiverem presentes, seus crawlers usam o valor ETag como exige o padrão HTTP. Mesmo assim, o Google sugere definir os dois, já que outros aplicativos, como CMSs os utilizam. Se você usar Last-Modified, a data precisa seguir o formato HTTP (por exemplo, Fri, 4 Sep 1998 19:15:56 GMT) ou não será analisada.

Quando o validador armazenado pelo crawler ainda corresponde, seu servidor retorna 304 Not Modified sem corpo — esse é o objetivo. Como o Google explica, a ausência de corpo significa que seu servidor não gasta computação gerando conteúdo nem largura de banda transferindo-o. (Essa mecânica de 304 é o mecanismo de orçamento de rastreamento explicado em profundidade no artigo sobre solicitações condicionais; aqui basta saber que ela economiza dinheiro dos dois lados.)

A nuance que quase todo mundo deixa passar

O crawler do Google não age sobre o conjunto completo de diretivas Cache-Control da mesma forma que um navegador ou uma CDN. Conforme a visão geral oficial dos crawlers, além de ETag/Last-Modified, “other HTTP caching directives aren’t supported.” (tradução: outras diretivas de caching HTTP não são compatíveis.) A única exceção parcial: o Google diz que você pode definir opcionalmente max-age para ajudar os crawlers a determinar quando rastrear novamente uma URL — uma sugestão de novo rastreamento, não um bloqueio rígido. Portanto, no-cache, s-maxage, stale-while-revalidate e semelhantes continuam moldando o comportamento do navegador e da CDN, mas não mudam como o Googlebot faz caching. E o conselho do Google sobre quando invalidar é sensato: exija uma atualização do cache em mudanças significativas — atualizar apenas a data de copyright no rodapé não é significativo.

CDNs e rastreamento

Uma CDN oferece mais do que velocidade. A infraestrutura de rastreamento do Google é projetada para permitir taxas de rastreamento maiores em sites apoiados por uma CDN, inferidas a partir do endereço IP que serve as URLs — ela presume que uma origem apoiada por CDN consegue lidar com mais solicitações simultâneas.

Mas há uma ressalva que vale planejar: o cache frio. No primeiro acesso a uma URL, o cache da CDN está “frio” — ninguém a solicitou ainda, então sua origem precisa servi-la pelo menos uma vez para aquecer o cache. O Google alerta que lançar muitas URLs de uma vez é, por isso, um peso real sobre o orçamento de rastreamento, com uma taxa de rastreamento alta durante alguns dias. Se você estiver fazendo um grande lançamento ou uma migração de site, reserve capacidade para que a origem assuma toda a carga por URL antes que a CDN comece a ajudar.

Configuração incorreta da CDN é um risco de rastreamento

Os problemas mais assustadores relacionados ao caching não são durações lentas de cache — são configurações de CDN e WAF que bloqueiam bots. A publicação do Google sobre CDNs é explícita: para bloqueios temporários, enviar 503/429 é a forma preferida de sinalizar o problema, enquanto timeouts de rede são tratados como erros terminais e “hard”, que podem fazer URLs serem removidas do índice. O caso sutil é um bloqueio suave: um intersticial de verificação de bot. O crawler vê apenas a página do desafio, não o seu site — por isso o Google recomenda fortemente retornar 503 para clientes automatizados. A forma mais fácil de verificar se uma CDN não está bloqueando o Google silenciosamente é usar a ferramenta de inspeção de URL no Search Console — observe a imagem renderizada; se ela mostrar um desafio de bot ou uma página vazia, fale com sua CDN.

Descarregar redirecionamentos para a CDN é uma técnica de que gosto. No podcast Marketing Speak, descrevi-a assim: “One of my personal favorites that I don’t think it’s used enough, it’s actually just off loading your redirects to the CDN level.” (tradução) «uma das minhas técnicas favoritas, que na minha opinião não é usada o suficiente, é simplesmente descarregar seus redirecionamentos no nível da CDN». (Ir para a citação)

Armadilhas de caching que prejudicam o rastreamento e a indexação

Este é o ângulo que a maioria dos artigos sobre “caching para SEO” ignora. Um cache não apenas torna as coisas rápidas — um cache errado pode servir bytes errados para um bot e quebrar o rastreamento ou a indexação.

Um caso real: um cache compartilhado servindo um robots.txt bloqueador. Investiguei um caso de bloqueio intermitente do Googlebot que apontava para um cache compartilhado de CDN entre um ambiente de teste e o site em produção. Como escrevi em Indexed, though blocked by robots.txt: “One possible cause would be a shared cache between a test environment and a live environment. When the cache from the test environment is active, the robots.txt file may include a blocking directive.” (tradução) «uma possível causa seria um cache compartilhado entre um ambiente de teste e um ambiente de produção. Quando o cache do ambiente de teste está ativo, o arquivo robots.txt pode incluir uma diretiva de bloqueio». A correção foi separar o cache — ou excluir arquivos .txt do cache no ambiente de teste. Uma configuração incorreta de caching causou diretamente uma falha de rastreamento; essa é a categoria de risco que realmente dói.

Outras armadilhas da mesma família:

  • Cache antigo da CDN servindo conteúdo desatualizado aos bots. Se o cache de edge mantiver uma versão antiga muito tempo depois de você publicar uma mudança, os bots continuarão vendo a antiga. Faça a limpeza na publicação ou vincule a duração do cache à frequência real de mudança da página.
  • Fragmentação de cache por Vary / User-Agent. A chave de um cache compartilhado normalmente é apenas a URL; Vary adiciona cabeçalhos de solicitação (como User-Agent ou Accept-Language) a essa chave para que variantes diferentes sejam armazenadas separadamente. Se você esquecer um cabeçalho que realmente muda a resposta, um solicitante pode receber a variante de outro — a mistura entre mobile/desktop ou bot/humano. Adicione cabeçalhos demais a Vary e você fragmenta o cache em tantas chaves quase duplicadas que a taxa de acerto mal melhora. Separadamente, os navegadores modernos também particionam seus próprios caches pelo site de nível superior por motivos de privacidade, então um recurso armazenado em cache enquanto incorporado em um site geralmente não é reutilizado quando incorporado em outro — um mecanismo diferente de Vary, que vale não confundir ao depurar um relatório de “por que isso não está em cache”.

Minha regra geral sobre duração vem do trabalho com LCP: como escrevi no meu guia da Ahrefs sobre Largest Contentful Paint, “Your cache time should be as long as you are comfortable with” (tradução) «seu tempo de cache deve ser tão longo quanto você se sentir confortável». Ir para a citação — e “An ideal setup is to cache for a really long period of time but purge the cache when you make a change to a page.” (tradução) «uma configuração ideal é manter o cache por um período realmente longo, mas limpá-lo quando você mudar uma página». Cache longo, limpeza instantânea. Essa combinação mantém você rápido e atualizado.

Caching é um fator de ranqueamento?

Não — não diretamente. Não há um sinal de ranqueamento por definir ETags ou por ter uma boa política de Cache-Control. O que o caching faz é alimentar duas coisas que importam para a visibilidade: velocidade da página / Core Web Vitals (um componente explícito da experiência da página) e eficiência de rastreamento (que determina a rapidez com que conteúdo novo e atualizado é descoberto e atualizado, tocando indiretamente resultados sensíveis a frescor). Configure-o porque deixa seu site rápido e fácil de rastrear — não porque você espera um aumento direto no ranqueamento.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.