De Next.js a Astro + Cloudflare Pages: por qué migramos y cuánto mejoró el rendimiento
Migramos mintec.co de Next.js a Astro + Cloudflare Pages. Los números reales: 94% menos JavaScript, 0.8s de First Contentful Paint, builds 3x más rápidos y un ahorro de $49/mes en hosting. Esto es lo que aprendimos en el proceso y cómo decidir si tu proyecto debería hacer lo mismo.
De Next.js a Astro + Cloudflare Pages: por qué migramos y cuánto mejoró el rendimiento
Migrar un sitio en producción de un framework a otro no es una decisión que tomamos a la ligera. Cuando heredamos mintec.co, corría sobre Next.js 14 desplegado en Vercel. Funcionaba. Pero tenía problemas: los Core Web Vitals eran inconsistentes, el bundle de JavaScript pesaba 463 KB, los builds tomaban más de 4 minutos, y estábamos pagando $49/mes por un plan Pro que apenas usábamos. Decidimos migrar a Astro + Cloudflare Pages. Este artículo documenta los números reales, las decisiones técnicas y lo que aprendimos en el proceso.
El punto de partida: ¿por qué Next.js no era la respuesta?
Next.js es un framework excelente, pero tiene un sesgo importante: está diseñado para aplicaciones web completas, no para sitios de contenido. En Next.js 14 con SSG (Static Site Generation), cada página genera HTML estático en build time, pero el framework siempre incluye el runtime de React en el bundle del cliente. Eso significa que aunque tu página no tenga un solo componente interactivo, el navegador igual descarga, parsea y ejecuta React — 463 KB de JavaScript que no hacen nada visible para el usuario.
Los números antes de la migración:
| Métrica | Next.js 14 (Vercel) | Notas |
|---|---|---|
| JavaScript total | 463 KB | Incluye React runtime + chunks |
| First Contentful Paint | 2.1 s | Medido desde Perú (Lima) |
| Lighthouse Performance | 72 | Inconsistente entre builds |
| Build time | 4 min 12 s | Proyecto pequeño (~30 páginas) |
| Costo hosting | $49/mes | Vercel Pro plan |
| Despliegue exitoso | 1 de cada 4 builds | Fallos intermitentes por límites de funciones serverless |
El problema no era Next.js per se, sino que estábamos usando la herramienta equivocada para el trabajo. Nuestro sitio es principalmente contenido: páginas de servicios, blog, portfolio. No tenemos dashboards, no tenemos autenticación, no tenemos estado compartido entre páginas. Para lo que necesitábamos, Astro ofrecía una arquitectura más limpia.
La arquitectura Astro + Cloudflare Pages
Astro cambia la premisa fundamental: cero JavaScript por defecto. En lugar de renderizar componentes en el servidor y enviar el runtime al cliente (como hace Next.js), Astro renderiza todo a HTML estático en build time y solo envía JavaScript para componentes que explícitamente lo necesiten (islas).
+------------------+ +------------------+ | Next.js | → | Astro | | | | | | React runtime | | Zero JS by | | (463 KB) | | default (0 KB) | | Pages Router | | Content | | API Routes | | Collections | | Image Opt. | | Astro Islands | | Middleware | | View Transitions| +------------------+ +------------------+ | Deploy: Vercel | | Deploy: CF | | $49/mes | | Pages: FREE | +------------------+ +------------------+
La pila final:
| Capa | Tecnología | Costo |
|---|---|---|
| Framework | Astro v6 | Gratis |
| Estilos | Tailwind CSS v4 | Gratis |
| Hosting | Cloudflare Pages | Gratis (plan gratuito) |
| CDN | Cloudflare Global Network | Gratis |
| CI/CD | GitHub → Cloudflare Pages | Gratis |
| Dominio | mintec.co | Existente |
Los números después de la migración
Los resultados de laboratorio (Lighthouse desde simulación de red lenta 3G):
| Métrica | Antes (Next.js) | Después (Astro) | Mejora |
|---|---|---|---|
| JavaScript total | 463 KB | 27 KB | -94% |
| First Contentful Paint | 2.1 s | 0.8 s | -62% |
| Largest Contentful Paint | 3.4 s | 1.2 s | -65% |
| Total Blocking Time | 320 ms | 0 ms | -100% |
| Cumulative Layout Shift | 0.12 | 0.02 | -83% |
| Lighthouse Performance | 72 | 98 | +26 puntos |
| Build time | 4 min 12 s | 48 s | -81% |
| Costo hosting | $49/mes | $0/mes | -100% |
Los datos de campo (Chrome User Experience Report) también mejoraron significativamente. El percentil P75 de LCP pasó de 3.8 s a 1.6 s en visitas desde Latinoamérica, donde la infraestructura de Cloudflare tiene mejor presencia que Vercel.
Lo que sacrificamos
No todo fue ganancia. Migrar tiene costos que hay que conocer:
Islas de interactividad. Si necesitas componentes React con estado (formularios dinámicos, carritos, dashboards), Astro los soporta mediante
client:load, pero cada isla añade JS al bundle. No es un problema para sitios de contenido, pero sí para aplicaciones interactivas.Sin API routes. Cloudflare Pages Functions pueden reemplazar API routes de Next.js, pero la DX no es tan pulida. Para sitios puramente estáticos como el nuestro, no lo necesitamos.
Ecosistema más pequeño. Astro tiene menos componentes, plugins y tutoriales que Next.js. Para casos de uso estándar (blogs, marketing sites, documentación) está más que cubierto, pero encontrar soluciones a problemas muy específicos puede requerir más investigación.
View Transitions requiere configuración. Aunque Astro 5+ trae integración nativa de View Transitions API, para que funcione bien entre páginas hay que configurar
view-transition-nameen elementos compartidos, lo que añade complejidad al CSS.
Cuándo elegir Astro vs Next.js (nuestro framework de decisión)
Basado en nuestra experiencia, este es el framework que usamos en Mintec para cada tipo de proyecto:
| Tipo de proyecto | Framework | Por qué |
|---|---|---|
| Sitio de contenido / blog | Astro | Zero JS, mejores CWV, builds rápidos, hosting gratuito |
| Landing page / marketing site | Astro | Misma razón: rendimiento máximo con mínimo esfuerzo |
| App con dashboards + auth | Next.js | API routes, middleware, server actions, estado compartido |
| E-commerce (catálogo) | Astro | SSG para productos, islas para carrito |
| E-commerce (completo) | Next.js | SSR para precios dinámicos, autenticación, checkout |
| Documentación / knowledge base | Astro | Contenido + Starlight = match perfecto |
| SaaS multiplataforma | Next.js | Full-stack, server components, streaming |
Lecciones aprendidas
Si estás considerando una migración similar, esto es lo que haríamos igual y lo que haríamos diferente:
Lo que hicimos bien ✅
- Medimos antes de migrar. Lighthouse, WebPageTest, datos de campo de CrUX. Sin líneas base, no sabes si mejoraste.
- Migramos por fases. Primero las páginas estáticas (home, servicios), luego el blog, después las páginas dinámicas. Cada fase validaba la arquitectura.
- Eliminamos dependencias innecesarias. Aprovechamos la migración para revisar cada dependencia. Pasamos de 23 dependencias a 11.
Lo que haríamos diferente 🔄
- Presupuestar más tiempo para View Transitions. La migración de datos fue rápida (2 días); la configuración de animaciones tomó casi una semana adicional.
- No subestimar la configuración de redirects. Teníamos URLs legacy del sitio anterior que necesitaban 38 redirects. En Cloudflare Pages, los redirects se configuran en un archivo
_redirectscon sintaxis específica que tiene sus propios edge cases. - Comunicar el cambio al equipo. Pasamos de un stack conocido (React + Next.js) a uno menos familiar (Astro). La curva de aprendizaje para el equipo fue real.
Conclusión
Migrar de Next.js a Astro + Cloudflare Pages fue la mejor decisión técnica que tomamos para mintec.co. Redujimos el JavaScript en un 94%, mejoramos todos los Core Web Vitals, eliminamos un costo recurrente de $49/mes, y los builds pasaron de 4 minutos a 48 segundos.
Pero no es una receta universal. Next.js sigue siendo superior para aplicaciones web interactivas. La clave está en elegir la herramienta según el tipo de proyecto, no según la moda o la familiaridad.
Si tu sitio es principalmente contenido y estás pagando por funcionalidades que no usas, la migración a Astro probablemente te dé resultados similares. Si necesitas un framework full-stack con dashboards, APIs y autenticación, quédate con Next.js.
Al final, el mejor framework es el que no estorba entre tu contenido y tus usuarios.
¿Tienes un proyecto y no estás seguro de qué stack elegir? En Mintec te ayudamos a tomar la decisión correcta desde el día uno. Contáctanos para una consultoría gratuita de arquitectura web.
Artículos relacionados:
Preguntas Frecuentes
¿Cuándo conviene migrar de Next.js a Astro?
Cuando tu sitio es principalmente contenido (blogs, documentación, marketing sites) y no necesitas funcionalidad server-side compleja ni autenticación en tiempo real. Astro brilla en sitios donde el contenido es king y el rendimiento es prioritario.
¿Astro reemplaza completamente a Next.js?
No. Astro y Next.js resuelven problemas distintos. Astro es ideal para sitios de contenido y marketing donde el JS mínimo y el renderizado estático dan ventajas claras. Next.js sigue siendo la mejor opción para aplicaciones web completas con dashboards, autenticación, API routes y lógica server-side compleja.
¿Cloudflare Pages es suficiente para un sitio en producción?
Sí, absolutamente. Con el plan gratuito de Cloudflare Pages obtienes CDN global, despliegues automáticos desde GitHub, SSL, ancho de banda ilimitado y 500 builds al mes. Para sitios de contenido y marketing, es más que suficiente y supera en rendimiento a opciones como Vercel o Netlify en la mayoría de regiones.



