New: AI Integration Sprints — ship your first AI feature in 14 days.

Learn more
Back to Insights
GROWTHAUG 21, 20268 MIN READ

Technical SEO for Next.js: a practical checklist

Metadata, canonicals, and the crawl checks we repeat before a Next.js site is called finished.

MUM UsmanLead SEO, HexaCod
Chalkboard checklist for technical SEO on Next.js

Metadata is the page

A Next.js site can look finished and still be invisible. The title in the design file, the description everyone agreed in a doc, and the share image in a folder are not metadata until the Metadata API actually emits them. We treat that file as part of the page, reviewed in the same pass as the layout.

page.tsx

export const metadata = {
  title: "Technical SEO for Next.js",
  description: "The crawl checks we repeat before launch.",
  alternates: { canonical: "/insights/technical-seo-nextjs" },
};

A title written in the design and never set in code is the same as having no title. Check the rendered head, not the Figma frame.

One canonical, one sitemap

Every indexable URL gets one canonical, and it matches the URL you want crawled. Trailing slashes, www, and the preview deployment are the usual ways a site argues with itself. The sitemap lists the canonicals only. A URL that is noindex, a filter, or a thank-you page does not belong in it.

  • Canonical host and trailing slash decided once, in one place.
  • sitemap.xml generated from real routes, not a stale export.
  • No preview, staging, or query-string duplicates in the sitemap.
  • Paginated and filtered views canonicalised back to the page that should rank.

Structured data that matches

Structured data is a description of the page the user can see. Article, product, breadcrumb, organisation: only the types the template actually is. We do not mark a marketing page up as a product, and we do not invent a review score the page does not show. If the visible copy and the JSON-LD disagree, the markup comes out.

On article templates we include the headline, the date, and the author because those are on the page. We leave ratings, prices, and “availability” alone unless the template is honestly those things. Rich results are a side effect of telling the truth, not a shortcut.

The crawl before launch

The last pass is a crawl, not a glance. We fetch the sitemap, open a sample of templates, and read the title, description, canonical, and status code. We check that the important pages are server-rendered enough for a crawler to see the words, and that images which carry meaning have alt text a person would recognise.

Then we look at speed, because a technically correct page that is late still struggles. LCP, a stable layout, and a document that does not depend on a client fetch for its first paragraph. Search is not a plugin we switch on after launch. It is the page, shipped in a state a crawler can read.

“If I cannot see the title, the canonical, and the words in the first HTML response, the page is not ready.”M Usman, Lead SEO
#seo#nextjs#growth
MUWritten by M UsmanLeads search and growth. He specialises in technical SEO, content strategy, and the analytics that follow a launch.

Get the next build note
in your inbox.

One practical email a month. No fluff, unsubscribe anytime.

Keep reading

All insights