Technical SEO for Next.js
Crawlability, canonicals, hreflang and structured data built into the render path — generated from one source of truth instead of maintained by hand.
Technical SEO in a Next.js application is not a plugin. It is a property of how the application renders, and it fails in ways that are invisible from the browser: a canonical tag that points at the wrong locale, an hreflang cluster that advertises translations that do not exist, a sitemap generated from a different list of routes than the router actually serves.
What we audit
- Crawl and render. What the crawler receives in the initial HTML versus what appears after hydration, and which of your content only exists in the second one.
- Canonicalisation. Trailing slashes, query parameter handling, pagination, and whether every route agrees with itself about its own address.
- International routing. The full hreflang cluster, including
x-default, validated against the translations that actually exist rather than the ones that were planned. - Structured data. A connected
@graphwith stable@idreferences, not four disconnected blobs that each re-declare the organisation. - Sitemaps and robots. Generated from the same route source the application renders from, so the two cannot drift.
How we fix it
By making it impossible to get wrong. Canonicals, alternates and structured data get generated from a single typed helper that every route must call. A page cannot ship without a canonical, because the metadata function will not compile without one.
This site is built that way, and the implementation is public — the
buildMetadata helper and the JSON-LD graph in this repository are the same
pattern we deploy for clients.
The measurable outcome
Correct indexation of the routes you want indexed, and nothing else. Rich results where the schema supports them. An hreflang cluster that Search Console validates without warnings. These are not growth hacks; they are the floor a content strategy stands on.
