Skip to content
← All articles
SEO

Technical SEO Checklist for Next.js Sites

March 17, 2026 · 8 min read

Key takeaways

  • Use generateMetadata and generateStaticParams so titles, descriptions and canonicals are correct per page and prerendered.
  • Ship a real sitemap.xml and robots.txt from route handlers, generated from the same data your pages use.
  • Set an explicit canonical URL per page to avoid duplicate-content issues from trailing slashes or query params.
  • Prefer static generation over client-side rendering for indexable content — crawlers see the server-rendered HTML.

The technical SEO items that matter most on a Next.js App Router site are: per-page metadata via generateMetadata, static generation for indexable routes, a generated sitemap and robots file, correct canonical URLs, and structured data rendered server-side — get these five right and most of the framework-specific SEO risk is handled.

General SEO advice (write good titles, get backlinks, make the site fast) applies regardless of framework. This checklist focuses on the parts that are specific to how Next.js renders and routes pages, where a wrong default can quietly cost you visibility.

1. Per-page metadata, not one global title

Every route should export its own metadata — either a static `metadata` export or an async `generateMetadata` function when the title depends on dynamic data, like a product or article slug. Set a real, specific description for each page rather than reusing the site-wide default; duplicate or missing descriptions across many pages is one of the most common issues in real audits.

  • Unique <title> and description per route.
  • Use the title template pattern (`%s | Site Name`) at the layout level so child pages only set their own piece.
  • Set `alternates.canonical` explicitly on every page, including the homepage.

2. Static generation for anything crawlers need to index

Content that should be indexed — articles, product pages, marketing pages — should be statically generated (via generateStaticParams for dynamic routes) rather than left to render only in the client. Crawlers generally execute JavaScript now, but relying on that adds latency and risk; server-rendered HTML on first response is the safer default for anything you want found.

3. A real sitemap.xml and robots.txt

Generate `sitemap.xml` from a `sitemap.ts` file (or route handler) that reads from the same data source your pages render from — a products array, an articles array — so the sitemap can never drift out of sync with what actually exists on the site. Do the same for `robots.txt`: point it at the sitemap URL and make sure you are not accidentally disallowing routes you want indexed.

4. Canonical URLs and duplicate content

Trailing slashes, query parameters used for filtering, and www vs. non-www variants can all create duplicate versions of the same page in a search engine's eyes. Set an explicit canonical tag on every page pointing at the one URL you want indexed, and keep your `next.config` trailing-slash setting consistent with what you emit in canonicals.

5. Structured data rendered on the server

JSON-LD script tags should be rendered as part of the server response, not injected client-side after hydration, so that any crawler reading raw HTML sees them immediately. Organization schema on every page, Article schema on articles, Product schema on product pages, and FAQPage schema wherever there is genuine FAQ content are the highest-value types for a marketing and product site.

6. Core Web Vitals basics

Use next/image for anything above the fold so images are sized and lazy-loaded correctly, preload the font files referenced in your layout, and keep the largest hero media (video or image) compressed. These affect Largest Contentful Paint and Cumulative Layout Shift, both of which factor into how a page performs in search, independent of content quality.

Most Next.js SEO problems are not exotic — they are a missing canonical tag, a sitemap that was hand-written once and never updated, or content that only renders client-side.

If you want a second pair of eyes on an existing Next.js site's technical SEO, that is a scoped audit we do as part of our Software & Tools work — see /services/software-tools or /contact.

Questions, answered.

Does the App Router handle SEO automatically?

No. The App Router gives you the tools (generateMetadata, generateStaticParams, route handlers for sitemap and robots) but you still have to use them on every route. Nothing is automatic by default beyond basic HTML rendering.

Do I need a sitemap if my site is small?

It still helps. A sitemap gives crawlers an explicit list of URLs and lastmod dates, which speeds up discovery of new or changed pages even on a small site, and it costs almost nothing to generate from existing route data.

Is client-side rendering bad for SEO in 2026?

Major crawlers can execute JavaScript, but client-only rendering adds a dependency on that execution succeeding reliably and quickly, and other answer engines and bots vary in how well they handle it. Server-rendered HTML for indexable content remains the lower-risk choice.

Book a discovery call

Let's build your content engine.