They optimize for different sites
Astro ships zero JavaScript by default, pure HTML at the edges, hydrating components only where marked ("islands"). Next.js is a full React application platform, server rendering, API routes, streaming, the works. One makes content sites absurdly fast and cheap to host; the other makes applications possible in one codebase.
Astro wins when
Content is the product: marketing sites, blogs, docs, directories, landing-page fleets. Pages are mostly static → Astro's defaults deliver top-tier Core Web Vitals almost for free, hosting is pennies (static files), and maintenance is light. This very site is Astro, practiced, not theorized.
Next.js wins when
The site is an application wearing pages: user accounts, personalized views, heavy client interactivity, real-time data, or commerce logic at depth. If the majority of routes need server state or auth, Next's machinery pays for itself, see the Next.js-vs-React guide for that axis.
The buyer-level costs
Astro: islands complexity when interactivity creeps past "a bit" (every interactive widget is a decision), smaller hiring pool than React-centric stacks. Next.js: heavier build/deploy reality, framework churn to track, and hosting shaped by its runtime assumptions.
The answer is often both
Marketing site in Astro, product app in Next.js, split at the subdomain, each doing what it is best at, sharing design tokens. That split is a standard recommendation here. Which side is your project weighted toward? Two sentences usually settles it.