The Short Answer
If your portfolio is mostly static content with a contact form, use Astro. If you need dynamic features, real-time data, or you're already building a full-stack application, use Next.js. But the reality is more nuanced — let me walk you through the tradeoffs.
Performance: Astro Wins by Default
Astro's core innovation is "zero JavaScript by default." Pages render as pure HTML unless you explicitly opt into interactivity. This means perfect Lighthouse scores out of the box, which directly impacts your Google rankings — especially important for a portfolio you're trying to rank for your name and keywords.
Next.js has improved significantly with the App Router and React Server Components, but it still ships more JavaScript than a comparable Astro site. For a portfolio with mostly text and images, this overhead rarely pays off.
SEO: Both Are Solid, Astro Has an Edge
Both frameworks support server-side rendering and static generation, which are the fundamentals for good SEO. Astro's edge is its simpler mental model for metadata, sitemaps, and content collections — there's less to configure wrong.
My own portfolio uses Astro, and I've found the content collections feature excellent for building the kind of keyword-rich blog pages that drive organic traffic.
Developer Experience: Next.js Wins on Ecosystem
The Next.js ecosystem is massive. Need authentication? next-auth. E-commerce? Shopify. CMS? Contentful, Sanity, Strapi — all have first-class Next.js integrations. If you're a React developer, the mental model is familiar.
Astro's ecosystem is growing fast, but it's smaller. The upside: Astro integrates any UI framework — you can use React, Vue, Svelte, and Solid in the same project.
My Recommendation
Use Astro for your personal portfolio. It's simpler, faster, and better optimized for the mostly-static use case. Use Next.js when you're building the actual products in your portfolio — the full-stack apps, dashboards, and SaaS tools that demonstrate your backend skills.