Rastreamento em dezembro: armazenamento em cache HTTP

Segunda-feira, 9 de dezembro de 2024

Por favor, permita que armazenemos em cache.

Com o crescimento da Internet ao longo dos anos, o Google também aumentou a quantidade de rastreamentos. Embora a infraestrutura de rastreamento do Google ofereça suporte a mecanismos de armazenamento em cache heurísticos, o número de solicitações que podem ser retornadas de caches locais diminuiu: há 10 anos, cerca de 0,026% do total de buscas eram armazenadas em cache, o que já não é tão impressionante. Hoje, esse número é de 0,017%.

Por que o armazenamento em cache é importante?

O armazenamento em cache é uma peça fundamental do grande quebra-cabeça que é a Internet. O armazenamento em cache permite que as páginas sejam carregadas rapidamente em novos acessos, economiza recursos de computação, e portanto, recursos naturais, e economiza uma quantidade enorme de largura de banda cara para clientes e servidores.

Permitir o armazenamento em cache local pode ajudar a melhorar o rastreamento do seu site, especialmente se ele for grande e tiver conteúdo que raramente muda em URLs individuais. A infraestrutura de rastreamento do Google oferece suporte ao armazenamento em cache HTTP heurístico conforme definido pelo padrão de armazenamento em cache HTTP, especificamente pelo cabeçalho de solicitação ETag e If-None-Match e pelo cabeçalho de solicitação Last-Modified e If-Modified-Since.

Recomendamos o uso de ETag porque ele é menos propenso a erros. O valor não é estruturado, ao contrário do valor Last-Modified. E, se você tiver a opção, defina os dois: a Internet vai agradecer. Talvez.

O que você considera uma mudança que exige que os clientes atualizem os caches é uma decisão sua. Recomendamos que você exija uma atualização de cache quando houver mudanças significativas no conteúdo. Se você tiver atualizado apenas a data de direitos autorais na parte de baixo da página, provavelmente não será significativo.

ETag e If-None-Match

Os rastreadores do Google oferecem suporte a solicitações condicionais baseadas em ETag exatamente como definido no padrão de armazenamento em cache HTTP. Ou seja, para indicar a preferência de armazenamento em cache aos rastreadores do Google, defina o valor Etag como qualquer string ASCII arbitrária (geralmente um hash do conteúdo ou número da versão, mas também pode ser um fragmento do π, você decide) exclusiva para a representação do conteúdo hospedado pelo URL acessado. Por exemplo, se você hospedar diferentes versões do mesmo conteúdo no mesmo URL (por exemplo, versão para dispositivos móveis e para computador), cada versão poderá ter seu próprio valor ETag exclusivo.

Os rastreadores do Google que oferecem suporte a armazenamento em cache enviam o valor ETag retornado para um rastreamento anterior desse URL no If-None-Match header. Se o valor ETag enviado pelo rastreador corresponder ao valor atual gerado pelo servidor, o servidor vai retornar um código de status HTTP 304 (não modificado) sem corpo HTTP. Essa última parte, sem corpo HTTP, é importante por alguns motivos:

  • Seu servidor não precisa gastar recursos de computação para gerar conteúdo. Ou seja, você economiza dinheiro.
  • Seu servidor não precisa transferir o corpo HTTP, ou seja, você economiza dinheiro.

No lado do cliente, como o navegador de um usuário ou o Googlebot, o conteúdo desse URL é recuperado do cache interno do cliente. Como não há transferência de dados envolvida, isso acontece muito rápido, deixando os usuários felizes e potencialmente economizando alguns recursos para eles.

Last-Modified e If-Modified-Since

Assim como ETag, os rastreadores do Google também oferecem suporte a solicitações condicionais Last-Modified based, exatamente como definido no padrão de armazenamento em cache HTTP. Isso funciona da mesma maneira que ETag de uma perspectiva semântica: um identificador é usado para decidir se o recurso pode ser armazenado em cache e oferece os mesmos benefícios que ETag no lado do cliente.

Temos algumas recomendações se você está usando Last-Modified como uma diretiva de armazenamento em cache:

  1. A data no cabeçalho Last-Modified precisa estar formatada de acordo com o padrão HTTP. Para evitar problemas de análise, recomendamos usar o seguinte formato de data: "Dia da semana, DD Mon YYYY HH:MM:SS fuso horário". Por exemplo, "Fri, 4 Sep 1998 19:15:56 GMT".
  2. Embora não seja obrigatório, considere também definir o campo max-age do cabeçalho Cache-Control para ajudar os rastreadores a determinar quando rastrear novamente o URL específico. Defina o valor do campo max-age como o número esperado de segundos em que o conteúdo não será alterado. Por exemplo, Cache-Control: max-age=94043.

Exemplos

Se você for como eu, entender como o armazenamento em cache heurístico funciona é um desafio. No entanto, ver um exemplo da cadeia de solicitações e respostas parece me ajudar. Confira duas cadeias, uma para ETag/If-None-Match e outra para Last-Modified/If-Modified-Since, para visualizar como deve funcionar:

ETag/If-None-Match Last-Modified/If-Modified-Since
Resposta de um servidor a um rastreamento: é a resposta em que um rastreador pode salvar os campos de cabeçalho de condição prévia ETag e Last-Modified.
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Fri, 4 Sep 1998 19:15:50 GMT
ETag: "34aa387-d-1568eb00"
...
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Fri, 4 Sep 1998 19:15:50 GMT
Last-Modified: Fri, 4 Sep 1998 19:15:56 GMT
Cache-Control: max-age=94043
...
Solicitação condicional do rastreador subsequente: a solicitação condicional é baseada nos valores do cabeçalho de condição prévia salvos de uma solicitação anterior. Os valores são enviados de volta ao servidor para validação nos cabeçalhos de solicitação If-None-Match e If-Modified-Since.
GET /hello.world HTTP/1.1
Host: www.example.com
Accept-Language: en, hu
User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html)
If-None-Match: "34aa387-d-1568eb00"
...
GET /hello.world HTTP/1.1
Host: www.example.com
Accept-Language: en, hu
User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html)
If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT
...
Resposta do servidor à solicitação condicional: como os valores do cabeçalho de condição prévia enviados pelo rastreador são validados no servidor, o servidor retorna um código de status HTTP 304 (sem um corpo HTTP) para o rastreador. Isso vai acontecer em todas as solicitações subsequentes até que as condições prévias falhem na validação (a data de ETag ou Last-Modified muda do lado do servidor).
HTTP/1.1 304 Not Modified
Date: Fri, 4 Sep 1998 19:15:50 GMT
Expires: Fri, 4 Sep 1998 19:15:52 GMT
Vary: Accept-Encoding
If-None-Match: "34aa387-d-1568eb00"
...
HTTP/1.1 304 Not Modified
Date: Fri, 4 Sep 1998 19:15:50 GMT
Expires: Fri, 4 Sep 1998 19:15:51 GMT
Vary: Accept-Encoding
If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT
...

Se você quer deixar seus usuários felizes e talvez também economizar um pouco de dinheiro na conta de hospedagem, converse com seu provedor de hospedagem ou CMS ou com seus desenvolvedores sobre como ativar o armazenamento em cache HTTP para seu site. No mínimo, seus usuários vão gostar um pouco mais de você.

Se você quiser conversar sobre o armazenamento em cache, acesse a Comunidade de Ajuda da Central da Pesquisa mais próxima. Se você tiver comentários sobre como estamos armazenando em cache, deixe seu feedback na documentação sobre armazenamento em cache publicada com esta postagem do blog.


Quer saber mais sobre o rastreamento? Confira toda a série Crawling December: