Astro 5 vs Next.js 15: Comparación técnica completa 2026
Para headless WordPress, Astro 5 es más rápido y barato en contenidos: 0 KB JS, PageSpeed 98-100, TTFB 10-40 ms, LCP 0,4-1,2 s y hosting en Cloudflare Pages. Elige Next.js 15 (~85-150 KB React) con login, carrito y estado de la app.
Abajo: tabla de Core Web Vitals, costes de hosting CDN vs Node.js y una matriz de decisión de nuestros proyectos Headless WordPress.
Qué versiones de Astro y Next.js cubre esta comparación
Esta comparación describe Astro 5 y Next.js 15, las versiones principales para las que se escribió. Astro 5.0 se publicó en npm el 3 de diciembre de 2024 y la última versión de la rama 5.x, la 5.18.2, el 26 de mayo de 2026. Next.js 15.0 salió el 21 de octubre de 2024 y la rama 15.x sigue recibiendo parches: la 15.5.28 se publicó el 14 de octubre de 2026. Las fechas proceden del campo time de las entradas astro y next del registro de npm.
Ambos proyectos han avanzado. A 14 de octubre de 2026, las versiones actuales son Astro 7.3.8 y Next.js 16.4.1. La división de arquitectura que se describe abajo se mantiene en las versiones nuevas: Astro genera HTML estático e hidrata islas solo cuando hace falta, y Next.js genera una aplicación React basada en Server Components. Las dos secciones del final, sobre Astro 6 y 7 y sobre Next.js 16, recogen los cambios que afectan a los ejemplos de código de este artículo.
Diferencias de arquitectura entre Astro y Next.js
Para comprender las diferencias de rendimiento, debemos examinar los cimientos de ambos frameworks.
Cómo funciona la arquitectura de islas en Astro 5
Astro ha sido diseñado específicamente para sitios web basados en contenidos (blogs, documentación, porfolios, webs corporativas y de marketing). Su premisa fundamental es que cualquier sitio web debería entregarse al navegador como HTML estático por defecto, inyectando código JavaScript únicamente donde la interactividad lo requiera.
┌──────────────────────────────────────────────┐
│ Cabecera HTML Estática │
├──────────────────────────────────────────────┤
│ Barra Lateral │
│ │
│ ┌─────────────────────────┐ │
│ │ Isla React │ < Cargada │
│ │ (Carrito Interactivo) │ bajo dem. │
│ └─────────────────────────┘ │
│ │
│ Contenido Estático │
├──────────────────────────────────────────────┤
│ Pie de Página Estático │
└──────────────────────────────────────────────┘Astro logra esto mediante la arquitectura de islas (Islands Architecture). Cada componente se renderiza a HTML puro en el servidor durante la fase de compilación. Si usas React, Vue o Svelte, Astro elimina el código del runtime de estas librerías antes de enviar la página al usuario.
Si un componente requiere interactividad en el cliente (como un menú móvil o un buscador), el desarrollador añade una directiva específica (por ejemplo, client:visible o client:load). Solo entonces Astro descargará el JavaScript necesario y realizará la hidratación de ese componente específico en el navegador.
Adicionalmente, Astro 5 introduce la API unificada Content Layer, que permite cargar e integrar datos desde APIs externas (como Headless WordPress o bases de datos de contenido) de forma extremadamente eficiente gracias a un almacén de datos persistente que se rellena durante el build.
Cómo funcionan los React Server Components en Next.js 15
Next.js 15 ha sido concebido para aplicaciones web altamente interactivas (plataformas SaaS, redes sociales, paneles de administración y e-commerce avanzados). Su premisa de diseño considera el sitio web como una aplicación React unificada, donde la lógica se divide entre el servidor y el cliente para mejorar el tiempo de carga.
Mediante el uso de App Router, Next.js emplea React Server Components (RSC) de forma nativa. Los RSC se ejecutan enteramente en el servidor. A diferencia de las técnicas tradicionales de renderizado del lado del servidor (SSR), no envían su código de componente ni su estado de ejecución al navegador del cliente, evitando el proceso de hidratación para esa parte de la interfaz.
Sin embargo, al ser un entorno diseñado específicamente alrededor de React, Next.js inyecta de forma obligatoria un paquete inicial de JavaScript (~85KB a 150KB) correspondiente al runtime de la aplicación React y sus enrutadores internos para posibilitar transiciones de página fluidas en el cliente.
En su versión 15, Next.js incorpora soporte para Partial Prerendering (PPR), una característica que combina estructuras estáticas con zonas dinámicas. De este modo, la estructura principal de la página (el shell) se sirve de forma instantánea al usuario y las partes dinámicas se transmiten en segundo plano utilizando límites de React <Suspense> conforme se procesan en el servidor. En Next.js 15, PPR era una opción experimental disponible en las versiones canary; Next.js 16 la sustituyó por cacheComponents.
Astro vs Next.js, rendimiento y Core Web Vitals
Google otorga un peso determinante al rendimiento de carga de una página en sus resultados de búsqueda mediante las métricas de Core Web Vitals (LCP, INP, TTFB).
| Métrica de Rendimiento | Astro 5 | Next.js 15 |
|---|---|---|
| JavaScript enviado por defecto | 0 KB | ~85 KB - 150 KB (Runtime React) |
| PageSpeed Móvil típico | 98-100 | 85-95 |
| TTFB (Contenido Estático) | 10ms - 40ms | 25ms - 75ms |
| Largest Contentful Paint (LCP) | 0.4s - 1.2s | 0.8s - 2.2s |
| Interaction to Next Paint (INP) | < 30ms (Excelente) | 50ms - 150ms (Aceptable) |
| Tiempo de compilación (1.000 págs) | 20s - 45s (Basado en Vite) | 45s - 120s (Turbopack) |
| Soporte de frameworks de cliente | React, Vue, Svelte, Solid, Vanilla | Solo React |
Por qué Astro 5 es más rápido en sitios de contenido
Al no enviar JavaScript al cliente de manera predeterminada:
- El LCP disminuye sustancialmente ya que la página de HTML estático y los estilos integrados llegan de inmediato al navegador, lo que permite renderizar el contenido visual principal de inmediato.
- El INP se mantiene en rangos óptimos porque el navegador no tiene que pausar la ejecución de la página para procesar e hidratar un gran árbol de componentes React, permitiendo al usuario interactuar con la página al instante.
- Bajo peso de transferencia: Los payloads reducidos son ideales para redes de datos móviles de velocidad limitada comunes en smartphones.
Cuándo es mejor Next.js 15 que Astro
Aunque tiene más sobrecarga inicial de red, su arquitectura de cliente-servidor proporciona una experiencia superior en flujos complejos:
- Navegación ultrarrápida tras la carga inicial: Tras descargar el JavaScript de React, las transiciones entre páginas se gestionan en el navegador sin recargar la web entera. Solo se solicita el payload RSC o JSON de la página de destino, aportando sensación de aplicación nativa.
- Manejo de estado global fluido: Al estar toda la aplicación construida con React, es sencillo compartir datos entre componentes no adyacentes usando herramientas estándar (React Context, Zustand, etc.). En Astro, la intercomunicación entre diferentes islas dinámicas requiere técnicas de paso de mensajes mediante eventos del navegador o el uso de nanostores.
WordPress headless con Astro o Next.js
La conexión y la sincronización de contenidos con WordPress se resuelven de modos diferentes en cada una de estas herramientas.
Cómo cargar datos de WordPress con Content Layer API en Astro 5
Astro 5 incluye la API de Content Layer. En lugar de realizar peticiones HTTP directas a la API de WordPress en el renderizado de cada página, declaras la colección dentro de src/content.config.ts para que Astro procese y guarde la información en un almacén de datos local durante la construcción de la web.
Ejemplo de configuración de Content Layer en Astro para WordPress:
// src/content.config.ts
import { defineCollection, z } from 'astro:content';
const blog = defineCollection({
loader: async () => {
const res = await fetch('https://wp.tusitio.com/wp-json/wp/v2/posts?_embed&per_page=100');
const posts = await res.json();
return posts.map((post: any) => ({
id: post.slug,
title: post.title.rendered,
content: post.content.rendered,
date: post.date,
heroImage: post._embedded?.['wp:featuredmedia']?.[0]?.source_url || '/placeholder.jpg'
}));
},
schema: z.object({
id: z.string(),
title: z.string(),
content: z.string(),
date: z.string(),
heroImage: z.string().optional(),
}),
});
export const collections = { blog };Luego se consume de la siguiente forma en tu página de Astro:
---
// src/pages/blog/[slug].astro
import { getCollection } from 'astro:content';
export async function getStaticPaths() {
const posts = await getCollection('blog');
return posts.map(post => ({
params: { slug: post.id },
props: { post },
}));
}
const { post } = Astro.props;
---
<Layout title={post.data.title}>
<article>
<h1>{post.data.title}</h1>
<img src={post.data.heroImage} alt={post.data.title} />
<div set:html={post.data.content} />
</article>
</Layout>Cómo obtener datos de WordPress en Next.js 15 con fetch cache
Next.js utiliza componentes del servidor para interactuar con la base de datos de WordPress a través del fetch nativo, configurando etiquetas de caché y políticas de revalidación.
// app/blog/[slug]/page.tsx
import { notFound } from 'next/navigation';
interface WPPost {
title: { rendered: string };
content: { rendered: string };
slug: string;
}
async function getPost(slug: string): Promise<WPPost | null> {
const res = await fetch(`https://wp.tusitio.com/wp-json/wp/v2/posts?slug=${slug}`, {
next: {
revalidate: 3600, // Revalidación cada hora (ISR)
tags: ['posts', `post-${slug}`]
}
});
const posts = await res.json();
return posts[0] || null;
}
export default async function BlogPostPage({ params }: { params: Promise<{ slug: string }> }) {
const { slug } = await params; // params is a Promise since Next.js 15
const post = await getPost(slug);
if (!post) {
notFound();
}
return (
<article className="max-w-4xl mx-auto py-8">
<h1 className="text-4xl font-bold">{post.title.rendered}</h1>
<div
className="prose mt-6"
dangerouslySetInnerHTML={{ __html: post.content.rendered }}
/>
</article>
);
}ISR en Next.js o SSG en Astro con WordPress
- La regeneración estática incremental (ISR) de Next.js destaca por su flexibilidad ante grandes cantidades de contenido en movimiento. Cuando un redactor publica una nueva entrada en el panel de WordPress, se puede notificar mediante un webhook a Next.js para invalidar la caché (
revalidateTag('posts')) y regenerar esa página de forma transparente y sin necesidad de recompilar la web completa. - Astro 5 emplea la generación estática (SSG) de forma clásica. Un cambio en WordPress inicia la compilación del build de Astro. Para proyectos con menos de 5.000 páginas, la compilación se realiza normalmente en menos de un minuto, por lo que cubre bien la mayoría de flujos editoriales. Para webs más grandes, Astro 5 fusionó el antiguo modo
hybridconstatic, de modo que con un adaptador instalado cada ruta puede renderizarse bajo demanda en lugar de en el build (guía de actualización a Astro 5).
Astro o Next.js para desarrolladores
La productividad del equipo depende en gran medida de las convenciones del framework y las herramientas de su ecosistema.
Se puede usar React, Vue o Svelte en Astro
La ventaja diferencial de Astro es que no impone ningún framework en particular. Si tus desarrolladores dominan Vue, Svelte o React, pueden usar sus componentes de forma conjunta en las páginas de Astro. Además, dado que el código se escribe en archivos .astro mediante sintaxis muy similar a HTML y CSS nativos, la curva de aprendizaje para perfiles menos experimentados es reducida en comparación con Next.js.
Next.js solo funciona con React
Next.js requiere obligatoriamente el uso de React. Esto restringe las opciones del equipo, pero al mismo tiempo abre las puertas al mayor ecosistema de librerías del sector web actual. Tienes a tu disposición miles de librerías de UI ya optimizadas (como Radix o shadcn/ui), herramientas de animación y de gestión de estado complejas diseñadas en exclusiva para React.
Cuánto cuesta el hosting de Astro y Next.js
Cuánto cuesta el hosting de Astro
Al generar archivos HTML y CSS estáticos, Astro se puede alojar en redes CDN perimetrales globales (como Cloudflare Pages, Netlify o GitHub Pages) sin coste o con tarifas muy reducidas:
- No requiere servidores dedicados ejecutando Node.js.
- Los costes de transferencia y ancho de banda en CDNs estáticos son mínimos.
- Elimina tareas de mantenimiento de servidores y parches de seguridad a nivel de sistema operativo.
Cuánto cuesta el hosting de Next.js
Si utilizas Next.js con todas sus características dinámicas activadas (Server Actions, streaming, SSR e ISR interactivo), necesitarás un entorno capaz de procesar JavaScript en el lado del servidor:
- Vercel ofrece la mejor experiencia sin configuración previa, pero los costes asociados a la transferencia de datos y la computación serverless se elevan rápidamente con el volumen de tráfico.
- El autoalojamiento requiere implementar contenedores Docker y servidores Node.js dedicados en proveedores como AWS o DigitalOcean, con las consecuentes necesidades de monitorización y balanceo de carga.
Cuándo elegir Astro o Next.js
Utiliza esta lista de comprobación de 8 puntos para evaluar tu proyecto:
- ¿El 80% o más del sitio web es contenido estático (webs corporativas, blogs, porfolios)?
- Sí: Elige Astro.
- No: Elige Next.js.
- ¿El sitio web requiere inicio de sesión, paneles interactivos para clientes o estado complejo?
- Sí: Elige Next.js.
- No: Elige Astro.
- ¿Es el rendimiento móvil medido en PageSpeed la métrica de negocio más importante?
- Sí: Elige Astro.
- No: Elige Next.js.
- ¿Estás desarrollando una aplicación SaaS con actualizaciones dinámicas continuas en el cliente?
- Sí: Elige Next.js.
- No: Elige Astro.
- ¿El equipo prefiere trabajar con múltiples tecnologías (Vue, Svelte, Vanilla JS) según el caso?
- Sí: Elige Astro.
- No: Elige Next.js.
- ¿Deseas alojar el frontend con un coste cercano a cero en una CDN global como Cloudflare Pages?
- Sí: Elige Astro.
- No: Elige Next.js.
- ¿Necesitas dar soporte a una tienda e-commerce de alto volumen con lógica compleja de carrito y stock en tiempo real?
- Sí: Elige Next.js.
- No: Elige Astro.
- ¿Es el backend un CMS WordPress en modo Headless donde la velocidad de carga de artículos es la prioridad?
- Sí: Elige Astro.
- No: Elige Next.js.
Qué cambió en Astro 6 y Astro 7 para un frontend de WordPress
La guía de actualización a Astro 6 recoge estos cambios que afectan a un build con WordPress headless:
- Node 18 y Node 20 dejan de estar soportados. Astro 6 necesita Node 22.12.0 o superior.
- Vite pasa a la versión 7 y Zod a la versión 4, así que los esquemas Zod propios en
src/content.config.tspueden necesitar cambios. - La API antigua de Content Collections se ha eliminado. Cada colección tiene que usar la Content Layer API con un loader, como en el ejemplo con WordPress de arriba.
Astro.glob()desaparece en favor deimport.meta.glob().- Las colecciones live, la configuración de CSP en
security.cspy la API de fuentes son estables.
Las colecciones live importan para WordPress. Según la guía de colecciones de contenido, obtienen los datos en tiempo de ejecución en lugar de durante el build, se definen en src/live.config.ts y devuelven los datos directamente sin guardarlos en el almacén de datos. Una entrada editada en WordPress puede aparecer entonces sin recompilar, lo que acorta la distancia con el ISR de Next.js descrito antes.
La guía de actualización a Astro 7 añade Vite 8, un compilador escrito en Rust que sustituye al compilador en Go y es más estricto con la sintaxis HTML no válida, el nuevo valor por defecto 'jsx' para compressHTML, caché de rutas estable y la eliminación del paquete @astrojs/db. El marcado de plantillas .astro que el compilador antiguo toleraba puede romper el build tras la actualización, así que el compilador estricto es lo primero que conviene probar.
Qué cambió en Next.js 16 para un frontend de WordPress
La guía de actualización a Next.js 16 recoge estos cambios que afectan al código de este artículo:
- El acceso síncrono a
params,searchParams,cookies(),headers()ydraftMode(), que Next.js 15 aún permitía como modo de compatibilidad temporal, se ha eliminado. El componente de página de arriba ya espera aparamsconawait, como recomienda la guía de actualización a Next.js 15. revalidateTagrecibe un segundo argumento con un perfilcacheLife, de modo que el handler del webhook llama arevalidateTag('posts', 'max'). Para expirar datos al momento dentro de una Server Action, la guía remite a la nueva funciónupdateTag.- Turbopack es el bundler por defecto de
next devynext build. Un proyecto con configuraciónwebpackpropia falla en el build salvo que use--webpacko migre esa configuración. - La opción experimental de PPR se ha eliminado. El prerenderizado parcial se activa ahora con
cacheComponents: true, y la guía advierte de que funciona de otra manera que en las versiones canary de Next.js 15. middleware.tspasa a llamarseproxy.ts. El proxy solo se ejecuta en el runtime de Node.js; los proyectos que necesitan el runtime edge mantienenmiddleware.- Node.js 20.9 es la versión mínima, el comando
next lintse ha eliminado y el soporte de AMP también.
Puede Next.js exportar un sitio estático como Astro
Puede, con límites. Con output: 'export' en next.config.js, next build escribe archivos HTML, CSS y JS en una carpeta out que cualquier hosting estático puede servir, según la guía de exportación estática. Los Server Components siguen ejecutándose, pero solo durante el build. La misma guía enumera lo que deja de funcionar: rutas dinámicas sin generateStaticParams(), route handlers que leen la petición, cookies, rewrites, redirecciones, cabeceras, proxy, Incremental Static Regeneration, optimización de imágenes con el loader por defecto, Draft Mode y Server Actions.
En WordPress headless esa lista elimina las dos funciones que suelen justificar Next.js: el ISR tras un webhook de publicación y las vistas previas en Draft Mode para el equipo editorial. Las transiciones entre rutas en una exportación estática siguen ocurriendo en el navegador, que por eso carga React como en una aplicación de una sola página. Si el sitio acaba siendo estático, Astro produce el mismo tipo de resultado sin ese runtime.
Astro cubre la dirección contraria. Con un adaptador instalado, la directiva server:defer convierte un solo componente en una isla de servidor que se renderiza bajo demanda mientras el resto de la página sigue siendo estático, y un elemento hijo con slot="fallback" muestra contenido provisional (guía de server islands). Así caben una cabecera para usuarios con sesión iniciada o un contador del carrito en una página de Astro que por lo demás es estática.
Conclusión
En 2026, la elección entre Astro 5 y Next.js 15 no se basa en cuál de los dos es técnicamente superior, sino en la naturaleza y los requerimientos arquitectónicos de tu desarrollo.
Astro 5 se consagra como la opción ideal para sitios enfocados en la difusión de contenidos. Ofrece velocidades de carga de primer nivel con una transferencia mínima de bytes y costes de infraestructura sumamente reducidos. Si desarrollas una web corporativa, un blog, o un portal Headless WordPress orientado a SEO, Astro es la opción más segura.
Next.js 15 representa el estándar de desarrollo para aplicaciones interactivas. Proporciona un marco de trabajo React full-stack robusto, diseñado para manejar estados complejos y flujos de usuario dinámicos. Si tu proyecto es un SaaS, un portal transaccional o un e-commerce con checkout, Next.js es la herramienta a utilizar.
Si estás planificando una migración desde plataformas tradicionales monolíticas, te sugiero evaluar las características de tu portal con detalle. Si necesitas asesoramiento para planificar tu migración a Headless WordPress o tu desarrollo con Astro, puedes contactarme para obtener una evaluación técnica a medida.







