Which one should you choose?
Choose Astro when most pages look the same to every visitor: a marketing site, a blog, documentation, a site in several languages. Choose Next.js when the project is mostly a signed-in product, with dashboards, editors, accounts and screens that keep state in the browser. The dividing line is how much of the site behaves like an application, not how many pages it has.
We build in both, through our Astro development and Next.js development services, and we run both in production: dardo.studio is an Astro site, and the front ends of Hyper and A medio tono are Next.js 16 on Cloudflare Workers. Either framework can do the other's job. What differs is the default each one starts from, and what it costs you to move away from it. Facts below are as of October 2026.
Two different starting points
Astro starts from HTML. Pages, routes and endpoints are pre-rendered at build time by default, and a route that needs a server opts out on its own, with one line of code and an adapter. Components render to HTML and their JavaScript is stripped, unless you mark one as a client island that loads at once, when the browser is idle or when it scrolls into view (Astro Docs). Islands can be written in React, Preact, Svelte, Vue or Solid, and server islands let a slow or personal fragment, such as an account menu, render separately so it doesn't hold up the rest of the page.
Next.js starts from a React application. In the App Router, layouts and pages are Server Components by default and anything interactive is a Client Component, marked with the use client directive. On a first visit the browser gets HTML, then the RSC payload React uses to reconcile the server and client trees, then the JavaScript that hydrates the interactive parts (Next.js Docs). With Next.js 16.4, released on 6 October 2026, the team recommends Cache Components for every app: new projects get it by default, and it becomes the default in Next.js 17. A page can then combine a prerendered shell, cached sections and sections rendered for each request.
The practical difference: in Astro, JavaScript is something you add, one component at a time. In Next.js, React and the client router come with every page, and the work is keeping your own code out of the bundle. One rule catches teams out: once a file is marked use client, everything it imports ships to the browser too.
What we measured on our own sites
On 14 October 2026 we downloaded pages from sites we built and added up the JavaScript each one loads on arrival, before a visitor clicks anything: the gzip-compressed size of every script file, not counting Cloudflare's analytics beacon. Next.js can prefetch more as links scroll into view; we didn't count that.
Across the web, the averages differ more than our two sites do: our website platform speed report shows how many Astro and Next.js sites pass Core Web Vitals for real visitors, and how much JavaScript each ships, by country.
| Page | Framework and hosting | Script files | Compressed JavaScript | Also inside the HTML |
|---|---|---|---|---|
| Article on dardo.studio | Astro 7, pre-rendered, Cloudflare Workers | 15 | About 43 KB | About 3 KB of small inline scripts |
| Article on A medio tono | Next.js 16, prerendered, OpenNext on Cloudflare Workers | 14 | About 287 KB | About 254 KB of RSC payload, uncompressed |
| Hyper homepage | Next.js 16 with three.js, OpenNext on Cloudflare Workers | 12 | About 444 KB | A scroll-driven 3D story, not a content page |
The 43 KB on dardo.studio covers our own small scripts for the theme, menus and the analytics preferences panel, one page-transition library and Google's web-vitals library for our field measurements; no UI framework reaches the browser. PostHog's library, about 96 KB more, starts after the page has loaded, and not at all for visitors who opt out.
The A medio tono article is prerendered and served from Cloudflare's cache, so the server does almost no work; the weight is all in the browser. About 121 KB of it is the two files that hold React DOM and the Next.js client runtime; the rest is the site's own components and libraries. The RSC payload is a serialized copy of the rendered page that React uses in the browser, many times larger than the roughly 14,000 characters of text a reader actually sees.
This isn't a benchmark. The sites have different features, and A medio tono's tuner and metronome are interactive tools where a React codebase earns its place. It shows where each framework puts weight by default: Next.js buys client-side navigation and one React codebase, and a page that is mostly text needs neither. On Hyper, the largest file, about 167 KB, is three.js itself; on a 3D page like that, the graphics library outweighs the framework. Our website speed optimization work starts from measurements like these, not from the framework's reputation.
Content collections or data fetching
Astro treats content as data it loads during the build. Content collections give each content type a schema, and an entry that breaks it stops the build with an error instead of reaching a visitor. Loaders read Markdown, JSON or YAML from the repository, or pull from a CMS, a database or an API. Astro recommends build-time collections whenever possible and keeps live collections for data that must be current on every request.
The price of that model is a rebuild. On dardo.studio an article goes live two to three minutes after an editor publishes it, because the site rebuilds from the CMS. That suits articles and service pages; stock levels or prices that change during the day belong in on-demand routes.
Next.js fetches data inside Server Components, from wherever it lives, and caching is a decision written into the code. With Cache Components, use cache marks a function or component as cacheable, cacheLife sets how long it stays fresh and cacheTag labels it so it can be refreshed when content changes (Next.js Docs). Two details in that documentation matter for marketing sites:
- Caches belong to a deployment. Cached results don't carry over to a new deploy, so anything cached at request time is computed again after each release.
- Some crawlers get a request-time render. When a page's metadata is dynamic, Next.js detects certain bots by user agent and renders the page on request for them; a data source that only works during the build can send those bots a 500 error.
The CMS behind either framework shapes the editors' day more than the framework does; our headless CMS development service and our comparison of Sanity, Contentful and Payload cover that choice.
Hosting and running cost
A fully pre-rendered Astro site is a folder of files that any static host can serve. On Cloudflare Workers, requests to static assets are free and unlimited (Cloudflare Docs), so the hosting line for a marketing site can be zero. Routes rendered on request need an adapter; Astro maintains official ones for Cloudflare, Netlify, Vercel and Node. dardo.studio is static on Workers except the CMS draft preview, which a Worker renders on request; Superame, a public ranking with verified payments that we built, runs Astro 7 in server mode on Vercel with a Postgres database.
Next.js supports every feature when it runs as a Node.js server or in a Docker container; a static export runs anywhere but drops everything that needs a server (Next.js Docs). As of October 2026 the verified adapters, which run the full Next.js compatibility test suite, are Vercel and Bun. Cloudflare and Netlify are building verified adapters and meanwhile offer their own integrations, whose feature support can vary, so check every feature you rely on.
Both of our Next.js sites run on Cloudflare Workers through OpenNext; A medio tono moved there from Vercel on 30 September 2026. Workers' paid plan starts at USD 5 a month with 10 million requests included and no charge for bandwidth. Wherever a Next.js app runs, a route rendered per request costs compute on every visit, which is why 16.4 added ensureStatic, a setting that fails the build when a dynamic component slips into a page meant to stay static. Our Next.js development page breaks down Vercel and Cloudflare bills in detail.
Upgrades and support windows
Next.js has shipped a new major version every October since 2021 and publishes a written support policy: the current major is in Active LTS, and the previous one gets critical fixes and security updates for two years after its first release. Astro moves faster and supports less: Astro 7 shipped on 22 June 2026, about three months after Astro 6, and the core team provides security fixes for only one previous major, with no end date published (Astro Docs).
| As of October 2026 | Astro | Next.js |
|---|---|---|
| Latest release | 7.3.8 | 16.4.1 |
| Last two majors | 6.0 on 10 March 2026, 7.0 on 22 June 2026 | 15.0 on 21 October 2024, 16.0 on 21 October 2025 |
| Previous major | 6.x: security fixes only | 15.x: Maintenance LTS until about 21 October 2026 |
| Older majors | Unsupported, from 5.x down | Unsupported, from 14.x down |
| Upgrade help | An upgrade guide for every major and the @astrojs/upgrade tool | Codemods and, since 16.4, an agent mode for next upgrade |
A static Astro site that misses an upgrade keeps serving the same files, and no server code runs when a visitor arrives. A Next.js app runs server code for every request that isn't served from cache, so its security releases need applying quickly. In December 2025 a flaw in React Server Components, rated CVSS 10.0, left Next.js 15 and 16 App Router apps open to remote code execution; there was no workaround, only an upgrade (Next.js). Name an owner for upgrades; our website maintenance plans include them.
Ecosystem and the team you have
Next.js has the larger ecosystem by a wide margin. In the week of 6 to 12 October 2026, npm recorded about 67.5 million downloads of next and 7.3 million of astro (npm), roughly nine to one, and about 188 million of react itself. Downloads include automated builds, so treat them as a rough gauge of ecosystem size. Next.js is React all the way down, so every React library and every developer who knows React is available to it.
Astro asks less of a team. Its components are close to HTML, its docs say anyone who knows HTML can write one, and React components still work inside it as islands. Next.js asks the team to understand where each piece of code runs: which components are server or client, which props can cross between them and which caching rule applies to each read. That knowledge pays off when you're building a product. When the job is publishing pages, it's overhead.
A decision table
| Your project | Choose | Why |
|---|---|---|
| Marketing site, blog or documentation, the same for every visitor | Astro | Pre-rendered by default, no framework in the browser, hosting can cost nothing |
| Content site with a few interactive parts, such as a calculator or a map | Astro with islands | Each widget loads its own JavaScript while the rest stays HTML |
| Signed-in product with dashboards, editors or live data | Next.js | One React app with server data access and client navigation built in |
| SaaS where one team ships product and marketing together | Next.js, one codebase | Shared components, sign-in state and analytics |
| SaaS where marketing publishes weekly and the product has its own releases | Astro on www, Next.js for the app | Releases and failures stay separate |
| A small product with a few server routes: checkout, a ranking, a form | Either; Astro is enough | On-demand routes handle it, as Superame does |
| A team that can't commit to frequent upgrades | Astro, fully static | No framework code runs on a server at request time |
| Marketers who need to lay out new pages without a developer | Neither: Webflow or Framer | The editing model matters more than the framework |
When the answer is both, or neither
A SaaS company can also use both: the marketing site on Astro at www and the product on Next.js at app, each deployed on its own schedule. One Next.js codebase works better when a single small team owns everything and wants one set of components. Designing the marketing side of that split is our SaaS website design service, and scoping the product is web app development.
Sometimes the answer is neither. If your marketing team needs to build and rearrange pages visually, every week, without asking a developer, a framework and a headless CMS will feel slow to them however fast the pages load. Our comparison of Webflow and Framer covers that route.
How we decide on a project
We list every route and mark it as the same for everyone, changing when content is published, or different for each visitor. If the last group is empty or holds a handful of routes, such as a draft preview, a search page or a payment return, we build in Astro. If the signed-in product is the reason for the project, we build in Next.js and keep the marketing routes static from the first commit.
If you're moving an existing site, our WordPress to Astro guide covers the most common migration, and our web development service covers builds where the framework is still an open question. If you'd like a second opinion, send us your route list and we'll tell you which framework we'd pick and why.
Common questions
Is Astro faster than Next.js?
For content pages, usually, because Astro sends HTML without a framework runtime, while every Next.js page loads React and its client router. On our own sites, an Astro article loaded about 43 KB of compressed JavaScript and a Next.js article about 287 KB. Speed still depends on images, fonts, third-party scripts and hosting, and a careful Next.js build that keeps most components on the server can pass Core Web Vitals. Measure your real pages with field data before and after any change.
Can Astro handle logged-in users, forms or payments?
Yes, for a limited number of routes. Any Astro route can render on request through an adapter, read and set cookies, and call your database or payment provider. Superame, which we designed and built, runs on Astro 7 in server mode on Vercel and takes verified payments. What Astro doesn't provide is an application model for many interactive screens that share state; once most of the project looks like that, Next.js is the better base.
Is Next.js overkill for a marketing site?
Not when the marketing site shares a codebase, components and sign-in with a product: Next.js keeps everything in one place, and with Cache Components and ensureStatic its marketing pages can stay static. It is overkill when the site is only content. You pay for a React runtime in every visitor's browser and for a framework whose server needs regular security patches, with nothing interactive to show for either.
Which is better for SEO, Astro or Next.js?
Neither ranks a page by itself. Both deliver complete HTML to crawlers when pages are pre-rendered or rendered on the server, and both handle titles, canonical tags, sitemaps and structured data. The differences are indirect: Astro pages usually carry less JavaScript, which helps Core Web Vitals, and Next.js pages with dynamic metadata are rendered on request for some crawlers, so their data sources must work at request time. Content, links and structure still decide rankings.
Can our React developers work on an Astro site?
Yes. Astro components are close to HTML with a script block on top, and existing React components can be used as they are, rendered to static HTML or loaded as interactive islands. The adjustment is architectural: an Astro page is a set of separate islands rather than one React application, so code that assumes an app-wide router or shared state needs a different structure. For a team that only writes React and is building a product, Next.js keeps everything in one familiar model.
Can we switch from Next.js to Astro later, or the other way?
Yes, but plan it as a rebuild of the templates rather than a port. React components move across more easily than routes, data fetching and caching, which work differently in each framework. If the content lives in a headless CMS rather than in the code and the URLs stay identical, the switch only touches the front end. For a public site, treat it as a migration anyway: redirects for anything that changes and Search Console checks after launch.
Sources & further reading
Sources behind this page, with further detail from the original publishers.
- Astro Docs: Islands architecturedocs.astro.build
- Astro Docs: On-demand renderingdocs.astro.build
- Astro Docs: Content collectionsdocs.astro.build
- Astro Docs: Upgrade Astro (support for previous versions)docs.astro.build
- Astro: Astro 7.0 (22 June 2026)astro.build
- Astro: Astro 6.0 (10 March 2026)astro.build
- Next.js Docs: Server and Client Componentsnextjs.org
- Next.js Docs: Cachingnextjs.org
- Next.js: Next.js 16.4 (6 October 2026)nextjs.org
- Next.js: Support policynextjs.org
- Next.js Docs: Deployingnextjs.org
- Next.js: Security advisory CVE-2025-66478nextjs.org
- Cloudflare Docs: Workers pricingdevelopers.cloudflare.com
- npm: downloads of next, astro and react, 6 to 12 October 2026api.npmjs.org
