S.
  • Services
  • For you
  • Solutions
  • Work
  • About
  • Know-how
  • Blog
Start a project
EN/PL/RU
  • Services01
  • For you02
  • Solutions03
  • Work04
  • About05
  • Know-how06
  • Blog07
Start a project
EN/PL/RU
Vlad Sedenko
Independent web product developer
EU / Poland / Warsaw
Products
  • NextWooNext.js storefront for WooCommerce
© 2026. All rights reserved
Services
  • Product Discovery
  • UX/UI Design
  • MVP Development
  • SaaS Development
  • Website Redesign
  • Web Application Security
  • Conversion Optimization
  • API Integrations & Business Automation
  • Product Support
Explore
  • Services
  • For you
  • Work
  • Solutions
  • About
  • Blog
  • Know-how
  • Contact
Start a project
  • vlad@sedenko.net
  • LinkedIn
  • Privacy/Cookies
Know-how/Next.js SEO Checklist: The Complete Guide for App Router (2026)

Part 3 of 22

Canonical URLs and hreflang: one page, one address

Canonical URLs and hreflang in Next.js: killing duplicate content, reciprocal language links, localized slugs and x-default done right.

2026-07-15
Canonical URLs and hreflang: one page, one address

All topics in this guide

A practical, section-by-section SEO checklist for Next.js: rendering strategy, Metadata API, hreflang, structured data, Core Web Vitals, and optimization for AI answer engines.

Duplicate content is the silent killer of multilingual and parameterized sites. Two mechanisms fix it:

Canonical tells search engines which URL is the "real" one when several serve the same content (tracking params, trailing slashes, pagination):

export async function generateMetadata({ params }): Promise<Metadata> {
  return {
    alternates: {
      canonical: `/blog/${params.slug}`,
    },
  };
}

hreflang tells them which language versions of a page exist, so a Polish user gets the Polish page in results:

export async function generateMetadata({ params }): Promise<Metadata> {
  const { lang, slug } = params;
  return {
    alternates: {
      canonical: `/${lang}/blog/${slug}`,
      languages: {
        en: `/en/blog/${slug}`,
        pl: `/pl/blog/${slug}`,
        ru: `/ru/blog/${slug}`,
        "x-default": `/en/blog/${slug}`,
      },
    },
  };
}

The mistakes that cost real traffic:

  • hreflang must be reciprocal. If the EN page lists the PL version, the PL page must list the EN one back — otherwise Google ignores the whole group.
  • Every page must include itself in the languages map.
  • Localized slugs: if your Polish post lives at a different slug, the hreflang map has to point to the actual localized URL, not a mechanical /pl/ + same-slug guess. Generate the map from your content source, don't hardcode it.
  • x-default covers users whose language you don't serve — point it at your primary locale.
  • Canonical must point to a page that returns 200 and isn't noindex — a canonical to a redirecting URL is ignored.

Checklist:

  • Self-referencing canonical on every indexable page
  • hreflang generated from real localized slugs, reciprocal in all directions
  • x-default present
  • URL parameters (utm, filters, sorting) canonicalized to the clean URL
← PreviousMetadata API: titles, descriptions and the template patternNext →Open Graph and dynamic OG images

01—22

All topics in this guide

  1. 01Rendering strategy: what does the crawler actually see?→
  2. 02Metadata API: titles, descriptions and the template pattern→
  3. 03Canonical URLs and hreflang: one page, one address•
  4. 04Open Graph and dynamic OG images→
  5. 05sitemap.ts and robots.ts: file conventions instead of hand-written XML→
  6. 06Structured data: JSON-LD that earns rich results→
  7. 07Images, fonts and scripts: the classic performance trio→
  8. 08Core Web Vitals: the three numbers Google measures→
  9. 09Redirects, 404s and status codes→
  10. 10Caching and content freshness→
  11. 11AEO/GEO: getting cited by ChatGPT, Perplexity and Google AI Overviews→
  12. 12Monitoring: SEO is a loop, not a launch task→
  13. 13Trust and E-E-A-T: making your site believable→
  14. 14Image SEO: turning pictures into traffic→
  15. 15Internal linking and site architecture→
  16. 16Search intent: pages that match what people actually type→
  17. 17Programmatic SEO in Next.js: pages at scale without the spam→
  18. 18SEO migration: replatforming to Next.js without losing traffic→
  19. 19Pagination and faceted navigation without index bloat→
  20. 20Accessibility and SEO: one job, two rewards→
  21. 21Content decay: refresh, consolidate or prune→
  22. 22Off-page for developers: earning links without buying them→

Want this handled for you?

I audit and fix technical SEO on Next.js sites — indexing, performance, hreflang and AI visibility.

Technical SEO service