Astro 5 vs Next.js 15: Comparação técnica completa 2026
Para headless WordPress, o Astro 5 é mais rápido e barato em conteúdos: 0 KB JS, PageSpeed 98-100, TTFB 10-40 ms, LCP 0,4-1,2 s e alojamento em Cloudflare Pages. Escolha Next.js 15 (~85-150 KB React) para login, carrinho e estado da app.
Segue a tabela de Core Web Vitals, custos de alojamento CDN vs Node.js e uma matriz de decisão das nossas implementações Headless WordPress.
Que versões do Astro e do Next.js esta comparação abrange
Esta comparação descreve o Astro 5 e o Next.js 15, as versões principais para as quais foi escrita. O Astro 5.0 foi publicado no npm a 3 de dezembro de 2024 e a última versão da linha 5.x, a 5.18.2, a 26 de maio de 2026. O Next.js 15.0 saiu a 21 de outubro de 2024 e a linha 15.x continua a receber correções: a 15.5.28 foi publicada a 14 de outubro de 2026. As datas vêm do campo time das entradas astro e next no registo npm.
Os dois projetos avançaram. A 14 de outubro de 2026, as versões atuais são o Astro 7.3.8 e o Next.js 16.4.1. A divisão de arquitetura descrita abaixo mantém-se nas versões mais recentes: o Astro gera HTML estático e hidrata ilhas apenas quando necessário, o Next.js gera uma aplicação React assente em Server Components. As duas secções perto do fim, sobre o Astro 6 e 7 e sobre o Next.js 16, indicam as alterações que afetam os exemplos de código deste artigo.
Diferenças de arquitetura entre Astro e Next.js
Para compreender as discrepâncias de velocidade de carregamento, é essencial analisar as bases arquitetónicas de cada ferramenta.
Como funciona a arquitetura de ilhas no Astro 5
O Astro foi desenhado especificamente para sites orientados a conteúdo (sites institucionais, blogs, documentações, portefólios e páginas de conversão de marketing). O seu conceito de design dita que as páginas devem ser servidas ao navegador como HTML estático por defeito, injetando JavaScript apenas onde a interatividade for estritamente necessária.
┌──────────────────────────────────────────────┐
│ Cabeçalho HTML Estático │
├──────────────────────────────────────────────┤
│ Barra Lateral │
│ │
│ ┌─────────────────────────┐ │
│ │ Ilha React │ < Carregada │
│ │ (Carrinho Interativo) │ sob dem. │
│ └─────────────────────────┘ │
│ │
│ Conteúdo Estático │
├──────────────────────────────────────────────┤
│ Rodapé HTML Estático │
└──────────────────────────────────────────────┘O Astro atinge este patamar através da arquitetura de ilhas (Islands Architecture). Cada componente da interface é processado para HTML puro no servidor no momento da compilação. Se desenvolver componentes em React, Vue ou Svelte, o Astro descarta o código de runtime dessas bibliotecas antes de enviar os dados ao utilizador final.
Caso um elemento específico requeira interatividade no cliente (como um carrossel de imagens ou uma caixa de pesquisa), o programador adiciona uma diretiva de cliente (por exemplo, client:visible ou client:load). Apenas nesse cenário o Astro descarregará o JavaScript correspondente e executará a hidratação dessa ilha específica no navegador.
Adicionalmente, o Astro 5 introduz a API de Content Layer, que permite gerir o carregamento e cache de dados de APIs externas (como o Headless WordPress) de forma extremamente otimizada, guardando a informação num armazenamento de dados persistente.
Como funcionam os React Server Components no Next.js 15
O Next.js 15 foi idealizado para aplicações web altamente dinâmicas (portais transacionais, painéis de gestão SaaS, redes sociais e e-commerce avançados). A sua fundação de engenharia encara o site como uma aplicação React unificada, distribuindo dinamicamente o código entre o servidor e o cliente.
Através do App Router, o Next.js faz uso de React Server Components (RSC) por defeito. Os RSCs correm a 100% no servidor. Ao contrário das soluções clássicas de Server-Side Rendering (SSR), não enviam o código dos componentes React nem o estado para o cliente, eliminando o overhead de hidratação dessas áreas da página.
Todavia, por assentar nativamente na infraestrutura do React, o Next.js carrega obrigatoriamente um pacote de JavaScript base (~85KB a 150KB) correspondente ao runtime da aplicação e aos enrutadores do framework, garantindo assim transições de rota fluidas sem necessidade de recarregar o navegador.
Na sua versão 15, o Next.js aprimora o suporte para Partial Prerendering (PPR). Esta funcionalidade permite acoplar estruturas estáticas com áreas dinâmicas. O invólucro estático (shell) da página é servido de imediato a partir do cache, enquanto os blocos dinâmicos, envolvidos por tags <Suspense>, são transmitidos em fluxo à medida que são resolvidos no servidor. No Next.js 15, o PPR era uma flag experimental disponível nas versões canary; o Next.js 16 substituiu-a por cacheComponents.
Astro vs Next.js, desempenho e Core Web Vitals
As métricas de Core Web Vitals (LCP, INP, TTFB) são fatores diretos de posicionamento no motor de busca da Google. Tempos de carregamento lentos penalizam o tráfego orgânico.
| Métrica de Desempenho | Astro 5 | Next.js 15 |
|---|---|---|
| JavaScript enviado por defeito | 0 KB | ~85 KB - 150 KB (Runtime React) |
| PageSpeed Móvel típico | 98-100 | 85-95 |
| TTFB (Conteúdo 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 (Aceitável) |
| Tempo de compilação (1.000 págs) | 20s - 45s (Baseado em Vite) | 45s - 120s (Turbopack) |
| Suporte de frameworks de cliente | React, Vue, Svelte, Solid, Vanilla | Apenas React |
Porque é que o Astro 5 é mais rápido em sites de conteúdo
A ausência de JavaScript enviado ao navegador traduz-se em métricas ótimas:
- O LCP é reduzido, uma vez que a página HTML chega limpa e com estilos inline, permitindo que a imagem principal ou o texto em destaque sejam desenhados de imediato.
- O INP é minimizado, dado que o processador do dispositivo não é obrigado a despender recursos a analisar e hidratar árvores complexas de componentes React. A interface fica disponível para toques de imediato.
- Redução do consumo de dados: Menores pesos de transferência garantem excelente experiência em acessos móveis com redes limitadas (3G/4G).
Quando é que o Next.js 15 é melhor do que o Astro
Apesar de carregar um peso inicial maior no primeiro acesso, a sua arquitetura cliente-servidor proporciona vantagens únicas em fluxos de aplicação:
- Navegação instantânea entre rotas: Uma vez descarregado o runtime do React, a mudança de rota ocorre no cliente sem necessidade de recarregar a estrutura HTML. Apenas o payload RSC ou JSON é solicitado ao servidor, resultando em transições extremamente rápidas.
- Partilha de estado simplificada: A integração total com o ecossistema React facilita a sincronização de dados entre componentes de diferentes áreas do site usando Context API ou bibliotecas de estado (como Zustand). No Astro, a comunicação entre ilhas exige eventos do browser ou bibliotecas de micro-estado baseadas em nanostores.
WordPress headless com Astro ou Next.js
A sincronização de dados com a API do WordPress apresenta fluxos e abordagens distintas em cada framework.
Como carregar dados do WordPress com a Content Layer API do Astro 5
Com a Content Layer API do Astro 5, os conteúdos são mapeados durante o build da aplicação e guardados num armazenamento de dados persistente. Isto evita chamadas repetidas à API externa do WordPress a cada renderização.
Exemplo de mapeamento na configuração do Astro:
// src/content.config.ts
import { defineCollection, z } from 'astro:content';
const blog = defineCollection({
loader: async () => {
const res = await fetch('https://wp.oseusite.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 };Para consumir e renderizar de forma estática no 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>Como obter dados do WordPress no Next.js 15 com cache de fetch
No Next.js, as chamadas à API são realizadas diretamente nos Server Components com o método fetch nativo, permitindo associar tags de cache e tempos de invalidação do conteúdo.
// 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.oseusite.com/wp-json/wp/v2/posts?slug=${slug}`, {
next: {
revalidate: 3600, // Revalidação a 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 no Next.js ou SSG no Astro com WordPress
- A Regeneração Estática Incremental (ISR) do Next.js oferece extrema agilidade para portais de notícias de grande dimensão. Quando um editor atualiza um artigo no WordPress, um webhook pode notificar o Next.js para expirar o cache da tag (
revalidateTag('posts')), atualizando o conteúdo no frontend de forma imediata sem necessidade de compilar a totalidade do site. - O Astro 5 assenta na Geração Estática clássica (SSG). Mudanças no WordPress ativam o build do Astro. Em portefólios ou sites com até 5.000 páginas, a compilação demora habitualmente menos de um minuto, o que é plenamente aceitável para a maioria dos fluxos. Em portais maiores, ajuda o facto de o Astro 5 ter fundido o antigo modo
hybridcomstatic, pelo que, com um adaptador instalado, cada rota pode ser gerada a pedido em vez de no build (guia de atualização para o Astro 5).
Astro ou Next.js para programadores
Usar React, Vue ou Svelte no Astro
O maior atrativo do Astro reside no facto de não forçar a equipa a adotar um único ecossistema UI. Pode estruturar páginas combinando componentes React, Vue ou Svelte sem barreiras técnicas. Adicionalmente, a sintaxe de escrita assenta em ficheiros .astro que replicam o comportamento de HTML e CSS normais, reduzindo a curva de aprendizagem.
O Next.js só funciona com React
O Next.js exige obrigatoriamente a adoção do ecossistema React. Apesar de limitar a escolha, esta dependência garante acesso direto à maior comunidade de bibliotecas web da atualidade, incluindo milhares de componentes de interface pré-desenhados (como shadcn/ui, Radix), bibliotecas de animação sofisticadas e controladores de dados complexos.
Quanto custa alojar Astro e Next.js
Quanto custa alojar o Astro
Por exportar ficheiros estáticos de HTML e CSS na compilação, o Astro pode ser alojado de forma gratuita ou com custos mínimos em qualquer rede de CDN global, como o Cloudflare Pages, Netlify ou GitHub Pages:
- Dispensa servidores ativos Node.js em contínua execução.
- Consome o mínimo de largura de banda e tráfego.
- Minimiza custos de equipa técnica com manutenção e segurança de servidores.
Quanto custa alojar o Next.js
Para usufruir de todas as capacidades de processamento dinâmico (Server Actions, revalidação ISR de dados e processamento SSR no servidor), necessitará de servidores configurados com suporte a Node.js:
- A plataforma da Vercel oferece uma excelente integração e configuração simplificada, mas as taxas de transferência de dados e execução serverless podem elevar os custos sob tráfego volumoso.
- A alternativa de autoalojamento implica configurar instâncias dedicadas AWS ou DigitalOcean com Docker, exigindo recursos dedicados a manutenção de sistemas e balanceamento de carga.
Atualização, . A 24 de fevereiro de 2026, a Cloudflare publicou o vinext, uma reimplementação da API do Next.js assente no Vite. Um engenheiro a dirigir IA construiu-o em menos de uma semana, por cerca de 1100 dólares em tokens. Segundo a Cloudflare, o vinext cobre 94% da API do Next.js 16, tem mais de 1700 testes Vitest e 380 testes E2E com Playwright, e o primeiro destino de implementação é o Cloudflare Workers. A própria Cloudflare chama-lhe experimental. Para um frontend Next.js sobre WordPress headless, abre-se mais um caminho de alojamento fora da Vercel, ao lado do adaptador OpenNext. Enquanto for experimental, acompanho-o, e ainda não mudaria para lá o frontend em produção de um cliente com WordPress headless.
Quando escolher Astro ou Next.js
Para guiar a sua escolha, avalie estes 8 pontos:
- O site é composto maioritariamente (80%+) por páginas de conteúdo estático (sites corporativos, blogs, portefólios)?
- Sim: Escolha o Astro.
- Não: Escolha o Next.js.
- O portal exige autenticação de utilizador, perfis dinâmicos ou controlo de estado avançado?
- Sim: Escolha o Next.js.
- Não: Escolha o Astro.
- O PageSpeed e o desempenho no tráfego móvel são a prioridade comercial número um para SEO?
- Sim: Escolha o Astro.
- Não: Escolha o Next.js.
- Está a construir uma aplicação SaaS complexa com atualizações de dados contínuas no browser?
- Sim: Escolha o Next.js.
- Não: Escolha o Astro.
- A equipa de desenvolvimento prefere poder alternar entre diferentes tecnologias (React, Vue, Svelte)?
- Sim: Escolha o Astro.
- Não: Escolha o Next.js.
- Pretende alojar a plataforma de forma gratuita numa infraestrutura CDN como o Cloudflare Pages?
- Sim: Escolha o Astro.
- Não: Escolha o Next.js.
- Trata-se de uma loja online WooCommerce de grande dimensão com gestão de stock complexa em tempo real?
- Sim: Escolha o Next.js.
- Não: Escolha o Astro.
- O projeto utiliza WordPress em arquitetura Headless e o objetivo central é a velocidade máxima de leitura?
- Sim: Escolha o Astro.
- Não: Escolha o Next.js.
O que mudou no Astro 6 e no Astro 7 para um frontend WordPress
O guia de atualização para o Astro 6 indica estas alterações que afetam um build com WordPress headless:
- O Node 18 e o Node 20 deixaram de ser suportados. O Astro 6 exige o Node 22.12.0 ou superior.
- O Vite passa para a versão 7 e o Zod para a versão 4, por isso os esquemas Zod próprios em
src/content.config.tspodem precisar de ajustes. - A API antiga de Content Collections foi removida. Cada coleção tem de usar a Content Layer API com um loader, como no exemplo com WordPress acima.
- O
Astro.glob()foi removido e substituído porimport.meta.glob(). - As coleções live, a configuração de CSP em
security.cspe a API de fontes estão estáveis.
As coleções live contam para o WordPress. Segundo o guia de coleções de conteúdo, obtêm os dados em tempo de execução e não durante o build, definem-se em src/live.config.ts e devolvem os dados diretamente, sem os gravar no armazenamento de dados. Um artigo alterado no WordPress pode então aparecer sem novo build, o que reduz a distância para o ISR do Next.js descrito antes.
O guia de atualização para o Astro 7 traz o Vite 8, um compilador escrito em Rust que substitui o compilador em Go e é mais rigoroso com sintaxe HTML inválida, o novo valor predefinido 'jsx' para compressHTML, cache de rotas estável e a remoção do pacote @astrojs/db. Marcação em templates .astro que o compilador antigo aceitava pode travar o build depois da atualização, por isso o compilador mais rigoroso é a primeira coisa a testar.
O que mudou no Next.js 16 para um frontend WordPress
O guia de atualização para o Next.js 16 indica estas alterações relevantes para o código deste artigo:
- O acesso síncrono a
params,searchParams,cookies(),headers()edraftMode(), que o Next.js 15 ainda permitia num modo de compatibilidade temporário, foi removido. O componente de página acima já espera porparamscomawait, como recomenda o guia de atualização para o Next.js 15. - O
revalidateTagrecebe um segundo argumento com um perfilcacheLife, por isso o handler do webhook chamarevalidateTag('posts', 'max'). Para expirar dados de imediato dentro de uma Server Action, o guia aponta para a nova funçãoupdateTag. - O Turbopack é o bundler predefinido para
next devenext build. Um projeto com configuraçãowebpackprópria falha o build, a menos que use--webpackou migre essa configuração. - A flag experimental de PPR foi removida. O prerendering parcial ativa-se agora com
cacheComponents: true, e o guia avisa que funciona de forma diferente das versões canary do Next.js 15. - O
middleware.tspassa a chamar-seproxy.ts. O proxy corre apenas no runtime Node.js; os projetos que precisam do runtime edge mantêm omiddleware. - O Node.js 20.9 é a versão mínima, o comando
next lintfoi removido e o suporte a AMP também.
O Next.js consegue exportar um site estático como o Astro
Consegue, com limites. Definir output: 'export' em next.config.js faz com que o next build grave ficheiros HTML, CSS e JS numa pasta out que qualquer alojamento estático serve, segundo o guia de exportação estática. Os Server Components continuam a correr, mas só durante o build. O mesmo guia indica o que deixa de funcionar: rotas dinâmicas sem generateStaticParams(), route handlers que leem o pedido, cookies, rewrites, redirecionamentos, cabeçalhos, proxy, Incremental Static Regeneration, otimização de imagens com o loader predefinido, Draft Mode e Server Actions.
Para WordPress headless, essa lista retira as duas funcionalidades que costumam justificar o Next.js: ISR após um webhook de publicação e pré-visualizações em Draft Mode para a equipa editorial. As transições entre rotas numa exportação estática continuam a acontecer no browser, que por isso carrega o React como numa aplicação de página única. Se o site acaba por ser estático, o Astro produz o mesmo tipo de resultado sem esse runtime.
O Astro cobre a direção oposta. Com um adaptador instalado, a diretiva server:defer transforma um único componente numa ilha de servidor gerada a pedido, enquanto o resto da página continua estático, e um elemento filho com slot="fallback" mostra conteúdo provisório (guia de server islands). Assim, um cabeçalho para utilizadores autenticados ou um contador de carrinho cabem numa página Astro de resto estática.
Conclusão
Em 2026, a escolha de arquitetura entre o Astro 5 e o Next.js 15 não se resume a qual é o melhor framework, mas sim a qual é a ferramenta mais adequada à tipologia do seu desenvolvimento.
O Astro 5 consagra-se como o líder indiscutível no desenvolvimento de sites centrados em conteúdo. Garante velocidades de renderização inigualáveis uilizando o mínimo de recursos no cliente, associando-se a custos de infraestrutura praticamente nulos. Para blogs corporativos, portais institucionais e projetos Headless WordPress com foco em otimização de motores de busca (SEO), o Astro é a recomendação mais acertada.
O Next.js 15 posiciona-se como o padrão da indústria para aplicações interativas. Proporciona um ambiente de desenvolvimento robusto, ideal para a gestão de estados partilhados e interações em tempo real. Se o seu projeto constitui um portal dinâmico com login de clientes, checkout ou lógicas complexas, o Next.js oferece a infraestrutura indicada.
Se a sua empresa planeia efetuar a transição de um sistema WordPress clássico para uma solução moderna, sugiro uma auditoria cuidadosa dos fluxos e interações pretendidas. Se necessitar de apoio especializado para estruturar a sua migração Headless ou se procura um programador especializado em Astro, entre em contacto comigo para obter uma análise técnica detalhada.







