Redirecciones limpias en Cloudflare Pages

Diagrama de redirecciones 301 hacia el dominio canónico
Diagrama de redirecciones 301 hacia el dominio canónico

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.