Lunes, 9 de diciembre de 2024
Permítenos usar la caché.
A medida que Internet creció a lo largo de los años, también lo hizo la cantidad de contenido que rastrea Google. Si bien la infraestructura de rastreo de Google admite mecanismos de almacenamiento en caché heurísticos, de hecho, siempre lo hizo, la cantidad de solicitudes que se pueden mostrar desde las cachés locales disminuyó: hace 10 años, alrededor del 0.026% del total de recuperaciones se podía almacenar en caché, lo que ya no es tan impresionante; hoy esa cifra es del 0.017%.
¿Por qué es importante el almacenamiento en caché?
La caché es una pieza fundamental del gran rompecabezas que es Internet. La caché permite que las páginas se carguen con la rapidez del rayo en las visitas repetidas, ahorra recursos de procesamiento y, por lo tanto, también recursos naturales, y ahorra una gran cantidad de ancho de banda costoso para los clientes y los servidores.
En especial, si tienes un sitio grande con contenido que rara vez cambia en URLs individuales, permitir el almacenamiento en caché de forma local puede ayudar a que tu sitio se rastree de manera más eficiente. La infraestructura de rastreo de Google
admite el almacenamiento en caché HTTP heurístico como se define en el
estándar de almacenamiento en caché HTTP,
específicamente a través del encabezado de respuesta ETag
y el encabezado de solicitud
If-None-Match
, y el encabezado de respuesta Last-Modified
y el encabezado de la solicitud
If-Modified-Since
.
Te recomendamos que uses ETag
porque es menos propenso a errores (el valor no está estructurado a diferencia del valor Last-Modified
). Y, si tienes la opción, set ambos: Internet te lo agradecerá. Tal vez.
En cuanto a lo que consideras un cambio que requiere que los clientes actualicen sus cachés, depende de ti. Te recomendamos que solicites una actualización de la caché cuando realices cambios significativos en tu contenido. Si solo actualizaste la fecha de derechos de autor en la parte inferior de la página, es probable que no sea significativo.
ETag
y If-None-Match
Los rastreadores de Google admiten solicitudes condicionales basadas en ETag
exactamente como se define en el estándar de almacenamiento en caché de HTTP.
Es decir, para indicar la preferencia de almacenamiento en caché a los rastreadores de Google, establece el valor de Etag
en cualquier cadena ASCII arbitraria (por lo general, un hash del contenido o el número de versión, pero también podría ser una parte de π, depende de ti) única para la representación del contenido alojado por la URL a la que se accedió.
Por ejemplo, si alojas diferentes versiones del mismo contenido en la misma URL (por ejemplo, una versión para dispositivos móviles y otra para computadoras), cada versión podría tener su propio valor ETag
único.
Los rastreadores de Google que admiten el almacenamiento en caché enviarán el valor ETag
que se muestra para un rastreo anterior de esa URL en If-None-Match header
. Si el valor de ETag
que envió el rastreador coincide con el valor actual que generó el servidor, este debería mostrar un código de estado HTTP 304
(Sin modificar) sin cuerpo HTTP. Este último fragmento, sin cuerpo HTTP, es la parte importante por dos razones:
- tu servidor no tiene que gastar recursos de procesamiento para generar contenido; es decir, ahorras dinero
- tu servidor no tiene que transferir el cuerpo HTTP, es decir, ahorras dinero
En el lado del cliente, como el navegador de un usuario o Googlebot, el contenido de esa URL se recupera de la caché interna del cliente. Como no hay transferencia de datos, esto sucede con la rapidez del rayo, lo que complace a los usuarios y, posiblemente, también les ahorra algunos recursos.
Last-Modified
y If-Modified-Since
Al igual que ETag
, los rastreadores de Google también admiten solicitudes condicionales Last-Modified based
, exactamente como se define en el estándar de almacenamiento en caché HTTP. Esto funciona de la misma manera que ETag
desde una perspectiva semántica (se usa un identificador para decidir si el recurso se puede almacenar en caché) y proporciona los mismos beneficios que ETag
del lado de los clientes.
Tenemos algunas recomendaciones si usas Last-Modified
como directiva de almacenamiento en caché:
-
La fecha en el encabezado
Last-Modified
debe tener el formato según el estándar HTTP. Para evitar problemas de análisis, te recomendamos que uses el siguiente formato de fecha: "Día de la semana, zona horaria DD Mon YYYY HH:MM:SS". Por ejemplo: "Fri, 4 Sep 1998 19:15:56 GMT". -
Si bien no es obligatorio, considera configurar también el campo
max-age
del encabezadoCache-Control
para ayudar a los rastreadores a determinar cuándo volver a rastrear la URL específica. Establece el valor del campomax-age
en la cantidad esperada de segundos que el contenido no cambiará. Por ejemplo:Cache-Control: max-age=94043
.
Ejemplos
Si eres como yo, es difícil comprender cómo funciona la caché heurística. Sin embargo, mostrar un ejemplo de la cadena de solicitudes y respuestas parece ayudarme. Estas son dos cadenas, una para ETag
/If-None-Match
y otra para Last-Modified
/If-Modified-Since
, para visualizar cómo se supone que funciona:
ETag /If-None-Match |
Last-Modified /If-Modified-Since |
|
---|---|---|
La respuesta de un servidor a un rastreo: Esta es la respuesta a partir de la cual un rastreador puede guardar los campos de encabezado de precondición ETag y 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 ... |
Solicitud condicional del rastreador posterior: La solicitud condicional se basa en los valores del encabezado de condición previa guardados de una solicitud anterior. Los valores se vuelven a enviar al servidor para su validación en los encabezados de la solicitud If-None-Match y 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 ... |
Respuesta del servidor a la solicitud condicional: Como los valores de encabezado de condición previa que envía el rastreador se validan del lado del servidor, este muestra un código de estado HTTP 304 (sin un cuerpo HTTP) al rastreador. Esto ocurrirá con cada solicitud posterior hasta que las condiciones previas no se validen (la fecha de ETag o Last-Modified cambie del lado del 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 ... |
Si tu objetivo es satisfacer a los usuarios y, además, quieres ahorrar un poco en la factura de hosting, habla con tu proveedor de hosting o CMS, o con tus desarrolladores, sobre cómo habilitar el almacenamiento en caché HTTP para tu sitio. Al menos, tus usuarios te querrán un poco más.
Si quieres chatear sobre el almacenamiento en caché, visita la Comunidad de ayuda de la Central de la Búsqueda más cercana. Si tienes comentarios sobre cómo almacenamos en caché, deja comentarios en la documentación sobre el almacenamiento en caché que publicamos junto con esta entrada de blog.