Archivo _headers en Cloudflare Pages: caché, seguridad y noindex
Aprende a usar el archivo _headers de Cloudflare Pages para controlar caché, seguridad y noindex en tu web, con sus límites reales y los errores que debes evitar.
Publicas tu web nueva un lunes. El martes buscas el nombre de tu negocio en Google y, entre los resultados, aparece una dirección rara que termina en pages.dev con el mismo contenido que tu dominio. Nadie la creó a propósito, pero ahí está, compitiendo contigo.
Hay una forma sencilla de evitarlo, y de paso mejorar la velocidad y la seguridad: un archivo de texto de pocas líneas llamado _headers.
¿Qué es el archivo _headers en Cloudflare Pages?
Es un archivo de texto plano, sin extensión, donde defines encabezados HTTP que Cloudflare Pages añade a las respuestas de tu sitio. Según la documentación de Cloudflare, debe vivir en el directorio de archivos estáticos de tu proyecto (en frameworks como Astro, la carpeta public/) y Cloudflare lo procesa sin publicarlo como un archivo más.
Los encabezados son instrucciones invisibles que viajan con cada página: le dicen al navegador cuánto guardar en caché, a Google si debe indexar algo, o qué permisos tiene la página. Si ya migraste tu sitio como contamos en la guía de migración de WordPress a Cloudflare Pages, este es el siguiente ajuste fino.

¿Cómo se escribe una regla?
La primera línea es la ruta (o un patrón) y las líneas con sangría debajo son pares nombre: valor. Un ejemplo basado en la documentación:
/secure/page
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
/static/*
Access-Control-Allow-Origin: *
Estas son las piezas que debes conocer:
| Elemento | Qué hace | Detalle de la documentación |
|---|---|---|
* (splat) | Coincide con todos los caracteres | Solo uno por URL; se reutiliza como :splat |
:nombre (placeholder) | Captura una parte de la ruta | Cada nombre se referencia una sola vez |
! Nombre | Quita un encabezado | Se escribe el nombre con ! delante |
| Varias reglas coinciden | Se suman los encabezados | Si se repite uno, los valores se unen con coma |
¿Qué encabezados vale la pena configurar?
Tres usos cubren casi todos los casos de un sitio corporativo: caché, seguridad y control de indexación.
Para la caché, la documentación muestra una regla para archivos con huella en el nombre (los que cambian de nombre cuando cambian de contenido): Cache-Control: public, max-age=31556952, immutable sobre /static/*. Así el navegador no vuelve a pedir esos archivos. Esto suma a lo que explicamos en la guía de velocidad web y Core Web Vitals.
Para la seguridad, Cloudflare ejemplifica reglas con X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy y Content-Security-Policy. Empieza con los más simples y prueba tu web después de cada cambio: una política de contenido demasiado estricta puede romper scripts o fuentes que sí necesitas.
Ojo: copiar una política de seguridad de otro sitio sin probarla es la forma más rápida de romper tu propia página. Añade un encabezado a la vez y revisa que todo cargue.
¿Cómo evito que mi dirección pages.dev aparezca en Google?
Agrega una regla que ponga X-Robots-Tag: noindex en la dirección pages.dev de tu proyecto. Es un ejemplo de la propia documentación de Cloudflare: la ruta es https://:project.pages.dev/*, con ese encabezado debajo.
Google explica en su documentación sobre robots meta y X-Robots-Tag que cualquier regla válida en una meta etiqueta robots también funciona en este encabezado, y que es la opción recomendada para archivos que no son HTML, como PDF o imágenes.
Error común: bloquear en robots.txt la URL que quieres desindexar. Google solo ve el noindex si puede rastrear la página; si robots.txt la bloquea, la regla se ignora. Si usas robots.txt para bots de IA, revisa también nuestra guía de robots.txt y bots de IA.
¿Qué límites y reglas de prioridad tiene?
El máximo es de 100 reglas, con un tope de 2.000 caracteres por línea. Además, tres reglas de comportamiento evitan sorpresas:
- Los redirects de
_redirectsse aplican antes que los encabezados, así que un redirect gana sobre una regla de_headers. En la documentación de redirects el código por defecto es 302 y se aceptan 301, 302, 303, 307 y 308. - Los encabezados de
_headersreemplazan los valores por defecto que envía Cloudflare. - No se aplican a respuestas generadas por Pages Functions. Si tu proyecto las usa, define los encabezados dentro del código de la Function.

¿Cómo compruebo que funciona?
Publica el cambio y revisa los encabezados reales de la respuesta, no solo el archivo. En el navegador, abre las herramientas de desarrollo, pestaña Red, selecciona la página o el archivo y mira los encabezados de respuesta. Si falta alguno, revisa la sangría, que la ruta coincida y que no haya un redirect o una Function interfiriendo.
Después, pide a Google que vuelva a rastrear lo que cambiaste desde Search Console, como se explica en la guía de Search Console y sitemap. Y si aún no sabes qué incluye el plan de Cloudflare que usas, aquí está la guía del plan gratis.
En resumen
Aquella dirección pages.dev que aparecía junto a tu dominio se resuelve con tres líneas en un archivo de texto. _headers es una de las mejoras más baratas que puedes hacer a una web estática: caché mejor, seguridad básica y control de lo que Google indexa. Si quieres que lo dejemos configurado y probado en tu sitio, conoce nuestro servicio de hosting y dominios.
Preguntas frecuentes
¿Dónde va el archivo _headers en un proyecto Astro?
En la carpeta public/, junto a tus otros archivos estáticos. Al construir el sitio se copia a la salida y Cloudflare Pages lo lee sin servirlo como archivo.
¿Cuántas reglas admite _headers?
Según la documentación de Cloudflare, un máximo de 100 reglas, y cada línea puede tener hasta 2.000 caracteres contando espacios, nombre y valor del encabezado.
¿Puedo evitar que mi dirección pages.dev aparezca en Google?
Sí. La propia documentación de Cloudflare propone una regla para https://:project.pages.dev/* con el encabezado X-Robots-Tag: noindex.
¿Funciona _headers si uso Pages Functions?
No para las respuestas que genera una Function. En ese caso los encabezados se definen dentro del código de la Function.
¿Qué pasa si una URL tiene una regla de _headers y un redirect?
El redirect se aplica primero, así que gana sobre la regla de encabezados.
No te quedes con la teoría: aplícalo a tu negocio
Implementamos Hosting y dominios de punta a punta, con tu operación real. La primera conversación no tiene costo.




