Skip to main content
Technical SEO

Next.js SEO: SSG vs SSR vs ISR, Which Should You Use?

For most Next.js sites, the choice between Next.js SSG vs SSR and ISR SEO strategies depends on the nature of the content.

Next.js SEO: SSG vs SSR vs ISR, Which Should You Use?

For most Next.js sites, the choice between Next.js SSG vs SSR and ISR SEO strategies depends on the nature of the content. Use static generation (SSG) for pages that rarely change, incremental static regeneration (ISR) for large or frequently updated public pages, and server-side rendering (SSR) only when each request needs unique HTML. This approach optimizes Next.js SEO rendering by ensuring efficient indexability and fast load times. Avoid rendering indexable content in the browser to maintain optimal SEO performance.

All three strategies SSG, SSR, and ISR send complete HTML to crawlers. The SEO difference between them isn't about indexability but rather response speed, HTML freshness, scalability, and potential failure modes. This guide covers all four, then shows how to choose per page type and how to check what Googlebot actually receives.

Quick Answer: Which Rendering Strategy Is Best for SEO?

Strategy

When HTML is generated

Freshness

Speed profile

Main SEO risk

Best for

SSG

At build time

Updates only on rebuild

Fastest, served from a CDN

Stale content, long builds on huge sites

Marketing pages, blogs, docs

ISR

At build time, then regenerated

Updates on a timer or on demand

Static speed in most cases

One stale response after expiry, cache complexity

Catalogs, listings, large content libraries

SSR

On every request

Always current

Depends on your server and data sources

Slow first byte under load

Request-specific or real-time public pages

CSR

In the browser

Always current

Fast shell, content arrives late

Content missing from initial HTML

Logged-in app screens

The ratings you see on many comparison pages ("5 stars for SEO") hide the real trade-offs, which is why this table lists risks instead.

Next.js SEO: SSG vs SSR vs ISR, Which Should You Use?

For most sites, nextjs seo rendering comes down to a simple rule. Use static site generation (SSG) for pages that rarely change, incremental static regeneration (ISR) for large or frequently updated public pages, and server-side rendering (SSR) only when each request needs its own HTML. Avoid rendering indexable content in the browser.

All three strategies send complete HTML to crawlers, so the nextjs ssg vs ssr question is not about which one Google can index. The real SEO differences are response speed, content freshness, scalability and how each approach fails. ISR SEO has its own trade-offs too, because regenerated pages can briefly serve older HTML.

This guide explains each Next.js rendering strategy, shows how to choose by page type, and gives you a way to verify what Googlebot actually receives.

Quick Answer: Which Next.js Rendering Strategy Is Best for SEO?

Strategy

When HTML is generated

Freshness

Speed profile

Main SEO risk

Best for

SSG

At build time

Updates only on rebuild

Fastest, served from a CDN

Stale content, long builds on huge sites

Marketing pages, blogs, docs

ISR

At build time, then regenerated

Updates on a timer or on demand

Static speed in most cases

One stale response after expiry, cache complexity

Catalogs, listings, large content libraries

SSR

On every request

Always current

Depends on your server and data sources

Slow first byte under load

Request-specific or real-time public pages

CSR

In the browser

Always current

Fast shell, content arrives late

Content missing from initial HTML

Logged-in app screens

Star ratings on many comparison pages ("5 stars for SEO") hide the real trade-offs, which is why this table lists risks instead.

Why Rendering Matters for Next.js SEO

How Googlebot handles JavaScript pages

Google processes a page in stages. It crawls the URL, queues it for rendering if the page needs JavaScript, then indexes what it sees. Google's documentation describes this render queue, and rendering does not always happen immediately.

If your important content is already in the HTML response, Google can read it at the crawl stage. If the content only appears after JavaScript runs, indexing depends on the render step succeeding.

Other crawlers matter too. Some social preview bots and AI crawlers may not execute JavaScript at all, so content in the server HTML is the safest default.

"Next.js is SEO-friendly" is only partly true

Next.js pre-renders pages by default, but that does not protect you from client-side patterns that hide content. The 'use client' directive is a common source of confusion.

Client Components are still pre-rendered to HTML on the server for the initial load. The problem starts when a Client Component loads its data in the browser, for example inside a useEffect. The server HTML then contains a loading state, and the real content arrives later.

For every page, ask one question: what is in the HTML before any JavaScript runs? That is the core of nextjs seo rendering.

Next.js SSG vs SSR vs ISR Explained for SEO

Static Site Generation (SSG)

SSG generates HTML at build time and serves the same file to every visitor, usually from a CDN. In the App Router, a route is static by default when it does not use request-specific data. You pre-generate dynamic routes with generateStaticParams. In the Pages Router, the equivalents are getStaticProps and getStaticPaths.

SEO strengths

  • Very fast first byte, since no rendering happens at request time.

  • Stable, predictable HTML for crawlers.

  • Low server cost and low risk under traffic spikes.

SEO risks

  • Content only changes when you rebuild.

  • Build times grow with page count. One public case study described a site with thousands of static pages hitting a hosting build-time limit.

Best for: Pages that change rarely, where a rebuild on publish is acceptable.

Server-Side Rendering (SSR)

SSR renders the page on the server for every request. In the App Router, a route becomes dynamic when it reads request data such as cookies() or headers(), or when you opt out of caching. In the Pages Router, you use getServerSideProps.

SEO strengths

  • The HTML always reflects current data.

  • It can vary by request, such as location or inventory, while still sending full HTML.

SEO risks

  • Time to first byte depends on your server and the data sources behind it. A slow API makes a slow page.

  • Large client bundles add hydration cost, which affects interactivity.

  • It is often overused. Dashboards, settings pages and other pages behind a login gain nothing from server-side rendering SEO benefits.

Best for: Public pages where the content must be correct per request.

Incremental Static Regeneration (ISR) and SEO

ISR starts as a static page and regenerates after a time interval or when you trigger it. It follows a stale-while-revalidate pattern. Once the interval expires, the next request still receives the cached page while a new one is built in the background. Later requests get the updated version.

Two details matter for ISR SEO:

  • The first request after expiry gets the old HTML. If that request is Googlebot, it sees the previous version.

  • Pages not generated at build time can be rendered on demand the first time they are requested, then cached. That makes ISR practical for catalogs with many thousands of URLs.

ISR works with the Node.js runtime, not the Edge runtime. When self-hosting, the cache lives on disk by default, so multiple instances need a shared cache setup. Vercel handles persistence for you.

Best for: Large sets of public pages that change on a schedule or when an editor publishes.

Why client-side rendering is the exception

CSR sends a minimal shell and builds the page in the browser. It is fine for authenticated areas that should not be indexed anyway. For anything meant to rank, it adds dependence on the render step, so prefer server-rendered HTML.

How Each Strategy Affects Speed, Crawling and Freshness

Speed and Core Web Vitals

Core Web Vitals measure LCP, INP and CLS. Time to first byte (TTFB) is not a Core Web Vital, but a slow TTFB delays LCP, so it is worth watching.

In general, pre-built or cached responses have the lowest TTFB, and uncached SSR depends on your backend. Actual numbers vary with hosting, data latency and caching, so measure your own pages instead of trusting a rule of thumb.

Rendering strategy also does not fix a heavy client bundle. A static page that ships a lot of JavaScript can still respond slowly to input. Page experience is one signal among many, so treat these metrics as a quality goal, not a guaranteed ranking lever.

Crawl efficiency

Fast, consistent responses let crawlers fetch more URLs with less waste. This matters most on large sites. For a site with a few hundred pages, crawl budget is rarely the bottleneck, and the choice between SSG and SSR will not change indexing much.

Freshness

Search engines do not rank a page higher simply because it was regenerated recently. Freshness matters because stale prices, stock status and headlines are inaccurate, and for some query types recency is part of what users want.

If you list lastmod in your sitemap, keep it honest. Google can use it when it proves reliable, so update it only when the content meaningfully changes, not on every regeneration.

How to Choose: A Decision Guide by Page Type

Ask four questions for each page template:

  1. Does this page need to rank in search?

  2. Does the content change per user or per request?

  3. How often does the content change?

  4. How many URLs does the template produce?

Page type

Recommended

Why

Watch out for

Marketing and landing pages

SSG

Rarely change, speed matters

Remember to rebuild after edits

Blog and documentation

SSG, or ISR as the library grows

Stable content, many URLs

Build time at scale

Product and category pages

ISR with on-demand revalidation

Many URLs, periodic changes

Stale price or stock between updates

News and frequently updated listings

ISR with a short interval, or SSR

Freshness matters

Server load if you choose SSR

Internal site search and filtered results

SSR

Output depends on the request

Consider noindex for thin or duplicate combinations

Dashboards and account pages

CSR or SSR with noindex

Not meant for search

Do not spend SEO effort here

NextJS SSG vs SSR: the short version

If the content is the same for everyone and changes rarely, choose SSG. If it must be accurate on every request, choose SSR. If it is the same for everyone but changes regularly across many URLs, choose ISR.

You do not have to pick one strategy for the whole app. Next.js lets each route use a different approach, so mix them.

Implementing Your Choice in the App Router

Caching defaults have changed between recent Next.js versions, and newer releases add Cache Components with a different caching model. The examples below use long-standing App Router APIs. Check the documentation for your installed version before copying them, especially the route segment options.

Static generation with dynamic routes

tsx

// app/blog/[slug]/page.tsx

export async function generateStaticParams() {

  const posts = await getAllPosts();

  return posts.map((post) => ({ slug: post.slug }));

}


export default async function Page({

  params,

}: {

  params: Promise<{ slug: string }>;

}) {

  const { slug } = await params;

  const post = await getPost(slug);

  return <article>{/* render post */}</article>;

}


The params Promise applies to Next.js 15 and later. For very large catalogs, pre-generate only your most important pages and let the rest render on first request.

Time-based ISR

tsx

// app/products/[id]/page.tsx

export const revalidate = 3600; // regenerate at most once per hour


You can also set revalidation on individual fetch calls.

On-demand revalidation from a CMS webhook

ts

// app/api/revalidate/route.ts

import { revalidatePath } from 'next/cache';


export async function POST(request: Request) {

  const { secret, path } = await request.json();

  if (secret !== process.env.REVALIDATE_SECRET) {

    return Response.json({ ok: false }, { status: 401 });

  }

  revalidatePath(path);

  return Response.json({ ok: true });

}


On-demand revalidation updates a page when content actually changes, which avoids both stale pages and needless regeneration. This is the best fix for most ISR SEO freshness problems. Tag-based revalidation with revalidateTag works well when one change affects many pages.

Forcing server rendering

tsx

export const dynamic = 'force-dynamic';


Use this only on pages that need per-request output.

Metadata that crawlers must see

Set titles, descriptions and canonicals on the server with generateMetadata:

tsx

export async function generateMetadata({

  params,

}: {

  params: Promise<{ slug: string }>;

}) {

  const { slug } = await params;

  const post = await getPost(slug);

  return {

    title: post.title,

    description: post.summary,

    alternates: { canonical: `/blog/${slug}` },

  };

}


Set metadataBase in your root layout so canonical and Open Graph URLs resolve to absolute addresses. Also add app/sitemap.ts and app/robots.ts, and render JSON-LD structured data from a Server Component so it appears in the initial HTML.

Common Next.js Rendering Mistakes That Hurt SEO

  • Fetching primary content in a Client Component. The server HTML shows a spinner. Move the fetch into a Server Component or pass the data down as props.

  • Using SSR everywhere "for SEO." This adds server latency to pages that would be faster as static or ISR, and to pages that do not need to rank at all.

  • Setting a long ISR interval on price-sensitive pages. Use on-demand revalidation so changes appear quickly.

  • Testing ISR in next dev. Development mode does not reproduce production caching. Test with next build and next start.

  • Letting metadata differ between server and client. If a title or canonical is rewritten in the browser, crawlers may see a different value than users.

  • Hiding content behind interactions. Crawlers do not click tabs or accordions to load data. Render the content in the HTML even if it is visually collapsed.

  • Generating every URL at build time on a huge site. Pre-build the important pages and render the long tail on demand.

  • Leaving thin filtered or internal search URLs indexable. Decide deliberately which combinations deserve to be indexed.

How to Verify What Googlebot Sees

Rendering choices are easy to get wrong silently, so check them directly.

  1. View the raw source. Use view-source in your browser, or fetch the page with curl. Do not rely on the browser inspector, which shows the DOM after JavaScript has run.

bash

  curl -s https://example.com/page | grep -i "<title>"


  1. Search the raw HTML for your key content. If a heading, product name or paragraph is missing, it depends on JavaScript.

  2. Disable JavaScript and reload. Content that disappears is content crawlers may not see reliably.

  3. Use Google Search Console's URL Inspection tool. Run a live test and review the rendered HTML and screenshot to confirm Google can see your content.

  4. Check cache behavior. Inspect response headers with curl -I. Self-hosted Next.js can expose an x-nextjs-cache header with values such as HIT, MISS and STALE, while hosts like Vercel use their own cache headers.

  5. Review the Crawl Stats report in Search Console for response time trends and crawl volume after you change strategies.

Change one template at a time, then compare before and after. That keeps the cause of any difference clear.


What to Do Next

  1. List your page templates and assign each a strategy using the table above.

  2. Open the raw HTML of each template and confirm the key content is there.

  3. Set revalidation deliberately, preferring on-demand updates for changing content.

  4. Confirm the result in Search Console using URL Inspection and Crawl Stats.

For version-specific details, the official Next.js documentation and Google Search Central's JavaScript SEO guidance are the sources to check.

Key Takeaways

  • Very fast first byte, since no rendering happens at request time.

  • Stable, predictable HTML for crawlers.

  • Low server cost and low risk under traffic spikes.

  • Content only changes when you rebuild.

  • Build times grow with page count. One public case study described a site with thousands of static pages hitting a hosting build-time limit.


Google preferred sources

Get the next teardown first

Make REO Rank one of your Google preferred sources. Our analysis rides higher in Top Stories and carries a "Preferred" badge in AI Mode and AI Overviews, so you actually see the next one.

Add REO Rank as a preferred source
  • About 5 seconds
  • Free, no account
  • Undo any time

FAQs

Questions on this topic

Answers to what readers ask about this topic.

Is Next.js good for SEO?
Yes, when content is rendered on the server or at build time. Next.js pre-renders pages by default and offers SSG, SSR and ISR, but it does not stop you from loading important content in the browser, which can hurt indexing.
What is the best Next.js rendering strategy for SEO?
There is no single best option. SSG suits content that rarely changes, ISR suits large or regularly updated sets of pages, and SSR suits pages that must be accurate per request. Good nextjs seo rendering means choosing per page type.
NextJS SSG vs SSR: which is better for SEO?
SSG is usually the better default for content that changes rarely, because it is fast and stable. SSR is better when the HTML must be correct for every request. Both deliver crawlable HTML, so the choice depends on freshness and speed, not on whether Google can index the page.
Is ISR good for SEO?
Yes. ISR SEO performance is strong because pages are served as static HTML and updated on a schedule or on demand. The main caveat is that the first request after a revalidation interval can receive the previous version, so use on-demand revalidation for time-sensitive content.
Does client-side rendering hurt SEO?
It can. Google may render JavaScript, but that step is separate from crawling and is not guaranteed to be immediate. Other crawlers may not run JavaScript at all. Server-rendered HTML is the lower-risk option for pages you want to rank.
Can I mix SSG, SSR and ISR in one Next.js app?
Yes. Each route can use a different strategy, so you can serve marketing pages statically, product pages with ISR and request-specific pages with SSR.
Does Google index pages rendered with JavaScript?
Often yes, but with a delay and more dependence on successful rendering. If the content is already in the initial HTML, indexing does not depend on the render step.
Which Next.js rendering strategy is fastest?
Static and cached responses are generally the fastest to deliver, because no work happens at request time. Real results depend on your hosting, caching and page weight, so measure your own pages.

Still have questions? Talk to a specialist

Turn this playbook into rankings.

Get a free audit and a 6-month roadmap built around your highest-intent keywords.

Get a free audit