Astro vs Next.js for SaaS marketing sites in 2026
An honest comparison of Astro 5 and Next.js 16 for B2B SaaS marketing sites. Performance, AEO, dev velocity, hosting cost, and which fits when. Spoiler: it's not as close as the benchmarks suggest.
— TL;DR
Pick Astro for marketing sites that are mostly static content and need the absolute best AEO posture. Pick Next.js when you're shipping a product app on the same stack and value React's shared mental model over the last 20 Lighthouse points. The benchmarks understate the real gap.
If you're a B2B SaaS team picking a stack for a marketing site in 2026, two frameworks dominate the practical conversation: Astro 5 and Next.js 16. Both are mature, both have great DX, both have first-class hosting on Vercel and Cloudflare. The differences underneath that surface determine which one fits your team. And they're more substantial than the benchmark numbers suggest.
This piece is the honest comparison. It's based on shipping both stacks for B2B SaaS clients in 2024–2026. By the end you'll know which to pick for your specific situation.
#TL;DR
- Pick Astro if: the marketing site is mostly static content, you want the absolute best AEO posture, you don't share components with a product app, your team is comfortable with a non-React framework for the marketing surface.
- Pick Next.js if: you're building a product app on Next anyway, you want the same stack for marketing and product, your marketing site has interactive demos or app-flavored features, you value React shared mental model over the last 20 Lighthouse points.
If you're not sure, default to Next.js. The AEO-cost is real but small; the team-velocity benefit of one stack is substantial.
#The big architectural difference
Astro and Next.js look similar from a project-structure standpoint. Both have a src/app or src/pages layout, both support MDX, both serve content from a content directory. Underneath, they're shaped fundamentally differently.
#Astro's "Islands" model
Astro renders your entire page to static HTML at build time (or request time, your choice). Components are written in .astro files, which are HTML-with-frontmatter. No JavaScript ships unless you opt in. When you do need interactivity, you wrap a component (React, Vue, Svelte, anything) in a client:load, client:idle, or client:visible directive. That single component "island" gets its JS bundle; the rest of the page stays static.
The result: a typical Astro marketing site ships 0–20KB of JavaScript total. Even a content-rich page with three or four interactive widgets stays under 50KB.
#Next.js 16's RSC + App Router model
Next.js 16 with the App Router uses React Server Components (RSC) by default. Pages are React components. You write them once, and Next decides whether to render them on the server (zero JS shipped) or hydrate them on the client (full React runtime).
The catch: Next.js ships ~85KB of JavaScript minimum even on a fully-static RSC page. That's the App Router runtime, the streaming infrastructure, and React's hydration glue. It's not configurable; it ships even if your page does nothing.
For interactive parts, Next.js is comparable to Astro. Both ship roughly the same React + Motion + theme-toggle bundle when you actually need those. The gap is in the static baseline.
#Performance head-to-head
Real numbers from a typical B2B SaaS marketing site (home + 10 service/blog pages, served from Vercel's edge):
| Metric | Astro 5 | Next.js 16 |
|---|---|---|
| Lighthouse Performance (home) | 100 | 95–98 |
| TTFB (cold) | 80–150ms | 100–200ms |
| LCP (75th percentile) | 0.8–1.2s | 1.4–2.1s |
| Total JS shipped (home) | 0–8KB | 85–110KB |
| Build time (50 pages) | 18–28s | 35–60s |
| Hot reload (dev) | 50–150ms | 200–400ms |
Astro wins on every metric. The honest question is how much that matters to your specific situation.
For pure marketing sites read by humans on broadband, the user-facing difference is small. Both feel fast. For users on slow networks (3G, rural, throttled enterprise wifi), Astro feels noticeably snappier. For AI crawlers, which timeout aggressively and de-prioritize slow pages, Astro has a measurable AEO advantage.
#AEO posture
In 2026, the AEO question is the load-bearing one for many B2B SaaS sites. Here's how the two compare on what matters for AI search citation.
#Schema markup
Both stacks support arbitrary JSON-LD via <script type="application/ld+json">. No difference here.
#Server-rendered HTML
Astro: 100% of content ships as server-rendered HTML by default. AI crawlers see everything immediately.
Next.js (App Router with RSC): mostly server-rendered, but Suspense boundaries and 'use client' components can introduce content that arrives after the initial HTML. AI crawlers may or may not wait for it. The fix: avoid 'use client' for any content that should be indexed; lazy-load only progressive enhancements.
#llms.txt generation
Both generate dynamically at request time. Astro endpoints (src/pages/llms.txt.ts) and Next.js route handlers (src/app/llms.txt/route.ts) both work the same way. No advantage.
#Page weight and crawl budget
This is where Astro wins. AI crawlers have aggressive timeouts (often 2–4 seconds). A page that ships 100KB+ of JavaScript and waits for hydration before the meaningful content paints is more likely to be partially indexed or skipped entirely. Astro's zero-JS baseline guarantees full content reaches the crawler.
#prefers-reduced-motion, accessibility, viewport
Both are equivalent. Neither has a structural advantage for accessibility-driven AEO signals.
#Developer experience
The DX comparison depends heavily on what your team knows.
#Content-first DX (Astro wins)
If your marketing site is mostly content (blog, services, case studies, docs) Astro's content collections + MDX integration is the best in class. Type-safe frontmatter via Zod, automatic slug generation, MDX-by-default, no special config. You write content like you'd write blog posts and the framework just handles routing and metadata.
Next.js can do the same with next-mdx-remote or Contentlayer, but it's more setup and the typing isn't as tight.
#React-first DX (Next.js wins)
If your team lives in React all day, Next.js's .tsx files are home turf. You import React components, you reuse them across pages, you share types across your monorepo with the product app. The Astro .astro syntax is a small but real context-switch cost. It looks like HTML but has special directives, and your linter/formatter needs separate config.
#Hot reload speed
Astro's dev server is meaningfully faster (50–150ms hot reload vs 200–400ms for Next.js). On a long writing session, this compounds. Astro feels snappier when you're iterating on content.
#Error messages
Next.js has the better error messages in 2026, by a wide margin. The Turbopack-powered dev overlay is excellent. Astro's errors have improved a lot but still occasionally bottom out at "TypeError in renderer" without a useful stack trace.
#Hosting and cost
Both run anywhere; both have first-class Vercel deployment.
| Hosting concern | Astro | Next.js |
|---|---|---|
| Vercel Free tier coverage | Generous (static ISR cheap) | Generous, but server functions add up |
| Cloudflare Pages | Native, fast | Works, but Edge runtime needed for SSR |
| Bandwidth at scale | ~30–50% less | More, due to JS bundle |
| Cold-start cost | None (static) | 200–500ms on serverless |
For a low-to-mid traffic marketing site (under 100k monthly pageviews), hosting is essentially free on either stack. For high-traffic sites, Astro's static-first model is genuinely cheaper at the bandwidth and compute layers.
#When Astro is the right call
Pick Astro when:
- The site is content-heavy and stable. Services, blog, case studies, pricing
- You want the best possible AEO posture without compromise
- The site doesn't share components with a Next.js product app
- Your team is comfortable with HTML-first markup (the
.astrosyntax) - You expect high volume of marketing content (50+ blog posts, regular content cadence)
- Zero-JS shipping is a value, not a constraint
Real-world fits: agency marketing sites, dev tooling marketing sites where the product is somewhere else (e.g., Trigger.dev), open-source project sites, content-heavy SaaS where the marketing site is meaningfully separate from the product.
#When Next.js is the right call
Pick Next.js when:
- You're already running Next for the product and want one stack
- The marketing site has interactive demos or app-flavored components
- You want React shared mental model across the team
- You value the broader ecosystem (RSC patterns, more libraries, more hires familiar with the stack)
- You're willing to trade ~15% Lighthouse for team velocity
- You want OG image generation, ISR, edge functions as native primitives
Real-world fits: B2B SaaS where the marketing site and product share a codebase (Linear, Vercel, Cal.com), AI-product marketing sites with interactive demos (every YC AI company in 2025–2026), teams that have already standardized on Next for everything.
#Specific feature comparison
| Feature | Astro 5 | Next.js 16 |
|---|---|---|
| MDX content collections | Built-in, type-safe | next-mdx-remote/rsc or Contentlayer |
| OG image generation | astro-og-canvas or third-party | @vercel/og native |
next-themes-equivalent dark mode | Manual setup | next-themes package |
| ISR (incremental static regen) | prerender = true + on-demand | Native revalidate |
| Edge runtime | Cloudflare Pages adapter | Native Vercel Edge |
| API routes | Astro endpoints | Route handlers |
| Image optimization | astro:assets | next/image |
| i18n | Astro i18n routing | Next.js i18n routing |
| RSS / Atom | Built-in plugin | Manual route handler |
Roughly equivalent feature set in 2026. The real differences are in the defaults and the philosophy, not in feature presence.
#The hybrid approach
Some teams (including some we've shipped for) split: marketing site in Astro, product in Next.js. The marketing site gets the AEO posture and zero-JS shipping; the product gets the React infrastructure.
This works, but the maintenance overhead is real. Two repos, two CI pipelines, two deploy targets, two flavors of TypeScript config. The component-sharing story is awkward. You can copy-paste, but the typings drift over time.
In 2026 we recommend the hybrid only when the marketing site is genuinely content-heavy (200+ pages) and the product is genuinely complex (large React app). For everything in between, pick one and live with the tradeoff.
#What we recommend
For most B2B SaaS teams in 2026:
- Pre-product, marketing-only: Astro. Best AEO, fastest builds, lowest hosting cost.
- Product on Next.js, marketing site separate: Next.js for both. The team-velocity gain swamps the ~15% Lighthouse cost.
- Product on something else (Rails, Django, Phoenix), marketing separate: Astro. You don't share components anyway.
- Heavy interactive demos in the marketing site: Next.js. The interactive surface is what you'll be optimizing for, not the static parts.
If you're rebuilding this site. Well, we picked Next.js because the mood selector + theme toggle + interactive contact form pushed us into territory where Next's React-everything model genuinely simplified things. We pay the ~5 Lighthouse points and the ~80KB JS baseline; we get a unified codebase. For our use case it's the right tradeoff. Yours may be different.
#A practical decision tree
- Is the site mostly static content (blog, services, pricing)? → Continue.
- Will you also run a product app? → If yes, what's that built on?
- If product is Next.js → Next.js for marketing too.
- If product is anything else → Astro for marketing.
- No product yet? → Astro for marketing-only; revisit when product picks a stack.
That's the whole thing. Don't overthink it.
#Migration cost
If you've already picked the wrong one, the migration cost is real but bounded:
- Astro → Next.js: ~2–4 weeks for a 20-page site. The content moves cleanly (same MDX); the layouts get rewritten in React.
- Next.js → Astro: ~2–4 weeks for a 20-page site. Components rewritten as
.astro; client:load wrappers added where interactivity is needed.
Most of the cost is the design system port, not the framework port. If your design system lives in Tailwind + shadcn-style components, the port is mostly mechanical.
#The honest verdict
Both frameworks are excellent. The differences are real but smaller than the partisans claim. The decision is mostly about what your team already knows and what your product app runs on. Not about the frameworks themselves.
If you want help picking, or want a productized site sprint shipped in 2 weeks on either stack, that's exactly what we do.
— Want this for your SaaS?
AEO and SEO for SaaS, done properly ↗
The schema, llms.txt, pillar content, and technical AEO infrastructure that gets your SaaS cited in ChatGPT, Perplexity, and Google AI Overviews. Not just ranked in classic search.
— Keep reading
AEO
GA4 → AI search attribution: tracking ChatGPT and Perplexity referrals correctly
A practical guide to tracking inbound traffic from ChatGPT, Perplexity, Claude, and Google AI Overviews in GA4. The referrer values, the channel-grouping fixes, the gotchas in 2026, and the dashboard view that actually informs decisions.
Read post
AEO
How to get cited by ChatGPT in 2026: a B2B SaaS playbook
A concrete playbook for B2B SaaS teams trying to be cited inside ChatGPT answers in 2026. The signals ChatGPT actually weighs, the page-level fixes that move citation share, and what to ignore from the AEO content-marketing noise.
Read post
AEO
Schema.org for B2B agencies: a 2026 implementation guide
A practical schema.org implementation guide for B2B agencies in 2026. The exact JSON-LD types every agency site needs, the agency-specific patterns (ProfessionalService, OfferCatalog, Service tiers), and the validation discipline that keeps schema healthy as the site grows.
Read post