Caché del navegador, del servidor y CDN: cómo hacer que se ayuden
En pocas palabras
Una visita puede resolverse en tres lugares antes de llegar a tu código: el navegador reutiliza lo que ya descargó, un CDN entrega copias desde un nodo cercano y el servidor guarda páginas ya armadas, consultas y PHP compilado. Cada capa ahorra algo distinto y se controla distinto: la del navegador y la del CDN, con encabezados HTTP como Cache-Control; la del servidor, con la configuración del sitio. Bien combinadas, una página repetida no toca la base de datos. Mal combinadas, cada una guarda una versión distinta y aparece el clásico "yo veo el cambio y mi cliente no".
El recorrido de una visita, de afuera hacia adentro
- El navegador revisa si ya tiene el archivo y si todavía está vigente. Si lo está, no pide nada: no viaja ni un byte por la red.
- Si venció, puede preguntarle al servidor si cambió, mandando la huella que guardó (
ETag) o la fecha (Last-Modified). Si no cambió, la respuesta es un304sin contenido y el navegador usa su copia. - Si hay un CDN, el pedido llega primero a su nodo más cercano. Si el nodo tiene una copia vigente, responde él y tu servidor ni se entera.
- En tu servidor, una caché de página puede entregar el HTML ya armado sin ejecutar PHP.
- Si hay que ejecutar PHP, OPcache evita recompilar el código en cada pedido, y una caché de objetos evita repetir las mismas consultas a la base.
Qué guarda cada capa y quién la controla
| Capa | Qué ahorra | Cómo se controla |
|---|---|---|
| Navegador | La descarga completa | Encabezados Cache-Control, ETag y Expires que manda el servidor |
| CDN | El viaje hasta tu servidor | Los mismos encabezados, más reglas en el panel del CDN |
| Caché de página | Ejecutar PHP y consultar la base | Un complemento del CMS o la configuración del servidor web |
| Caché de objetos | Consultas repetidas a la base | Redis o Memcached, más un complemento que los use |
| OPcache | Recompilar PHP en cada pedido | La configuración de PHP del servidor |
Cuánto tiempo guardar cada cosa
| Qué | Encabezado sugerido | Por qué |
|---|---|---|
| CSS, JS y fuentes con la versión en el nombre o en la dirección | public, max-age=31536000, immutable | Un año: si cambian, cambia la dirección |
| Imágenes | public, max-age=2592000 | Treinta días; se reemplazan poco |
| HTML de páginas públicas | public, max-age=0, s-maxage=600 | El navegador revalida siempre; el CDN guarda diez minutos |
| Carrito, checkout, cuenta, panel | private, no-store | Nadie tiene que guardar una copia |
| Respuestas de una API | Según el dato, de segundos a minutos | Unos segundos ya alivian mucho en un pico |
WordPress agrega ?ver= a los estilos y scripts: para el navegador eso es una dirección distinta en cada versión, así que el año de caché es seguro. Revisá que tu CDN no ignore esa parte de la dirección.
Cómo configurarlo en un hosting con DirectAdmin
En el hosting, los encabezados de los archivos estáticos se definen en el .htaccess de public_html. Un bloque como este cubre lo básico y no toca el HTML:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/webp "access plus 30 days"
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
</IfModule>- Comprobá que se aplique con
curl, como se explica más abajo. Si los encabezados no aparecen, revisá que el bloque esté en el.htaccessdepublic_htmldel dominio correcto y que otro.htaccessmás adentro no lo pise. - Para la caché de página en WordPress, un complemento como WP Super Cache o W3 Total Cache alcanza. Activá uno solo: dos cachés de página se pisan.
- Excluí de la caché las páginas de carrito, checkout y mi cuenta. Los complementos serios lo hacen solos con WooCommerce, pero verificalo.
- Si publicás seguido, configurá que la caché de una entrada se borre al actualizarla, en lugar de vaciar todo el sitio cada vez.
Cómo comprobar qué capa te respondió
Desde una terminal, curl muestra los encabezados de la respuesta sin descargar la página:
curl -sI https://tudominio.com.ar/ | grep -iE "^(cache-control|expires|age|x-cache|cf-cache-status):"cache-controlyexpireste dicen qué instrucciones manda tu servidor.ageindica cuántos segundos lleva guardada la copia en una caché intermedia. Si aparece, no te respondió tu servidor sino un CDN o un proxy.x-cache: HITocf-cache-status: HIT, según el CDN, confirman que la copia salió del nodo.MISSquiere decir que fue a buscarla a tu servidor.- En el navegador, en la pestaña Red de las herramientas de desarrollo (F12), los archivos marcados como "memory cache" o "disk cache" no viajaron por la red.
Por qué ves contenido viejo y cómo limpiarlo sin errores
Cuando alguien ve la versión anterior de una página, casi siempre es porque se limpió una capa y no las demás. Si limpiás la caché del navegador pero el CDN todavía guarda la copia vieja, el navegador vuelve a bajar la vieja. Si purgás el CDN antes que el servidor, el CDN va a buscar la página y se lleva otra vez la versión vieja.
El orden correcto es de adentro hacia afuera: primero la caché del servidor (el complemento del CMS), después el CDN y al final el navegador, con Ctrl+Shift+R (Cmd+Shift+R en Mac). La solución de fondo es no depender de la limpieza: archivos con la versión en la dirección y HTML con vida corta en las cachés compartidas.
Lo que no se cachea nunca
- Cualquier respuesta a un usuario con sesión iniciada. En WordPress, la cookie
wordpress_logged_in_es la señal para saltear la caché. - Carrito, checkout y cuenta del cliente. WooCommerce marca esas visitas con cookies como
woocommerce_items_in_cart. - Formularios que llevan un código de un solo uso contra envíos falsificados: si se cachea el formulario, todos reciben el mismo código y termina venciendo.
- Páginas que cambian según el visitante: precios por región, idioma detectado, recomendaciones personales.
¿Hace falta un CDN si tu público está en Argentina?
Menos que si fuera internacional. Con el servidor en Buenos Aires y visitantes en el país, la latencia ya es baja: pocos milisegundos dentro de la misma ciudad y algunas decenas desde el interior. Un CDN sin nodo en Argentina puede incluso sumar un salto.
Donde sí aporta es en descargar al servidor de las imágenes y los archivos estáticos, en absorber un pico de tráfico o un ataque, y en llegar rápido a visitantes de otros países. Si lo usás, fijate que tenga nodos en Buenos Aires.
Preguntas frecuentes
¿Por qué yo veo el cambio y mi cliente no?
Porque cada uno tiene su propia caché del navegador, y quizás un nodo distinto del CDN. Vos recargaste forzando; tu cliente sigue con la copia guardada hasta que venza. Por eso conviene que el HTML tenga vida corta en las cachés y que los archivos cambien de dirección al cambiar de versión.
¿Qué caché conviene activar primero?
La de página, si tu CMS la ofrece: es la que más tiempo ahorra por visita. OPcache ya viene activo en la mayoría de los servidores con PHP actual. La de objetos suma cuando hay muchas consultas repetidas, como en una tienda con un catálogo grande.
¿La caché del navegador influye en Google?
De forma indirecta. PageSpeed Insights avisa cuando los archivos estáticos tienen una política de caché corta, y las visitas repetidas cargan más rápido, lo que mejora las métricas de experiencia de los usuarios reales.
¿Puedo cachear la portada de una tienda?
Sí, siempre que no muestre nada personal: ni el nombre del cliente ni el contenido del carrito en el encabezado. Muchos temas cargan el contador del carrito aparte, justamente para que la portada se pueda cachear.
Seguí leyendo
Core Web Vitals: qué son LCP, INP y CLS y cómo mejorarlos
Qué mide cada Core Web Vital, cuáles son los umbrales de Google, dónde ver los datos reales de tu sitio y qué arreglar primero en LCP, INP y CLS.
6 min de lectura
Imágenes livianas: cuánto pesa una foto mal exportada y cómo arreglarla
Tamaño, formato y calidad: cómo bajar el peso de las imágenes de tu sitio sin que se note la diferencia, con WebP y AVIF, srcset y carga diferida.
5 min de lectura
Cómo leer una prueba de velocidad sin engañarte con el puntaje
Qué significa cada métrica de PageSpeed Insights, en qué se diferencian los datos de laboratorio y los de campo, y cómo medir para saber si el sitio anda bien.
6 min de lectura
