Canonical tags and hreflang

Canonical tags for multilingual websites: canonical vs hreflang

Understand how self-canonicals, hreflang, translated URLs, and sitemap entries work together on an international website.

/ The short answer

Canonical and hreflang solve different problems. A canonical identifies the preferred URL for one page version; hreflang connects equivalent language or regional versions. A multilingual page usually needs a self-canonical plus reciprocal alternates, not one language canonical for every locale.

/ 01

Canonical

Give each localized page its own canonical

If /en/pricing and /fr/pricing are separate language pages, each should normally identify itself as the canonical URL for that language version. Do not canonicalize every translation to English simply because English was published first.

  • Canonicalize the exact protocol, host, path, and locale URL you want indexed.
  • Keep redirected, parameterized, or duplicate variants out of the canonical set.
  • Use the same canonical policy in metadata and the sitemap.
Self-canonical localized metadata
export async function generateMetadata({ params }) {
  const { locale, slug } = await params;
  const product = await getProduct(slug);
  const path = `/products/${product.slug}`;

  return {
    title: product.seoTitle[locale],
    description: product.seoDescription[locale],
    alternates: {
      canonical: `https://example.com/${locale}${path}`,
      languages: {
        en: `https://example.com/en${path}`,
        fr: `https://example.com/fr${path}`,
        de: `https://example.com/de${path}`,
      },
    },
  };
}
/ 02

Hreflang

Use hreflang to connect equivalent versions

Hreflang tells search engines which language or regional page should serve a searcher. It is a relationship between equivalent versions, not a replacement for canonicalization and not a way to translate a page.

  • Use valid language and region codes.
  • Make the relationship reciprocal.
  • Include x-default only when you have a deliberate default-language or language-selector destination.
/ 03

Common mistake

Do not point every language to the source page

A French page with an English canonical can send a contradictory signal: the page says it is French, while the canonical says the English URL is preferred. Use a cross-language canonical only when the pages are genuinely duplicates and you intentionally want one preferred version.

  • Avoid cross-locale canonicals for translated content.
  • Do not mix www and non-www hosts in the language set.
  • Do not advertise unpublished translations in hreflang.
/ 04

Verification

Test the complete signal set

Inspect the rendered head, page language, internal links, sitemap entry, and response status for every locale. A correct tag on one page does not fix a broken or non-reciprocal cluster.

  • Check source and translated page pairs.
  • Compare canonical URLs to sitemap URLs.
  • Check that localized pages contain localized visible text and metadata.

/ Production checklist

Verify the language experience before launch.

  • Every localized page has a self-canonical URL.
  • Hreflang URLs are absolute and reachable.
  • Language mappings are reciprocal.
  • Canonical and sitemap URLs agree.
  • No locale points to an unpublished page.
  • The visible content matches the declared language.

/ Frequently asked questions

Questions teams ask before implementing multilingual SEO.

Should multilingual pages use the same canonical URL?

Usually no. Separate language pages should normally have self-referential canonicals, while hreflang connects them as language alternatives.

Is hreflang a replacement for canonical?

No. Canonical identifies the preferred URL for a page version; hreflang identifies equivalent language or regional alternatives.

Can hreflang prevent duplicate-content problems?

It helps search engines understand language and regional relationships, but each page still needs useful localized content and consistent canonical signals.