Hreflang Mapping Workbook and QA Template
Hreflang fails quietly. The tags are in the page source, nothing errors, and the wrong country still sees the wrong version. Usually it's one of three things: a page that doesn't link back, an invalid code like en-UK, or a canonical that points somewhere hreflang doesn't. This workbook catches all three before launch. You map each piece of content to its URL in every locale, then check that every page lists itself and all the others, the codes are valid and the canonicals agree. The planning variants are still here, plus a filled-in example with the mistakes it caught.
- Format
- Editable Word .docx
- Length
- 9 variants · ~9 pages
- Price
- 100% free
- Setup
- Copy or download
Get the editable Word doc in one click.
★★★★★4.9·Free · No signup · Instant download
Hreflang Mapping Workbook and QA Template
Pick a URL pattern for [Brand]
Your international URL structure is hard to change later, so decide deliberately. There are three common options, each with trade-offs in cost, signal strength, and maintenance.
- ccTLD: [example.de], [example.fr]: strongest geo signal, clear to users, but expensive and separate authority per domain.
- Subdirectory: [example.com/de/], [example.com/fr/]: consolidates authority on one domain, easiest to maintain, recommended for most teams.
- Subdomain: [de.example.com]: flexible hosting, but signals can be treated as more separate than subdirectories.
Pick one approach and apply it consistently across every locale. Mixing patterns confuses crawlers and complicates hreflang.
Document your decision and the rationale below so future contributors do not improvise.
- Chosen structure: [ccTLD / subdirectory / subdomain]
- Reason: [budget, team size, geo priority]
- Locales in scope: [list]
Why it works
Launch localized pages with hreflang that Google can confirm, so each market sees the right version.
- Maps every piece of content across locales in one row, so missing return links show up as gaps.
- Checks codes, canonicals and status per row, so en-UK and conflicting canonicals get caught before launch.
- Records a fallback per row, so unmatched users land on a selector instead of a random version.
9 ready-to-use variants
Copy allURL Structure for International
When to use: Choose how to host country and language versions before you build anything.
Pick a URL pattern for [Brand]
Your international URL structure is hard to change later, so decide deliberately. There are three common options, each with trade-offs in cost, signal strength, and maintenance.
- ccTLD: [example.de], [example.fr]: strongest geo signal, clear to users, but expensive and separate authority per domain.
- Subdirectory: [example.com/de/], [example.com/fr/]: consolidates authority on one domain, easiest to maintain, recommended for most teams.
- Subdomain: [de.example.com]: flexible hosting, but signals can be treated as more separate than subdirectories.
Pick one approach and apply it consistently across every locale. Mixing patterns confuses crawlers and complicates hreflang.
Document your decision and the rationale below so future contributors do not improvise.
- Chosen structure: [ccTLD / subdirectory / subdomain]
- Reason: [budget, team size, geo priority]
- Locales in scope: [list]
Hreflang Mapping Plan
When to use: Define every language-region pair before writing a single tag.
Map your locales for [Brand]
Before implementing anything, build a master list of every locale you serve. Get the codes right: hreflang uses an ISO 639-1 language code (e.g. en, es, fr), optionally followed by an ISO 3166-1 Alpha-2 region code (e.g. US, MX, GB). Language comes first, region second.
- en: any English speaker (no region) → [URL]
- en-US: English, United States → [URL]
- en-GB: English, United Kingdom → [URL]
- es-MX: Spanish, Mexico → [URL]
- x-default: fallback for unmatched users → [URL]
Use a region only when you have genuinely distinct content for it. If your Spanish page is identical for every country, target es alone rather than inventing es-MX, es-AR, and es-ES.
Record each pair and its target page so implementation is mechanical.
- Locale: [lang or lang-region]
- Target URL: [absolute https URL]
Hreflang Implementation Rules
When to use: Apply the non-negotiable technical rules so the tags actually work.
Implement hreflang correctly for [Brand]
Hreflang only works when a few rules are all satisfied at once. Break one and Google may ignore the annotations for that page.
- Self-reference: every page must list itself among its hreflang annotations.
- Return tags: annotations must be bidirectional. If page A points to page B, page B must point back to page A.
- x-default: include a fallback entry for users whose language or region you have not explicitly targeted.
- Absolute URLs: always use full https URLs, not relative paths.
Choose one delivery method and do not mix them: the HTML head (link rel='alternate'), HTTP headers (useful for PDFs and non-HTML files), or the XML sitemap.
A minimal valid set for one locale looks like this:
- hreflang: en-us → [URL for US page]
- hreflang: en-gb → [URL for UK page]
- hreflang: x-default → [fallback URL]
Remember: hreflang signals which version to show, not a ranking boost.
Avoid Duplicate Content Across Locales
When to use: Use canonical and hreflang together so locales do not cannibalize each other.
Keep locales from competing on [Brand]
Near-identical pages across regions (for example en-US and en-GB) can look like duplicate content. Hreflang and canonical solve this together, but only if you configure both correctly.
- Each locale page should have a self-referencing canonical pointing to itself.
- Do not canonical every locale to a single master URL: that tells search engines to drop your other versions.
- Pair the self-canonical with a complete, bidirectional hreflang set so engines know the pages are alternates, not duplicates.
The combination signals: these pages are equivalent versions for different audiences, each one valid in its own right.
Verify per page before publishing:
- canonical: points to [this same locale URL]
- hreflang self: lists [this locale]
- hreflang others: all sibling locales present [yes / no]
- x-default: present [yes / no]
If canonical and hreflang ever point to different URLs for the same page, fix it. Conflicting signals get ignored.
Localization vs Translation
When to use: Ship genuinely local pages, not machine-translated copies.
Localize, do not just translate, for [Brand]
Raw machine translation produces pages that read awkwardly and convert poorly. True localization adapts the whole experience to the market, which also strengthens the signal that each locale deserves its own page.
- Currency & pricing: show local currency, taxes, and payment methods.
- Language nuance: have a native speaker review tone, idioms, and terminology.
- Units & formats: adapt dates, measurements, addresses, and phone formats.
- Local intent: research keywords in-market; a literal translation rarely matches how locals actually search.
- Trust signals: local contact details, shipping, returns, and legal pages.
Keep your hreflang language code aligned with the actual content language. Tagging a page es-MX while serving English text sends a mismatched signal.
Localization checklist per locale:
- Currency adapted: [yes / no]
- Native review done: [reviewer]
- Local keywords researched: [yes / no]
Hreflang QA & Common Errors
When to use: Audit your implementation and catch the mistakes that silently break it.
QA hreflang on [Brand]
Most hreflang failures are silent: the tags exist but get ignored. Run this audit after launch and after any locale change.
- Missing return tags: confirm every annotation is reciprocated by the page it points to.
- No self-reference: each page must include itself.
- Wrong codes: check for invalid region codes: use country codes like GB, not language-style codes; UK is not valid.
- Relative URLs: replace any relative paths with absolute https URLs.
- Canonical conflict: ensure canonical and hreflang target the same URL per page.
- No fallback: consider an x-default for users who match none of your locales, such as a language selector.
Use a crawler that reports hreflang reciprocity and spot-check pages with URL Inspection in Search Console to validate at scale (Google retired the old International Targeting report).
Log issues found and their status:
- Error: [description]
- Affected locales: [list]
- Status: [open / fixed]
Hreflang Mapping Workbook (fill-in)
When to use: One row per piece of content: its canonical URL in every locale, the fallback and the reciprocal-check result.
Mapping workbook
One row per piece of content (a product, a guide, a category). One column per locale. Every cell is a full https URL, or blank if that locale has no version.
| Content ID | [en] | [en-GB] | [de] | [fr-CA] | x-default | Reciprocal check | Owner |
|---|---|---|---|---|---|---|---|
| [id] | [URL] | [URL] | [URL] | [URL] | [URL or none] | [pass / fail] | [name] |
| [id] | [URL] | [URL] | [URL] | [URL] | [URL or none] | [pass / fail] | [name] |
| [id] | [URL] | [URL] | [URL] | [URL] | [URL or none] | [pass / fail] | [name] |
Rules for every row
- Self plus all others: each version lists itself and every other version in the row. Google may ignore annotations without return links.
- Canonical = the URL in the cell: each localized page is its own canonical. Don't canonicalize translations to the English page.
- Valid codes: ISO 639-1 language, optional ISO 3166-1 Alpha-2 region. A region alone is invalid. The UK is GB, never UK.
- Full URLs: include https://. Relative and protocol-relative URLs don't count.
- One method: HTML link tags, HTTP headers or the XML sitemap. Google treats them the same; using several adds nothing.
Code & Reciprocity QA
When to use: The checks to run on a sample of rows after implementation, with a log for what failed and who fixes it.
QA checks
| Check | How | Result |
|---|---|---|
| Return links | Each URL in the row lists every other URL in the row | [pass / fail] |
| Self-reference | Each page includes itself | [pass / fail] |
| Codes | No region-only codes, no en-UK, no unsupported codes like es-419 | [pass / fail] |
| Canonicals | Each page's canonical equals its own cell | [pass / fail] |
| Status | Every listed URL returns 200, no redirects | [pass / fail] |
| Language match | The page content is in the language its code says | [pass / fail] |
| Fallback | x-default set where you have a selector or global page | [set / not needed] |
Issue log
| Content ID | Locale | Issue | Owner | Fixed on |
|---|---|---|---|---|
| [id] | [locale] | [issue] | [name] | [date] |
| [id] | [locale] | [issue] | [name] | [date] |
Completion check: sample of [number] rows passes every check, verified on [date].
Worked Example (fictional software company)
When to use: Three filled-in rows from an invented SaaS site with four locales, and the three errors the QA caught before launch.
Worked example: Fieldnote
Example only. The company, people, URLs and figures are invented to show what a usable, filled-in version looks like.
| Content | en | en-GB | de | x-default |
|---|---|---|---|---|
| Pricing | /pricing | /en-gb/pricing | /de/preise | /pricing |
| Time tracking feature | /features/time-tracking | /en-gb/features/time-tracking | /de/funktionen/zeiterfassung | /features/time-tracking |
| UK VAT guide | (none) | /en-gb/guides/vat | (none) | (none) |
What QA caught
- The developer had used en-UK. UK is a reserved code; it became en-GB.
- German pages had a canonical pointing to the English page, which contradicted hreflang. Each now points to itself.
- The UK-only VAT guide listed a German alternate that didn't exist. A row can have gaps; it now lists only itself.
Next step
Use Get Source Code of Webpage to read the hreflang tags a page really serves, and run a website audit on each locale to find broken or redirected alternates. If you declare hreflang in sitemaps, build the files from your workbook with the XML Sitemap Generator. Planning a full international rollout? See our SEO & GEO services.
How to use this template
- List every locale you serve and write its code: ISO 639-1 language, optional ISO 3166-1 Alpha-2 region (GB, not UK).
- Choose one URL structure for all locales: country domains, subdirectories or subdomains.
- Fill the workbook: one row per piece of content, one column per locale, a full https URL in every cell that has a version.
- Pick one delivery method: HTML link tags, HTTP headers or the XML sitemap.
- Make each page list itself and every other version in its row, and set its canonical to its own URL.
- Add an x-default where you have a language selector or a global page for unmatched users.
- Run the QA checks on a sample of rows: return links, codes, canonicals, status and language match.
- Log failures with an owner, fix them, and recheck after any locale launch or URL change.
Pro tips
- Canonicalize each translation to itself. Pointing translations to the English page contradicts hreflang.
- Leave a cell blank when a locale has no version. Never point hreflang at a page in another language.
- Use a generic language version (en) when you have several regional variants, so unmatched English speakers still get a page.
- Check codes against the ISO lists. en-UK, region-only codes and es-419 don't work in Google.
Frequently asked questions
What is the correct format for an hreflang value?
An ISO 639-1 language code, optionally followed by an ISO 3166-1 Alpha-2 region code, like en, en-GB or fr-CA. A region code alone isn't valid, and the United Kingdom is GB, not UK.
Do I need return links on every page?
Yes. Each version must list itself and all the other versions. Google may ignore annotations that aren't confirmed by the other page.
What does x-default do and is it required?
It marks the fallback page for users whose language matches none of your versions, such as a language selector. It's optional, but useful when you have a selector or a global page.
How should canonical tags work with hreflang?
Each localized page should be its own canonical. If a German page canonicalizes to the English page, it contradicts hreflang and the German page may not be shown.
Where should hreflang be placed?
In HTML link tags in the head, in HTTP Link headers (useful for PDFs) or in the XML sitemap. Google treats all three the same, so pick one and use it consistently.
Does hreflang improve rankings?
Not directly. It helps Google show the right language or regional version to each user, which can improve clicks and conversions in each market.