
Next.js vs React: Which Should You Build On?
Confused between Next.js and React? This guide explains key differences, performance, SEO benefits, and when to choose each for your next web development project.
Structured like an editorial page, with a cleaner reading flow instead of repeated card blocks.
TL;DR: React is a UI library — it builds components. Next.js is a full framework built on top of React — it adds routing, server-side rendering, static generation, image optimisation, and SEO features. For most startups building a public-facing product or marketing site, Next.js is the better starting point. For complex SPAs with no SEO requirements, plain React is fine.
This is one of the most common questions founders ask when they're scoping out their first build. And it's the right question to ask early — because switching later is painful.
The short answer is nuanced. Let's break it down properly.
Article gallery
Next.js vs React: Which Should You Build On? visuals from the admin gallery

First: Understand What React Actually Is
React is not a framework. It's a JavaScript library for building user interfaces. It handles one thing really well: rendering components based on state.
It does not come with:
- A router (you add React Router separately)
- A way to handle server-side rendering
- Image optimisation
- API routes
- A build system with performance defaults
React is a blank canvas. Powerful, but deliberately minimal.
What Next.js Adds on Top of React
Next.js is a React framework built and maintained by Vercel. It wraps React and adds a production-grade layer on top of it:
| Feature | React (plain) | Next.js |
|---|---|---|
| Routing | Manual (React Router) | Built-in file-based routing |
| Server-Side Rendering | Not built-in | Built-in (SSR) |
| Static Site Generation | Not built-in | Built-in (SSG) |
| Image Optimisation | Manual | Built-in <Image> component |
| API Routes | Separate backend needed | Built-in /api routes |
| SEO Meta Tags | Manual with Helmet | Built-in <Head> + Metadata API |
| Code Splitting | Manual setup | Automatic per page |
| TypeScript Support | Manual config | Built-in |
Next.js is essentially React with a lot of sensible defaults already made for you.
The SEO Argument (It's a Big One)
This is where the decision often becomes clear for startups.
Plain React apps are client-side rendered (CSR) by default. When Google's bot crawls your page, it initially receives an empty HTML file with a <div id="root"> and a JavaScript bundle. The actual content — headings, body text, meta descriptions — only exists after the JavaScript executes.
Google can render JavaScript, but:
- It's slower and less reliable than reading static HTML
- There's often a delay of days or weeks between initial crawl and JS rendering
- Important content can be missed, especially on complex apps
The result: your pages don't rank well, and your Core Web Vitals suffer.
Next.js solves this completely. With Static Site Generation (SSG), your pages are pre-built as full HTML files at deploy time. Googlebot reads your full content immediately, on first crawl. No rendering delay, no empty HTML.
For any startup that cares about organic search — and most should — this alone makes Next.js the default choice.
Rendering Modes: Understanding Your Options
Next.js gives you three main rendering strategies (four if you count the App Router's React Server Components):
Static Site Generation (SSG)
Pages are built at deploy time and served as static HTML. Best for:
- Marketing pages (homepage, features, pricing, about)
- Blog posts
- Documentation
- Landing pages
// pages/about.js
export async function getStaticProps() {
const data = await fetchData();
return { props: { data } };
}
This is the fastest option. Pages are served from a CDN with zero server processing time.
Server-Side Rendering (SSR)
Pages are rendered on the server on each request. Best for:
- Pages with data that changes frequently
- User-specific pages (if they must be server-rendered)
- Pages that depend on request data (cookies, headers)
// pages/dashboard.js
export async function getServerSideProps(context) {
const data = await fetchUserData(context.req.cookies.userId);
return { props: { data } };
}
Slower than SSG but still much faster and more SEO-friendly than CSR.
Incremental Static Regeneration (ISR)
The best of both worlds — pages are statically generated but can be revalidated in the background at a set interval:
export async function getStaticProps() {
const data = await fetchData();
return { props: { data }, revalidate: 60 }; // Regenerate every 60 seconds
}
Great for blog posts, product pages, and anything that needs fresh content without full server-side rendering.
Client-Side Rendering (CSR)
You can still do plain client-side rendering in Next.js using useEffect + fetch — just like in plain React. This is appropriate for authenticated dashboards, user settings, and any content that shouldn't be indexed.
When Plain React Is the Right Choice
Let's be balanced. Next.js is not always the answer.
Use plain React (Create React App or Vite) when:
- You're building a single-page app with no public-facing pages — think an internal dashboard, admin tool, or authenticated SaaS app with no marketing site
- SEO is irrelevant — your users log in before seeing any content
- You need maximum flexibility and don't want framework conventions
- Your team is already experienced with a specific React setup and the migration cost outweighs the benefits
- You're building a quick prototype or MVP to validate an idea before investing in architecture
For an internal tool used by a fixed set of users who will log in directly, Next.js's SSR/SSG machinery is largely irrelevant overhead.
When Next.js Is Clearly the Right Choice
Use Next.js when:
- You have a public marketing site that needs to rank in Google
- You're building a blog, documentation site, or content-heavy product
- You care about Core Web Vitals and page speed (and you should)
- You need API routes and want to keep your backend in the same codebase
- You're deploying on Vercel (they built Next.js — the integration is seamless)
- You're building something with mixed content — some public pages, some private app pages
Most SaaS startups fall squarely in this category. Your marketing site (homepage, pricing, features, blog) needs to rank. Your app dashboard can be client-side rendered behind a login.
Performance Comparison: Real Numbers
Let's talk Lighthouse scores for a typical startup marketing page:
| Setup | LCP | Performance Score |
|---|---|---|
| Create React App (CSR) | 4.2s | ~42 |
| Vite + React (CSR) | 3.1s | ~55 |
| Next.js (CSR mode) | 3.0s | ~57 |
| Next.js (SSG) | 0.8s | ~91 |
| Next.js (SSG + CDN) | 0.5s | ~97 |
These numbers are illustrative of real-world patterns I've seen on client projects at dipanshudev.com/projects. SSG with a CDN is in a different league.
Making the Decision: A Framework
Ask yourself these four questions:
- Will any pages be publicly accessible without login? — If yes, Next.js.
- Do you care about Google rankings for any part of your product? — If yes, Next.js.
- Is this purely a logged-in SaaS app with no public content? — Plain React is fine.
- Do you want to deploy in under an hour with a great developer experience? — Next.js + Vercel.
The vast majority of startups building in 2025 will land on Next.js. It's the safer, more capable, and more SEO-friendly default. Starting with plain React and migrating later adds real cost and complexity.
FAQ
Q: Is Next.js harder to learn than React? A: Next.js has a learning curve if you're new to server-side rendering concepts. But if you already know React, picking up Next.js is relatively fast. Most developers become productive with Next.js within a week. The file-based routing and data fetching patterns are well-documented.
Q: Can I use React libraries with Next.js?
A: Yes — Next.js is built on React, so virtually every React library works with it. The only exception is libraries that rely on browser-only APIs (like window or document) in components that get server-rendered. This is a fixable issue with dynamic imports and useEffect.
Q: Is Next.js good for e-commerce? A: Yes, very good. Shopify Hydrogen is built on React but many independent stores use Next.js with headless commerce (Medusa, Commerce.js, or direct Shopify Storefront API). SSG with ISR is perfect for product pages that need to be fast and SEO-optimised.
Q: Does Next.js work with Supabase? A: Perfectly. Supabase + Next.js is one of the most popular stacks for modern SaaS products. Supabase handles auth, database, and storage. Next.js handles the frontend and server-side rendering. The official Supabase SSR package is designed specifically for Next.js.
Q: What is the Next.js App Router vs Pages Router?
A: The Pages Router is the original Next.js routing system (files in /pages). The App Router (Next.js 13+, stable in 14) is the newer system (files in /app) based on React Server Components. The App Router is more powerful and is the recommended approach for new projects, but the Pages Router is still fully supported.
Need this done properly
Build, performance, SEO, and content can be handled in one delivery flow.
If you are planning a business site, technical blog, or product build that needs to look sharp and rank cleanly, the same approach can be applied to your stack.