Next.js 16 SEO Checklist for Production
Technical SEO is mostly operational discipline. The fastest way to lose rankings is to ship one release with inconsistent canonicals, duplicated metadata, or a broken sitemap.
This checklist is written for teams building marketing sites and service websites in Next.js 16 (App Router), especially with multiple locales.
What "done" looks like
- Every indexable page has a unique title + description that matches the page intent.
- Canonicals collapse duplicates (host, locale aliases, trailing slash).
- Hreflang points only to real equivalents and includes
x-default.
- Sitemap includes only canonical, indexable URLs and trustworthy
lastmod.
- JSON-LD matches visible page content.
- You can verify all of the above in rendered HTML.
Do not rely on a single global default for money pages.
For each indexable route, verify you generate:
title
description
- canonical URL
- Open Graph / Twitter image
If you are using Next.js metadataBase, prefer relative values in code and let Next compose to absolute URLs.
Example pattern:
export const metadata = {
metadataBase: new URL("https://www.example.com"),
alternates: {
canonical: "/services/web-development/",
languages: {
en: "/services/web-development/",
de: "/de/services/web-development/",
"x-default": "/services/web-development/",
},
},
robots: {
index: true,
follow: true,
},
};
Reference: Next.js generateMetadata / Metadata API.
2. Canonicals must be stable and opinionated
Pick a policy and enforce it:
- one host (for example
www)
- one trailing slash convention
- one default locale convention
Then redirect everything else permanently.
If your canonical policy is "www + trailing slash + no /en prefix", make sure these never resolve as separate indexable URLs:
https:
https:
https: (missing trailing slash)
3. Hreflang must only include real equivalents
Hreflang is not "translate the URL". It is "declare equivalent pages".
Rules that keep clusters clean:
- include alternates only for locales where the page exists
- each locale variant must reference itself and the same set of alternates
- include
x-default pointing to the default-language version
Reference: Google localized versions (hreflang).
4. Robots is about intent, not tradition
robots.txt controls crawling. Page-level noindex controls indexing.
Use page-level noindex for pages that should never appear in search:
- utility chat pages
- internal tool pages
- temporary pages you do not want indexed
In Next.js metadata, this is a first-class field:
5. Sitemap should be boring and trustworthy
A sitemap is not marketing. It is a machine contract.
Include only:
- canonical URLs
- indexable URLs
- accurate
lastmod
Google explicitly recommends lastmod reflect the last significant update (main content, structured data, or links), not cosmetic timestamp bumps.
Reference: Google sitemap guidance.
6. Structured data must match what users see
JSON-LD should be derived from the same source of truth as the page.
Baseline schemas that usually make sense:
Organization (site-wide)
WebSite (homepage)
Service (service pages)
BlogPosting (articles)
The failure mode to avoid is "schema says one thing, page says another".
Reference: Google structured data guidelines.
7. Internal linking is part of SEO infrastructure
If technical posts never link to service pages, search engines struggle to associate your expertise with your commercial intents.
A simple rule that scales:
- each technical post links to at least one relevant service page
- each service page links to at least one relevant technical post
Start with:
8. Release QA (automatable)
Before you deploy, verify on rendered HTML:
- titles/descriptions are unique on key pages
- canonical is correct and absolute
- hreflang set is correct
robots meta is correct (especially noindex)
- sitemap renders and includes expected URLs
- schema renders and validates
Treat these as deploy gates. SEO is too sensitive to rely on manual spot checks.