A escolha entre Next.js e um React SPA puro afeta performance, SEO, custo de infra e velocidade de desenvolvimento. Não existe resposta universal — existe a resposta certa para o seu caso.
Quando usar Next.js
Next.js brilha quando você precisa de:
- SEO — páginas de marketing, blog, e-commerce, landing pages
- Performance inicial — Server Components reduzem o JavaScript enviado ao cliente
- Conteúdo dinâmico com cache — ISR permite páginas estáticas que se atualizam sem rebuild
- Full-stack leve — Route Handlers e Server Actions eliminam a necessidade de um backend separado para operações simples
Quando usar React SPA
Um SPA com Vite + React Router faz mais sentido para:
- Dashboards internos — SEO não importa, e a interatividade é constante
- Aplicações atrás de login — todo conteúdo é privado, SSR não agrega valor
- Offline-first — PWAs que precisam funcionar sem internet
- Integração com backend existente — quando o backend já está pronto e o front é apenas um cliente
Os trade-offs que ninguém fala
Complexidade de deploy
Next.js com features avançadas (middleware, ISR, Server Actions) precisa de um runtime Node.js. Não é mais "só jogar no S3". Você vai precisar de Vercel, AWS com containers, ou self-hosting com cuidado.
Um SPA é um diretório de arquivos estáticos. Deploy em qualquer CDN.
Modelo mental
Server Components mudam fundamentalmente como você pensa sobre React. Componentes podem ser async, podem acessar banco de dados diretamente, mas não podem usar useState. A curva de aprendizado é real.
Custo de infra
SPA (Vite): CDN = ~$0-20/mês
Next.js (Vercel): ~$20-150/mês dependendo do tráfego
Next.js (self): Container + CDN = ~$30-100/mêsNossa recomendação
| Cenário | Escolha |
|---|---|
| Site institucional + blog | Next.js |
| SaaS com landing page pública | Next.js |
| Dashboard interno | React SPA |
| MVP rápido full-stack | Next.js |
| App mobile-first (PWA) | React SPA |
Na NexCript, usamos Next.js para 80% dos projetos. A combinação de Server Components + Server Actions simplifica muito a arquitetura quando você precisa de front e back no mesmo projeto.