Redirecciones limpias en Cloudflare Pages
Al mover un sitio de Vercel a Cloudflare Pages me llevé una sorpresa: los redirects que tenía en astro.config.mjs dejaron de funcionar. Normal —esa config la traduce el adapter de la plataforma, y en un build estático sin adapter no hay quien la aplique—. En Cloudflare el sitio correcto es otro, y es más simple.
_redirects: 301 nativos
Cloudflare Pages lee un fichero _redirects en la raíz del build. Como Astro copia public/ a dist/, basta con ponerlo ahí. Un redirect por línea: origen, destino y código.
# public/_redirects
/download /resume 301
/es/descargar /es/curriculum 301
Son 301 de verdad (permanentes), que es lo que quieres para SEO cuando mueves una URL. Nada de páginas HTML con meta-refresh.
www → apex: elige un canónico
El otro clásico: servir el sitio en un solo hostname y redirigir el otro. Yo uso el apex sin www como canónico (coincide con el canonical y el sitemap), y mando www → apex con un 301.
Si no lo haces, www.tudominio.com suele devolver un 521 de Cloudflare (“Web Server Is Down”): el www tiene DNS proxied pero no está enrutado a ningún origin. No es un bug de tu código —es routing—. Se arregla con una Redirect Rule en Cloudflare (Rules → Redirect Rules), 301 y preserve path/query.
Conclusión
En Cloudflare Pages estático, public/_redirects cubre tus 301 de rutas, y una Redirect Rule canonicaliza www → apex. Menos config que un adapter, redirecciones permanentes de verdad, y te ahorras el 521 fantasma que asusta en las auditorías SEO pero no es culpa del código.