Technical SEO Checklist for Next.js Sites
By the Techprime team · · 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.
On this page (6)
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.
Related articles
Programmatic SEO Without Thin Content
How to scale programmatic SEO pages without thin or duplicate content: data sources, templates, unique value per page and the quality checks that matter.
Turn voice and WhatsApp messages into tracked tasks quickly
Action items get lost in voice notes and WhatsApp, causing missed follow-ups and rework. Transcribe audio, extract actions with simple rules or prompts, create
Prevent data leakage when using third-party AI agents
Sensitive records leak when staff paste them into third-party AI agents. Route requests through a sanitising proxy, enforce least-privilege access, log queries