¿Tu tasa de aciertos de caché en Cloudflare es solo del 30%? Configura estas 3 reglas para subirla al 90%

La tasa de aciertos de caché de mi blog en Cloudflare se quedaba alrededor del 30%. Las imágenes y el CSS se cacheaban, pero el HTML volvía al origen en cada visita y el servidor seguía saturado. Cloudflare no cachea HTML por defecto y Page Rules ya está obsoleto.
Tras estudiar Cache Rules y Edge TTL, la tasa pasó del 30% al 90%, el TTFB de 500 ms a poco más de 100 ms y la carga del servidor bajó un 90%. Este artículo explica por qué el HTML no se cachea, cómo configurar Cache Rules y cómo verificar el resultado.
¿Por qué Cloudflare no cachea HTML por defecto?
Comportamiento de caché por defecto
Primero, el comportamiento por defecto. Cloudflare solo cachea recursos estáticos: imágenes (JPG, PNG, GIF), CSS y JS. ¿HTML? Por defecto, no.
¿Por qué? Cloudflare decide si un recurso es cacheable según tres condiciones:
- Cabecera Cache-Control: si hay
private,no-store,no-cacheomax-age=0, no cachea - Código de respuesta: solo ciertos códigos HTTP (200, 301, 404, etc.)
- Método de la petición: solo GET; POST y PUT no
Las páginas HTML suelen verse como contenido dinámico con datos del usuario, así que no se cachean. Es razonable: con login, el HTML puede mostrar nombre o datos personales que no deben quedar en la CDN.
La razón real de no cachear HTML
En el fondo, es seguridad. Vi en un foro a alguien que activó caché en todo el sitio y cacheó hasta wp-login.php, credenciales incluidas. Cualquier visitante podía entrar al panel de WordPress. Da miedo solo pensarlo.
Si tu sitio es mayormente estático, por ejemplo:
- Blog estático generado con Next.js o Gatsby
- Web corporativa o documentación con poca actualización
- Páginas de producto puramente informativas
cachear HTML mejora mucho el rendimiento. La clave es excluir bien panel, login y rutas sensibles.
¿Cuánto mejora cachear HTML?
Alguien compartió en Medium que, tras cachear HTML, el TTFB bajó de 500 ms a 100-160 ms y la carga del servidor se redujo un 90%.
La diferencia es simple: antes cada visita pedía HTML al origen (procesar, base de datos, render). Ahora la CDN lo entrega y el origen casi no trabaja. Más tráfico, más se nota.
Page Rules está obsoleto: cómo usar Cache Rules
El fin de Page Rules
Si ya usaste Cloudflare, conoces Page Rules y la opción Cache Everything para HTML. Hoy Page Rules está marcado como deprecated.
Cronología:
- Julio de 2024: cuentas gratuitas nuevas sin Page Rules
- 2025: Cloudflare migrará Page Rules al nuevo sistema
- Toda configuración nueva: Cache Rules
Page Rules es viejo, poco flexible y en el plan gratuito solo 3 reglas. Para estrategias complejas, se queda corto.
El mundo de Cache Rules
Cache Rules es el sistema nuevo y mucho más potente. La diferencia clave:
Era Page Rules: elegías manualmente Cache Everything
Era Cache Rules: al elegir Eligible for cache, Cache Everything queda activo
Al principio busqué Cache Everything hasta ver que ya tenía otro nombre.
Además, las condiciones son más flexibles:
- Ruta URI, extensión, hostname, etc.
- Expresiones regulares (poco las uso)
- Combinación de condiciones
Notas de migración
Si aún usas Page Rules:
- Cloudflare migra por ti: en 2025 convertirá Page Rules (también puedes migrar antes)
- Algunos ajustes no migran: Disable Security y Disable Performance están obsoletos
- Comportamiento distinto: Eligible for cache ≈ Cache Everything, con matices internos
Recomiendo pasar ya a Cache Rules: tarde o temprano toca, y la configuración es más clara.
Configuración práctica: 3 reglas para cachear todo el sitio
Pasemos a la práctica. Configuraremos 3 Cache Rules: exclusión del panel, estáticos y resto del sitio.
Preparación: entrar a la configuración
Inicia sesión en Cloudflare, elige el dominio y:
- Menú izquierdo: Caching
- Pestaña Cache Rules
- Create rule
Vamos regla por regla.
Regla 1: omitir panel y administración (máxima prioridad)
¿Por qué primero? Seguridad. El panel y el login nunca deben cachearse.
Pasos:
- Rule name:
Bypass Admin Pages - When incoming requests match:
- Custom filter expression
- Field: URI Path
- Operator: contains
- Value:
/wp-admin(añade más rutas después)
- Más exclusiones con Or:
/wp-login.php/admin//api/auth/
- Then:
- Bypass cache
- Prioridad: 1
Pulsa Deploy. Esas rutas irán siempre al origen.
Lista completa típica en WordPress:
/wp-admin
/wp-login.php
/wp-json
/cart
/checkout
/my-account
Ajústala a tu sitio.
Regla 2: cachear recursos estáticos (prioridad media)
Opcional porque Cloudflare ya cachea estáticos, pero así controlas mejor el TTL.
Pasos:
- Rule name:
Cache Static Assets - When incoming requests match:
- File extension
- Operator: is in
- Value:
jpg png gif css js woff woff2 ttf svg ico
- Then:
- Eligible for cache
- Edge cache TTL: Use cache-control header if present, use default Cloudflare caching behavior if not
- Prioridad: 2
Los estáticos respetan Cache-Control del origen; si no hay, usa el TTL por defecto de Cloudflare (suele ir de 4 horas a 1 mes según el tipo).
Regla 3: cachear todo lo demás (mínima prioridad)
Aquí entra el HTML y el resto.
Pasos:
- Rule name:
Cache Everything Else - When incoming requests match:
- All incoming requests
- O Custom filter expression si quieres excluir rutas concretas
- Then:
- Eligible for cache
- Edge cache TTL: Ignore cache-control header and use this TTL
- Duración: 7 days
- Prioridad: 3
¿Por qué 1 semana? Equilibrio: 1 día aporta poco; 1 mes retrasa actualizaciones. Para blogs y documentación, 1 semana encaja bien.
Plan gratuito: TTL mínimo 2 horas; en Pro, 1 hora. Si actualizas mucho, acorta el TTL.
El orden de ejecución importa
Cloudflare aplica por prioridad ascendente:
- Regla 1 (prioridad 1): ¿es panel? Bypass
- Regla 2 (prioridad 2): ¿es estático? TTL adecuado
- Regla 3 (prioridad 3): el resto, 1 semana
Así el panel nunca se cachea, los estáticos tienen TTL razonable y el HTML se fuerza 1 semana.
Lista de comprobación
Tras las tres reglas:
- Regla 1 con la prioridad más alta (número más bajo)
- Rutas de panel en la lista de exclusión
- TTL de la regla 3 acorde a tu frecuencia de actualización
- Todas las reglas desplegadas (Deploy)
Configuración lista. Ahora los posibles problemas de Edge TTL.
Edge TTL en detalle: evita estas trampas
Edge TTL (tiempo de vida en el edge) es el núcleo de la estrategia y donde más errores vi.
Los tres modos de Edge TTL
Modo 1: Use cache-control header if present, bypass cache if not
- Si hay Cache-Control se respeta; si no, no cachea
- Para orígenes con Cache-Control completo
- Demasiado estricto para sitios pequeños sin cabeceras
Modo 2: Use cache-control header if present, use default Cloudflare caching behavior if not (recomendado en general)
- Respeta Cache-Control; si no hay, comportamiento por defecto de Cloudflare
- Origen parcialmente configurado
- El más equilibrado para la mayoría
Modo 3: Ignore cache-control header and use this TTL
- Ignora el origen y fuerza tu TTL
- Sitios estáticos o estrategia clara
- Contundente y efectivo para HTML en todo el sitio
Para HTML recomiendo el modo 3. Muchas páginas no tienen Cache-Control o usan no-cache; los modos 1 y 2 no cachean. El 3 fuerza directamente.
¿Cómo elegir la duración del TTL?
| Tipo de contenido | TTL recomendado | Motivo |
|---|---|---|
| Estáticos (imágenes, CSS, JS) | 1 mes | Cambian poco, ahorran ancho de banda |
| HTML de artículos | 1 semana | Actualización poco frecuente |
| HTML de producto | 1-3 días | Precio o stock pueden cambiar |
| HTML de inicio | 1 día | Suele actualizarse más |
| API | No cachear o 5 min | Datos en tiempo real |
Plan gratuito: mínimo 2 horas. Si no puedes bajar más, es límite del plan.
En mi blog uso 1 semana. Tras publicar purgo manualmente (más abajo) y el resto del tiempo la tasa de aciertos es altísima.
Errores frecuentes (los he cometido)
Error 1: olvidar excluir el panel
Al principio puse una sola regla Cache Everything y cacheé el panel de WordPress. Login con páginas viejas y que refrescar a mano. Frustrante.
Solución: primero la regla Bypass con prioridad máxima.
Error 2: TTL demasiado largo
Con 1 mes de TTL cambié un título y los visitantes vieron el antiguo días.
Solución: TTL según frecuencia de actualización. Si dudas, 1 semana.
Error 3: confundir Edge TTL y Browser TTL
Edge TTL = nodos CDN. Browser TTL = navegador del visitante. Son independientes.
- Edge TTL: cuándo la CDN vuelve al origen
- Browser TTL: cuándo el navegador vuelve a pedir a la CDN
Solo Edge TTL: el origen descansa, pero el navegador sigue pidiendo a menudo a la CDN.
Solución: Browser TTL en Respect origin o ~1 día.
Purgar caché manualmente
¿Contenido actualizado? No esperes al TTL.
En Cloudflare:
- Menú Caching
- Purge Cache
- Opciones:
- Purge Everything: todo el sitio
- Custom Purge: URLs concretas
Uso Custom Purge. Purgar todo dispara todas las peticiones al origen de golpe.
Truco: plugin de Cloudflare en WordPress para purgar al publicar.
Verificación y optimización
Configurado, hay que comprobarlo con datos.
Método 1: herramientas de desarrollo del navegador
- Chrome (u otro navegador)
- F12
- Pestaña Network
- Visita la home
- Localiza el documento HTML (suele ser la primera petición)
- Abre Headers
Cabeceras clave:
cf-cache-status:
- HIT: acierto, contenido desde la CDN
- MISS: fallo, fue al origen pero quedará cacheado
- DYNAMIC: dinámico, no cachea (o Bypass activo)
- BYPASS: omisión explícita (panel)
- EXPIRED: caducado, la CDN actualiza
Primera visita: MISS. Segunda: HIT. Si siempre DYNAMIC o BYPASS, revisa reglas.
age: segundos en caché en la CDN. age: 3600 = 1 hora.
cache-control: estrategia del origen. Con Ignore cache-control, Cloudflare no la sigue pero la cabecera puede seguir visible.
Método 2: curl
curl -I https://your-website.com
Busca cf-cache-status en los headers.
Más detalle:
curl -svo /dev/null https://your-website.com 2>&1 | grep -i "cf-cache"
Método 3: Cloudflare Analytics
- Tu dominio
- Analytics
- Caching
- Cache Hit Ratio
Antes: 30%. Al día siguiente: 85%. Ahora: ~90%. Si ves un salto similar, la configuración funciona.
Referencias:
- Tasa de aciertos: objetivo >80%
- Ancho de banda: debería bajar claramente
- Peticiones: más en CDN, muchas menos en origen
Técnicas avanzadas
Técnica 1: precalentar caché
Lo nuevo empieza en MISS. Tras publicar, visita tú las páginas o usa un script que recorra el sitio.
Técnica 2: unificar URLs
Variantes distintas = objetos de caché distintos:
https://example.com/pageyhttps://example.com/page?no son lo mismohttps://example.com/pageyhttps://example.com/page/tampoco
Unifica enlaces para evitar MISS innecesarios.
Técnica 3: quitar query strings inútiles
?utm_source=twitter y cada variante son páginas distintas para la caché.
Cloudflare tiene Query String Sort en Caching; ayuda ordenando parámetros.
Mejor aún: Transform Rules para eliminar parámetros que no cambian el contenido.
Resolución de problemas
Problema 1: cf-cache-status siempre DYNAMIC
Posibles causas:
- Cache-Control
no-cacheoprivateen el origen - Regla sin coincidencia para Eligible for cache
Solución: revisa condiciones. Con modo 3 (Ignore cache-control) debería forzar caché.
Problema 2: tasa solo 50-60%
Posibles causas:
- URLs con parámetros dinámicos
- Cabeceras del origen que bloquean
- Nodos CDN aún calentando (tras configurar, espera 1-2 días)
Solución: tiempo + Analytics para ver qué peticiones fallan.
Problema 3: visitantes ven contenido viejo
Posibles causas: TTL largo o caché del navegador
Solución: Purge Cache al publicar o plugin automático (WordPress tiene varios).
Resumen
Pasos clave:
- Por qué no cachea HTML: seguridad, evitar contenido dinámico y rutas sensibles
- De Page Rules a Cache Rules: Page Rules obsoleto; Eligible for cache ≈ Cache Everything
- 3 Cache Rules:
- Regla 1 (prioridad 1): Bypass panel y login
- Regla 2 (prioridad 2): estáticos
- Regla 3 (prioridad 3): resto (HTML), TTL ~1 semana
- Edge TTL: para HTML, Ignore cache-control and use this TTL; ajusta duración
- Verificación: cf-cache-status en devtools, Analytics >80%
Tras configurar, pasé del 30% al 90%, TTFB de 500 ms a poco más de 100 ms y carga del servidor -90%. Muy visible con mucho tráfico.
Pruébalo ya:
- Mira tu Cache Hit Ratio en Analytics
- Configura las 3 reglas (¡excluye el panel primero!)
- Espera 1-2 días y revisa Analytics
Si algo falla:
- ¿Panel en Bypass?
- ¿Prioridades correctas?
- ¿Modo Edge TTL adecuado?
Con WordPress, el plugin oficial de Cloudflare purga al publicar y ahorra dolores de cabeza.
¿Experiencias o dudas? Compártelas en los comentarios.
Flujo completo para subir la tasa de aciertos de caché con Cloudflare Cache Rules
Desde entender por qué el HTML no se cachea hasta configurar 3 Cache Rules y pasar del 30% al 90%
Estimated time: PT1H
-
1
Step 1: Entender el comportamiento por defecto y por qué no se cachea HTML
Comportamiento por defecto de Cloudflare: -
2
Step 2: Migrar de Page Rules a Cache Rules
Page Rules obsoleto: -
3
Step 3: Configurar regla 1: omitir panel (máxima prioridad)
¿Por qué primero? Seguridad: panel y login nunca en caché. -
4
Step 4: Configurar regla 2: cachear estáticos (prioridad media)
Opcional pero útil para controlar TTL. -
5
Step 5: Configurar regla 3: cachear todo lo demás (mínima prioridad)
Cachea HTML y el resto. -
6
Step 6: Verificar y optimizar
DevTools del navegador:
FAQ
¿Por qué Cloudflare no cachea HTML por defecto? ¿Cuánto mejora cachear HTML?
Las páginas HTML suelen considerarse contenido dinámico y pueden incluir información específica del usuario, así que no se cachean por defecto. El diseño es razonable: si tu sitio tiene login, el HTML puede mostrar nombre de usuario o datos personales, y eso no puede quedar en la CDN para que lo vean otros.
Vi en un foro el caso de alguien que activó caché en todo el sitio y terminó cacheando hasta wp-login.php, con credenciales incluidas. El resultado fue predecible: cualquier visitante podía entrar al panel de WordPress desde la página cacheada.
Mejoras al cachear HTML:
Alguien compartió en Medium que, tras configurar la caché de HTML, el TTFB bajó de 500 ms a un rango de 100-160 ms y la carga del servidor se redujo un 90%. El efecto es notable.
¿Por qué la diferencia es tan grande?
Antes, cada visita pedía el HTML al servidor de origen, que procesaba la petición, consultaba la base de datos y renderizaba la página. Ahora la CDN entrega el HTML cacheado y el origen casi no interviene. Cuanto más tráfico, más se nota.
Tras mi configuración, la tasa de aciertos pasó del 30% al 90%, el TTFB de 500 ms a poco más de 100 ms y la carga del servidor bajó un 90%.
¿En qué se diferencian Page Rules y Cache Rules? ¿Cómo migrar?
• Las cuentas gratuitas nuevas desde julio de 2024 ya no pueden usar Page Rules
• En 2025 Cloudflare migrará automáticamente las Page Rules existentes al nuevo sistema
• Toda configuración nueva debe usar Cache Rules
¿Por qué lo retiraron?
Page Rules es antiguo, poco flexible y en el plan gratuito solo permite 3 reglas. Para estrategias de caché complejas, se queda corto.
Ventajas de Cache Rules:
• Mucho más potente
• Condiciones de coincidencia más flexibles (ruta URI, extensión de archivo, hostname, expresiones regulares y combinación de condiciones)
La diferencia principal:
• En la era Page Rules había que elegir manualmente Cache Everything para cachear todo
• En Cache Rules, al elegir Eligible for cache, la función Cache Everything queda activa automáticamente
Este cambio importa. Al principio busqué la opción Cache Everything hasta descubrir que ya tenía otro nombre.
Notas de migración:
• Cloudflare migra por ti (en 2025 convertirá Page Rules en Cache Rules sin acción manual)
• Algunos ajustes no migran (Disable Security y Disable Performance están obsoletos y no se trasladan)
• El comportamiento varía un poco (Eligible for cache equivale a Cache Everything, pero la lógica interna difiere)
Recomiendo empezar ya con Cache Rules: tarde o temprano tocará cambiar.
¿Cómo configurar 3 Cache Rules para cachear todo el sitio? ¿Cuál es el orden de ejecución?
• Rule name: Bypass Admin Pages
• When incoming requests match: Custom filter expression
• Field: URI Path, Operator: contains, Value: /wp-admin
• Añade más exclusiones (/wp-login.php, /admin/, /api/auth/, etc.)
• Then: Bypass cache
• Prioridad: 1
Esta regla garantiza que las peticiones con esas rutas no usen caché y vayan al origen.
Regla 2 (prioridad media): cachear recursos estáticos
• Rule name: Cache Static Assets
• When incoming requests match: File extension
• Operator: is in, Value: jpg png gif css js woff woff2 ttf svg ico
• Then: Eligible for cache
• Edge cache TTL: Use cache-control header if present, use default Cloudflare caching behavior if not
• Prioridad: 2
Regla 3 (mínima prioridad): cachear todo lo demás
• Rule name: Cache Everything Else
• When incoming requests match: All incoming requests
• Then: Eligible for cache
• Edge cache TTL: Ignore cache-control header and use this TTL
• Duración: 7 days (1 semana)
• Prioridad: 3
Orden de ejecución:
Cloudflare aplica las reglas por prioridad ascendente (primero regla 1 para panel, luego regla 2 para estáticos, por último regla 3 cachea el resto 1 semana). Así el panel nunca se cachea, los estáticos tienen TTL adecuado y el HTML se fuerza 1 semana.
¿En qué se diferencian los tres modos de Edge TTL? ¿Cuál elegir?
• Significado: si hay Cache-Control se respeta; si no, no se cachea
• Escenario: origen con Cache-Control bien configurado
• Mi opinión: demasiado estricto; muchos sitios pequeños no lo tienen y equivale a no cachear
Modo 2: Use cache-control header if present, use default Cloudflare caching behavior if not
• Significado: respeta Cache-Control si existe; si no, usa el comportamiento por defecto de Cloudflare
• Escenario: origen parcialmente configurado
• Mi opinión: el más equilibrado para la mayoría
Modo 3: Ignore cache-control header and use this TTL
• Significado: ignora el origen y fuerza el TTL que definas
• Escenario: sitios estáticos o cuando dominas la estrategia
• Mi opinión: contundente pero efectivo para cachear HTML en todo el sitio
Para HTML recomiendo el modo 3. Muchas páginas no tienen Cache-Control o usan no-cache por seguridad; los modos 1 y 2 no cachean. El modo 3 fuerza la caché directamente.
¿Cómo elegir la duración del TTL?
• Recursos estáticos (imágenes, CSS, JS): 1 mes
• HTML de artículos de blog: 1 semana
• HTML de producto: 1-3 días
• HTML de inicio: 1 día
• API: no cachear o 5 minutos
Límite del plan gratuito: mínimo 2 horas. Si no puedes poner menos, es restricción del plan.
¿Cómo verificar que la caché funciona? ¿Cómo subir la tasa de aciertos?
1. Abre Chrome y pulsa F12
2. Ve a la pestaña Network
3. Visita la página de inicio
4. En la lista, localiza el documento HTML y abre Headers
Fíjate en cf-cache-status:
• HIT: acierto de caché, contenido desde la CDN sin volver al origen
• MISS: fallo, esta vez fue al origen pero quedará cacheado
• DYNAMIC: contenido dinámico, no se cachea
• BYPASS: omisión explícita, debería ser el panel
• EXPIRED: caché caducada, la CDN actualiza desde el origen
La primera visita suele ser MISS; la segunda debería ser HIT. Si siempre ves DYNAMIC o BYPASS, revisa la configuración.
Verificación con curl:
curl -I https://your-website.com
En los headers de respuesta busca cf-cache-status.
Cloudflare Analytics:
1. Elige tu dominio y abre Analytics
2. Pestaña Caching
3. Revisa Cache Hit Ratio
Antes tenía 30%; al día siguiente subió a 85% y ahora se mantiene cerca del 90%.
Referencias:
• Objetivo de tasa de aciertos: más del 80%
• El ahorro de ancho de banda debería bajar claramente
• Más peticiones atendidas por la CDN, muchas menos en el origen
Técnicas avanzadas:
• Precalentar caché (visita tú las páginas tras publicar)
• Unificar formato de URL (variantes distintas son objetos de caché distintos)
• Quitar query strings innecesarios (Transform Rules de Cloudflare para eliminar parámetros que no afectan al contenido)
¿Qué hacer si actualizo contenido tras configurar la caché? ¿Cómo purgar manualmente?
1. En el panel de Cloudflare entra en Caching
2. Busca Purge Cache
3. Opciones:
• Purge Everything (todo el sitio)
• Custom Purge (URLs concretas)
Suelo usar Custom Purge solo en las páginas actualizadas. Purgar todo hace que todas las peticiones vuelvan al origen de golpe.
Truco: con WordPress, instala el plugin de Cloudflare para purgar automáticamente al publicar.
TTL demasiado largo y contenido desactualizado:
Una vez puse 1 mes de TTL y cambié un título; los visitantes seguían viendo el antiguo. Tardé días en recordar que era la caché.
Soluciones:
• Ajusta el TTL según la frecuencia de actualización
• Si publicas mucho, TTL corto; si poco, más largo
• Si dudas, prueba 1 semana
• Tras publicar, purga manualmente o usa un plugin (WordPress tiene varios)
No confundir Edge TTL y Browser TTL:
Edge TTL es el tiempo en los nodos CDN; Browser TTL es el tiempo en el navegador del visitante. Son independientes.
• Edge TTL: cuándo la CDN vuelve al origen
• Browser TTL: cuándo el navegador vuelve a pedir a la CDN
Si solo configuras Edge TTL, el navegador seguirá pidiendo a menudo a la CDN; el origen descansa, pero la mejora percibida por el usuario es limitada.
Solución: Browser TTL en Respect origin o un valor razonable, por ejemplo 1 día.
10 min de lectura · Publicado el: 1 dic 2025 · Actualizado el: 21 ago 2026
Cloudflare Full Stack
Si llegaste desde búsqueda, lo más rápido es ir al artículo anterior o siguiente de esta misma serie.
Anterior
¿Falló el build de CF Pages? 8 problemas comunes y soluciones para ahorrarte medio día de depuración
Guía sistemática de 8 escenarios frecuentes de fallo de build en Cloudflare Pages: instalación de dependencias, versión de Node, timeouts, resolución de módulos y más. Incluye soluciones verificadas y medidas preventivas para localizar el problema rápido y ahorrar tiempo de depuración.
Parte 4 de 23
Siguiente
Guía de reglas de firewall de Cloudflare para principiantes: 5 reglas gratuitas filtran el 80% del tráfico malicioso (plantillas incluidas)
¿Solo 5 reglas de firewall en el plan gratuito de Cloudflare? Esta guía ofrece plantillas WAF probadas en producción con filtros por IP, ASN, UA y rutas, te enseña a configurar prioridades paso a paso y filtrar el 80% del tráfico malicioso en 30 minutos, con código completo
Parte 6 de 23



Comentarios
Inicia sesión con GitHub para dejar un comentario