DEV Community

Conor Dobbs
Conor Dobbs

Posted on • Originally published at tools.thesoundmethod.me

Astro vs Next.js vs SvelteKit for content sites in 2026

Affiliate disclosure: all three frameworks are open source so there's nothing to be paid for here. Tool links go to project sites.

i run content sites on all three. portfolio on Astro, SaaS marketing site on Next.js 15 (App Router), Mother's Day microsite on SvelteKit. here's the decision tree I use.

Short version

pure content (blog, portfolio, marketing, docs): Astro. static HTML by default, ships close to zero JS, best content authoring DX of the three.

content plus complex app behavior in the same site (auth-gated content, dynamic dashboards mixed with marketing): Next.js 15 App Router. Server Components let you compose static and interactive without picking a side.

content sites where you want minimal JS, max interactivity polish, and you already know Svelte: SvelteKit. Svelte 5 runes are a nicer authoring experience than React for most components.

Where Astro wins

Zero JS by default. Astro components render to HTML at build time. the browser downloads ~0KB of JS unless you opt into hydration. for a blog, Lighthouse hits 99-100 without effort. on Next.js or SvelteKit, you fight for it.

Multi-framework islands. you can write a React component, a Svelte component, and a Vue component on the same page. each hydrates independently if needed. niche, but useful for content-heavy sites where you want one interactive piece without committing the whole site to that framework.

Content collections. Astro 4's content collections give you typed frontmatter and content schemas for your markdown. write a blog post, get autocomplete and validation. Next.js has nothing equivalent built in. SvelteKit needs manual setup.

Build output is HTML plus a tiny runtime. host on any static host (CF Pages, Vercel, Netlify, GitHub Pages, S3). no serverless function limits to worry about.

Where Next.js 15 wins

Server Components compose better than alternatives. if half your site is static content and half is auth-gated app behavior, App Router lets you mix freely. a page can render a Server Component (DB read at request time) alongside a Client Component (interactive form) in the same tree. Astro and SvelteKit both make this clunkier.

The Vercel deploy story. one git push, everything optimized. ISR, image optimization, font subsetting, edge functions, preview deploys per PR. all configured. if you're deploying to Vercel, Next.js is the path of least resistance.

Ecosystem maturity. auth, payments, CMS integration, analytics. there's a Next.js-shaped library for it. Astro and SvelteKit have most things, but the long tail is shorter.

Streaming with Suspense. if part of your page is slow (DB query, external API), Next.js streams the fast parts immediately and suspends the slow parts behind skeletons. SvelteKit has streaming too but the API is less ergonomic. Astro doesn't really do streaming.

Where SvelteKit wins

Less JS than Next.js by default. Svelte compiles components to optimized vanilla JS. no virtual DOM, no React runtime. a SvelteKit site is usually 30-50% smaller bundle than the Next.js equivalent.

Svelte 5 runes are the best component model. hot take. after years of React and a few months of Svelte 5, I find runes ($state, $derived, $effect) more readable than React hooks. no dependency arrays. no "did I forget to memoize this" anxiety.

Form actions are the cleanest mutation pattern. progressive enhancement by default. works without JS. use:enhance upgrades to fetch and invalidates loads automatically. cleaner than Next.js Server Actions for most form work.

Adapter flexibility. SvelteKit has first-class adapters for CF Pages, Vercel, Netlify, Node, static. switching deploy targets is a 1-line config change. Next.js's non-Vercel deploys work, but they're second-class.

Cost reality

all three are free open-source frameworks. the cost is deploy plus dev-tool subscriptions:

  • Astro on Cloudflare Pages: $0 free tier covers most content sites. Pages Pro is $20/mo if you exceed.
  • Next.js on Vercel: Hobby tier won't work commercially. Pro is $20/seat/mo minimum. Function pricing adds up.
  • SvelteKit on Cloudflare: same as Astro. $0 free tier comfortable for most.

for pure content sites, Astro plus Cloudflare is the cheapest by a wide margin.

The decision tree I use

  • blog, portfolio, marketing, docs, anything mostly content: Astro
  • SaaS with mixed marketing plus app behavior, deploying to Vercel: Next.js 15 App Router
  • microsite where Svelte expressiveness matters, bundle size matters, you know Svelte: SvelteKit
  • multi-page brochure site for a client: Astro. always Astro. no JS = no maintenance debt.
  • app with a real backend, complex state, and a team that already does React: Next.js 15

What I do

Astro for content sites. Next.js for SaaS marketing plus app. SvelteKit for microsites where I want the polish without the React ceremony.

the mistake I see most often: people pick Next.js for a blog. Next.js for a blog is overkill. the result is a 2MB JS bundle for a page that could've been 12KB of HTML. Astro for content; Next for apps; both is fine.


More production-use comparisons at tools.thesoundmethod.me — written from real use, not vendor PR.

Top comments (0)