Objetivos de aprendizaje
Después de leer este artículo podrás:
- Decidir si tu sitio gana con una CDN usando criterios medibles
- Comparar las opciones: CDN del hosting, CDN de terceros y ninguna
- Configurar Cache-Control y confirmar con curl que la caché funciona
En esta página
- ¿Qué criterios deciden si vale la pena?
- ¿En qué casos la CDN marca la diferencia?
- ¿En qué casos puedes prescindir de ella?
- ¿Cuáles son las opciones?
- ¿Qué guarda la CDN por defecto?
- ¿Cómo configurar la caché de un sitio pequeño?
- ¿Qué opción elegir en cada escenario?
- Cómo hacerlo en Square Cloud
- Preguntas frecuentes
En teoría, toda página se vuelve más rápida con una CDN. En la práctica, la ganancia va de enorme a imperceptible, y depende de tres cosas: dónde están tus visitantes, cuánto pesa la página y si el contenido cambia en cada solicitud.
Los criterios de abajo te ayudan a decidir con números, no por moda. Si todavía no sabes qué es una CDN, empieza por qué es una CDN y cómo acelera tu sitio y vuelve aquí.
¿Qué criterios deciden si vale la pena?#
Hazte cuatro preguntas, en este orden:
- ¿Dónde está el público? Si el servidor está en una región y los visitantes en otras, cada solicitud recorre una distancia grande. Si todos viven en la misma ciudad que el servidor, casi no hay latencia que ahorrar.
- ¿Cuánto pesa la página? Una página con 40 archivos paga el costo de la distancia varias veces. Una página de texto con un CSS pequeño paga poco.
- ¿El contenido es igual para todos? Imágenes, CSS, JavaScript, fuentes y sitios estáticos son excelentes candidatos para la caché. Los paneles y las respuestas por usuario no lo son.
- ¿El tráfico tiene picos? La CDN responde en lugar del origen, así que un pico de visitas (una publicación viral, un lanzamiento) presiona menos al servidor.
Para medir en lugar de suponer, usa dos métricas de Google. El TTFB (tiempo hasta el primer byte) se considera bueno hasta 0,8 s y malo por encima de 1,8 s. El LCP (tiempo hasta que aparece el elemento más grande de la página) es bueno hasta 2,5 s y malo por encima de 4 s, medido en el percentil 75 de las visitas, separando móvil y escritorio. Si el TTFB de visitantes lejanos pasa de 0,8 s o el LCP pasa de 2,5 s por culpa de imágenes y scripts, una CDN con caché tiende a ayudar.
¿En qué casos la CDN marca la diferencia?#
- Público disperso: un sitio mexicano con visitantes en España y en Estados Unidos.
- Muchas imágenes o videos: el archivo sale del PoP (punto de presencia) más cercano, no del origen.
- Sitio estático o generado (SSG): como el HTML también es igual para todos, la CDN puede servir casi todo sin tocar el origen.
- Servidor pequeño: si el origen tiene poca RAM, dejar que la CDN absorba las solicitudes repetidas evita que se caiga en los picos.
- Protección extra: las CDN suelen incluir mitigación de DDoS y WAF, y ocultan la dirección del origen.
¿En qué casos puedes prescindir de ella?#
- Público local y página liviana: el blog de un barrio, el sitio de una clínica, un portafolio con pocos archivos. El tiempo ya es bajo.
- Aplicación totalmente dinámica y autenticada: un panel en el que cada respuesta depende del usuario casi no usa la caché.
- Entorno interno: una herramienta que usa un equipo dentro de la misma red.
Incluso en estos casos, si el hosting ya incluye CDN, déjala activada: solo actúa donde hay caché válida.
¿Cuáles son las opciones?#
| Opción | Cómo funciona | Pros | Contras |
|---|---|---|---|
| Ninguna | Todo viene del origen | Simple, nada que configurar | Lento para quien está lejos, el origen recibe todo el tráfico |
| CDN del propio hosting | El hosting ya pone la CDN delante de la aplicación | Sin configuración extra, sin cobro aparte en muchos casos | Usas los controles que ofrece |
| CDN de terceros delante del sitio | Apuntas el DNS del dominio al proveedor de la CDN | Más control de las reglas de caché, existen planes sin cuota mensual (el plan Free de Cloudflare, por ejemplo, incluye CDN) | Una pieza más que configurar y depurar, límites que cambian |
| CDN solo para archivos | Las imágenes y videos van a un almacenamiento de objetos con CDN, el sitio queda en el origen | Resuelve lo que más pesa | Dos URL que administrar |
No hay un ganador universal. La pregunta correcta es cuál de ellas resuelve tu cuello de botella con la menor complejidad.
¿Qué guarda la CDN por defecto?#
Depende del proveedor. Como ejemplo, Cloudflare guarda en caché según la extensión del archivo, no según el tipo de contenido, y la lista por defecto cubre imágenes (JPG, PNG, WEBP, SVG), CSS, JS, fuentes (WOFF2, TTF), audio, video y archivos comprimidos. Según la documentación, HTML y JSON no se guardan en caché por defecto: para guardarlos creas una regla de caché.
Eso explica un error común: el sitio "tiene CDN", pero la página principal y la API nunca salen de la caché. Para saber qué pasó, el encabezado cf-cache-status de Cloudflare muestra HIT (vino de la caché), MISS (era elegible, pero lo buscó en el origen), DYNAMIC (no elegible) o BYPASS (era elegible, pero la respuesta del origen no podía guardarse). Otras CDN usan otros nombres de encabezado.
¿Cómo configurar la caché de un sitio pequeño?#
Quien decide el tiempo de caché es el Cache-Control de tu aplicación. Los archivos con hash en el nombre cambian de URL cuando cambia su contenido, así que pueden quedarse guardados un año. En Node.js con Express:
import express from "express";
const app = express();
// /assets/app.3f9a1c.js, /assets/logo.8d2e.png: el nombre cambia cuando cambia el archivo
app.use(
"/assets",
express.static("public/assets", { maxAge: "1y", immutable: true }),
);
// HTML: el navegador lo guarda 1 minuto; la CDN puede guardarlo 5 minutos
app.get("/", (req, res) => {
res.set("Cache-Control", "public, max-age=60, s-maxage=300");
res.sendFile("index.html", { root: "public" });
});
// Respuesta por usuario: nunca en una caché compartida
app.get("/panel", (req, res) => {
res.set("Cache-Control", "private, no-store");
res.send("Panel del usuario");
});
app.listen(process.env.PORT ?? 80);s-maxage vale solo para cachés compartidas, como la CDN, y tiene prioridad sobre max-age en ellas. Recuerda que, en Cloudflare, el HTML solo entra en la caché con una regla de caché. private impide que la CDN guarde la respuesta, y no-store prohíbe cualquier caché, según MDN. Detalles de cada directiva en qué es Cache-Control.
¿Cómo confirmar que la caché funciona?#
Ejecuta esto dos veces y compara:
curl -sI https://www.ejemplo.com/assets/app.3f9a1c.jsEn la segunda llamada, busca el encabezado Age con un valor mayor que cero y el indicador de HIT de tu proveedor. Si la respuesta nunca viene de la caché, revisa el Cache-Control y confirma que no haya Set-Cookie en la respuesta, porque Cloudflare no guarda respuestas con Set-Cookie (el estado puede aparecer como BYPASS).
¿Qué opción elegir en cada escenario?#
- Blog o portafolio local, pocas páginas: la CDN es opcional. Si el hosting ya la tiene, aprovéchala; si no, optimiza primero las imágenes (mira cómo hacer tu sitio web más rápido).
- Landing page o tienda con público en todo el país: usa CDN con caché de assets y de HTML estático.
- Sitio con visitantes en varios continentes: una CDN con caché es casi obligatoria.
- Aplicación autenticada (SaaS, panel): usa CDN para los assets y deja las rutas por usuario con
privateono-store. - Muchos videos o descargas: pon los archivos en un almacenamiento de objetos con CDN en lugar de servirlos desde la aplicación.
Cómo hacerlo en Square Cloud#
Todo plan de Square Cloud incluye CDN global, tráfico ilimitado (sin cobro por ancho de banda ni por solicitud, sujeto a la política de uso justo), TLS automático, WAF y protección DDoS L3/L4/L7. Para un sitio pequeño, eso evita contratar y configurar una CDN aparte.
La red es una CDN Anycast basada en Cloudflare, con más de 200 puntos de presencia, HTTP/3 y WebSockets. Tu aplicación web recibe un subdominio *.squareweb.app con HTTPS, y desde el plan Standard puedes usar un dominio personalizado, creando en tu registrador los registros DNS que muestra el panel. El dominio sigue registrado a tu nombre.
La CDN guarda en caché según el Cache-Control que envía tu aplicación, así que enviar los encabezados correctos, como en el ejemplo de arriba, sigue siendo tarea de tu aplicación. Los detalles están en Red y CDN de Square Cloud.
Red
Dominio propio, TLS automático y CDN global para tu app
Preguntas frecuentes
¿Todo sitio pequeño necesita una CDN?
No. Si el público está concentrado cerca del servidor, la página es liviana y el tráfico es bajo, la diferencia es pequeña. Aun así, muchos hostings ya incluyen CDN, y en ese caso no hay motivo para desactivarla.
¿La CDN hace el sitio más rápido incluso sin caché?
Solo un poco. Sin caché, la solicitud sigue yendo hasta el origen. La CDN puede acortar el handshake TLS y reutilizar conexiones con el origen, pero la gran ganancia viene de servir copias guardadas.
¿Existe una CDN sin cuota mensual para un sitio pequeño?
Sí, algunos proveedores tienen un plan sin cuota mensual con CDN, por ejemplo el plan Free de Cloudflare. Revisa los límites y condiciones en el sitio del proveedor, porque cambian con el tiempo.
¿Puedo usar una CDN en un sitio con inicio de sesión o panel?
Sí, pero solo para lo que es igual para todos, como los archivos estáticos. Las respuestas personalizadas deben salir con Cache-Control: private o no-store para no entregarse a otro visitante.
Más en Redes y dominios
Ver los 27 artículos- Qué es un balanceador de carga y para qué sirveUn balanceador de carga reparte las solicitudes entre varios servidores. Aprende cómo funciona, los algoritmos, capa 4 y 7 y un ejemplo con nginx.
- Registros DNS: A, CNAME, MX y TXTLos registros DNS son las instrucciones de una zona que indican a dónde apunta un nombre. Entiende A, AAAA, CNAME, MX, TXT, NS y CAA con ejemplos y comandos dig.
- Cómo apuntar un dominio a tu hostingPara apuntar un dominio a tu hosting, crea un registro CNAME (o A) en el DNS de tu registrador. Pasos, cómo comprobarlo y los errores más comunes.
- Encabezado Cache-Control: cuánto tiempo se guarda un archivo en cachéCache-Control es el encabezado HTTP que define cuánto tiempo navegador y CDN guardan una respuesta. Mira max-age, no-cache, immutable y recetas por tipo de archivo.