Next.js SEO · platform audit guide

Next.js SEO:render strategy, metadata, speed.

Next.js is the best framework for SEO performance — when you configure it correctly. Most teams don't.

Next.js gives you SSG, SSR, ISR, and App Router metadata API in one framework. The SEO impact depends entirely on which rendering strategy you choose per route, whether your LCP image has `priority`, and whether your client boundaries are correctly scoped. AuditMySite audits every page against Next.js-specific patterns and generates the fixes.

https://

Free · No card · 90-second Next.js-specific scan

Per-route rendering strategy audit

Route

Strategy

Finding

/pricingSSGStale content risk
/blog/[slug]ISR 3600Acceptable
/product/[id]SSGStale prices
/aboutSSGCorrect

Five Next.js SEO gaps AuditMySite closes.

Next.js is the best framework for SEO — when configured correctly.

1. Missing priority on LCP image

64.3%

of Next.js sites missing priority on LCP image

Next.js `<Image>` components require `priority={true}` on above-the-fold images to add `fetchpriority='high'` and a `<link rel='preload'>` tag. Without it, the browser discovers the LCP image late — adding 0.4–1.1s to LCP. In AuditMySite's March 2026 dataset, 64.3% of Next.js sites had at least one above-the-fold hero image without the priority flag.

2. SSG on frequently updated routes

47.8%

of Next.js sites use SSG on volatile routes

Statically generated routes serve stale content until the next build. A product page, pricing page, or blog post built at 2:00am serves outdated metadata at 4:00pm. ISR (`revalidate: 3600`) or server-side rendering fixes this — but 47.8% of Next.js production sites use full SSG on routes that change more than once daily.

3. Client boundaries bloating the bundle

2.3×

JS bundle size from misplaced 'use client'

'use client' boundaries cascade down the component tree. A single misplaced 'use client' on a layout component causes every child to be included in the client bundle — even components that are pure server-rendered HTML. Sites with misplaced client boundaries average 2.3× larger client JS than equivalent App Router sites with correct scoping.

4. Duplicate content from parallel routes

2 URLs

serving identical content without canonical

Next.js App Router parallel routes (`@slot` conventions) and intercepting routes (`(.)modal`) can cause the same content to appear at two URLs without canonical tags. Google indexes both. AuditMySite detects parallel-route-driven duplicate content and generates the canonical `<link rel='canonical'>` in the page's metadata output.

5. generateMetadata gaps in dynamic routes

3

most common missing metadata fields

Next.js App Router's `generateMetadata` function must be async and receive the route params. Teams frequently omit `alternates.canonical`, leave `openGraph.images` pointing to `/og-default.png` (404), or forget to set `robots` on auth-gated pages. AuditMySite validates every page's rendered metadata and flags missing, mismatched, or invalid metadata properties.

Audit your Next.js site.

Paste your URL. Get rendering strategy, metadata, and CWV findings in 90 seconds.

https://

Free · No card · 90 seconds

How AuditMySite audits Next.js.

Step 1

Paste your Next.js URL

AuditMySite detects the Next.js version, rendering strategy per route (SSG/SSR/ISR), App Router vs Pages Router, and client boundary distribution — no access to the repo or build output needed.

Step 2

Get Next.js-specific findings

The audit identifies missing `priority` on LCP images, SSG-on-volatile-route mismatches, client bundle inflation from misplaced 'use client', duplicate canonical gaps, and metadata field completeness per route.

Step 3

Review fix recommendations

AuditMySite generates the corrected metadata, canonical tags, and priority flags as code patches. For repos connected via GitHub App, fixes are delivered as a PR with the exact file changes. For hosted sites, Cloudflare Worker injection handles schema and metadata without a redeploy.

Frequently asked questions

Is Next.js good for SEO?

Yes — Next.js is one of the best frameworks for SEO because it supports server-side rendering, static generation, and ISR, which ensure search engines receive fully rendered HTML. The App Router's `generateMetadata` API and `opengraph-image.tsx` convention make structured metadata straightforward. The main SEO risks are configuration mistakes: wrong rendering strategy per route, missing `priority` on LCP images, misplaced client boundaries, and incomplete `generateMetadata` implementations. AuditMySite detects and fixes all of these.

What does the Next.js priority prop do for SEO?

The `priority` prop on `<Image>` components adds `fetchpriority='high'` to the img element and injects a `<link rel='preload'>` in the page head. This tells the browser to fetch the image before it reaches it in the HTML parse order — typically reducing LCP by 0.4–1.1s on image-heavy pages. Any image that is visible above the fold on load and is the page's largest visual element should have `priority={true}`. Without it, Next.js defers the image fetch to when the browser reaches the img tag in the DOM.

Should I use SSG, SSR, or ISR for SEO?

Use SSG for pages that change rarely (about, legal, marketing pages with < weekly updates). Use ISR (`revalidate` in seconds) for pages that update periodically (blog posts, product pages, pricing). Use SSR (`dynamic = 'force-dynamic'`) for pages that must serve real-time data (dashboards, personalised content). The SEO mistake is using SSG on volatile pages — a pricing page that changes daily but is built once a week will serve stale metadata to Google. AuditMySite detects page-level content volatility and flags rendering strategy mismatches.

How does 'use client' affect bundle size and SEO?

'use client' marks a component and all its imports as client-side JavaScript. If placed on a layout or wrapper component, it pulls every child into the client bundle — even children that are pure HTML. This inflates Total Blocking Time (TBT) and Largest Contentful Paint (LCP). Correct App Router practice: push 'use client' as far down the component tree as possible, ideally only to leaf components that use React hooks or browser APIs. AuditMySite identifies which client boundaries are responsible for bundle inflation.

Does AuditMySite audit Next.js App Router metadata?

Yes. AuditMySite validates the rendered HTML metadata for every crawled page — including canonical URL correctness, OpenGraph image validity (checks that the og:image URL returns a 200 response), Twitter card presence, robots meta tag accuracy, and hreflang on multilingual routes. It also checks for common App Router metadata mistakes: `alternates.canonical` omitted in `generateMetadata`, `openGraph.images` pointing to a non-existent file, and `noindex` accidentally applied via `robots: { index: false }` on public pages.

How does AuditMySite detect the Next.js rendering strategy?

AuditMySite infers rendering strategy from response headers and HTML patterns: `Cache-Control: s-maxage` indicates ISR or SSG; `Cache-Control: no-store` or `x-nextjs-cache: MISS` indicates SSR; static HTML without cache headers on repeated fetches indicates SSG. It also detects Vercel deployment markers and Next.js version from response headers. The rendering strategy is reported per page, not per site, so you can see exactly which routes are using which strategy.

Related answers

Common questions answered.

Stop guessing. Start scoring.

Run your free audit. See exactly what's broken. Approve the fixes. Watch the score climb. No card. No call. No 'enterprise contact us'.

We never store your URL after the audit unless you create a free account.

Looks like you're in United States. Switch to the localised version?

Switch