

Hreflang Troubleshooting for Bilingual Export Websites
Author
Diagnose and fix hreflang issues on bilingual export sites by isolating one language pair, verifying reciprocal tags and self-references, and checking HTTP responses, redirects, and indexability. Includes a reusable diagnosis table.
Start Hreflang Troubleshooting with One Language Pair
When hreflang annotations fail, the fastest path to a fix is to isolate a single language pair. Do not audit every URL at once. Pick one source page and its translated counterpart, then record the exact URLs, the observed symptom, and the time of retrieval.
This evidence becomes your baseline for every subsequent test.
Observed evidence
Capture the following for each page in the pair:
- The full, actual URL of the source-language product or article.
- The full URL of its matching translation, not the other-language homepage.
- The symptom you are troubleshooting: no hreflang in source, missing return tag, wrong language code, or a redirect that breaks the pair.
- The date and time you retrieved the HTML. Hreflang tags can change after a CMS deploy or cache purge, so a timestamp makes your observation reproducible.
Separate current access from historical Google indexing. A page that returns 200 today may have been blocked or redirected when Google last crawled it.
If you use the indexed record in Search Console, record its crawl time and keep it separate from a live test. Do not assume the current state matches what Google saw.
Specific corrective action
For the chosen pair, write down the exact correction you will apply. For example:
- Add the missing
hreflanglink element to the<head>of the source page. - Change the language code from
en-gbtoenif your site targets global English. - Update the counterpart URL in the sitemap to the final, non-redirecting version.
Apply the correction to only this pair. Do not batch changes across multiple pages until you have verified the fix works on one pair.
Retest and limits
After applying the correction, re-fetch the HTML and confirm the tags are present and reciprocal. Use a fresh GET request, not a cached view. A single successful retest does not prove the fix is stable.
Re-check after a CMS publish or cache flush, and monitor the pair over several days. Remember that hreflang is a hint, not a guarantee of indexing or ranking. Your retest only confirms that the markup is correct and accessible.
Verify Reciprocal Return Tags and Self-References
Every language variant must list itself and all alternatives using absolute URLs. This is a core requirement for hreflang annotations. A page that links to its counterpart but not to itself is incomplete.
A counterpart that does not link back breaks the bidirectional relationship.
Inspect the raw HTML of both pages. Look for <link rel="alternate" hreflang="..." href="..." > elements in the <head>. Record which tags are present and which are missing.
For example, you might find that the English page includes only hreflang="en" and omits the French counterpart, or that the French page links to the English page but not to itself.
Add the missing self-reference and return tags. The following syntax uses this article’s actual Chinese and English URLs. It is a formatting example, not a transcript of the live head or a completed test result. Apply the same mapping principle to the corresponding product URLs.
<link rel="alternate" hreflang="en" href="https://www.shmlang.com/en/note/international-seo-hreflang-operations/" />
<link rel="alternate" hreflang="zh" href="https://www.shmlang.com/zh/note/international-seo-hreflang-operations/" />
Compare product identity before matching URLs. A technically reciprocal link between different products is still the wrong translation relationship.
Note that x-default is optional. If you choose to include it, point it to a fallback page, but it is not required for a valid pair.
After editing, fetch both pages again and confirm that each page lists itself and the other. Use a tool that shows the raw HTML, not a rendered view. A correct pair does not guarantee that Google will choose the intended canonical or index both pages.
Hreflang is a language annotation, not a signal-consolidation mechanism. Fully translated pages are not duplicates merely because they are translations; they serve distinct language audiences.
Check HTTP Responses, Redirects and Indexability
Hreflang tags only work when the URLs they point to are accessible and indexable. A page that returns a 404, redirects to an unexpected location, or carries a noindex directive cannot be a valid hreflang target.
For each URL in the pair, perform a GET request (not just HEAD) and record:
- The final URL after any redirects.
- The HTTP status code (e.g., 200, 301, 404).
- The presence of
X-Robots-Tag: noindexin the response headers. - The presence of a
<meta name="robots" content="noindex">tag in the HTML. - Any
robots.txtrule that blocks the URL.
A one-time 200 response does not prove stability. A page might be accessible now but blocked later by a staging environment or a bot-management rule. Record the date and time of each check.
If a URL redirects, update the hreflang tag to point to the final URL, not the redirecting one. If a page returns 404, restore it or remove the hreflang annotation. If a page is intentionally private or excluded from search, retain that restriction and remove it from the public alternate set. Remove noindex only when it was mistakenly applied to content intended for indexing.
Ensure that robots.txt does not disallow the URL for Googlebot.
After making changes, re-run the GET request and confirm the final URL, status, and indexability. Check both the source and the counterpart.
Remember that hreflang is a hint; even with correct HTTP responses, Google may choose a different canonical or not index a page for other reasons. Your retest only confirms that the technical prerequisites are met.
Inline language-pair diagnosis and retest table
Use the following table to document each pair you troubleshoot. Fill in one row per pair.
| Field | Source page | Counterpart page |
|---|---|---|
| URL | ||
| Date/time of check | ||
| HTTP status (GET) | ||
| Final URL after redirects | ||
noindex present? |
||
robots.txt blocked? |
||
| Hreflang tags present? | ||
| Self-reference present? | ||
| Return tag present? | ||
| Language code correct? | ||
| Correction applied | ||
| Retest date/time | ||
| Retest result |
Copy this table into your documentation and update it each time you make a change. The table is your reusable record for tracking hreflang health across multiple pairs.
Resolve Canonical Conflicts Without Merging Translations
When a fully translated page carries a canonical pointing to the source-language URL, search engines receive conflicting signals.
The canonical says “this page is a duplicate of the English version,” while the hreflang annotations say “this is an independent language variant.”
The result is that the translated page may be ignored for its own language, and the hreflang cluster may be treated as a set of duplicates rather than alternatives.
Observed evidence
- Fetch the translated page’s HTML and inspect the
<link rel="canonical">tag. If it points to a URL in a different language, you have a conflict. - Check the HTTP response for the translated URL. A
200status with a cross-language canonical is the typical symptom. - Verify that the hreflang annotations on the page include a self-referencing
hreflangfor its own language and reciprocal tags from the alternate pages.
Specific corrective action
For each fully translated page, set the canonical to its own URL. Google’s documentation states that for hreflang annotations, you should specify a canonical page in the same language, or the best substitute if none exists.
This does not merge the translations; it clarifies that each language version is the primary version for its own language.
Using this Chinese article URL to illustrate the syntax, the canonical and alternates can be represented as follows. The English version uses its intended English canonical.
<link rel="canonical" href="https://www.shmlang.com/zh/note/international-seo-hreflang-operations/" />
<link rel="alternate" hreflang="zh" href="https://www.shmlang.com/zh/note/international-seo-hreflang-operations/" />
<link rel="alternate" hreflang="en" href="https://www.shmlang.com/en/note/international-seo-hreflang-operations/" />
Choose the intended canonical within the same language; self-canonicalization is appropriate here because the example has one canonical product URL per language.
Retest and limits
After updating the canonical, re-fetch the page and confirm the canonical is same-language. Re-crawl the entire hreflang cluster to ensure reciprocal tags are intact. This fix does not guarantee indexing or rankings; it only removes a conflicting signal.
Remember that hreflang is not a signal-consolidation mechanism—it does not tell search engines to merge the authority of translations. Each language version remains an independent page.
Locate Language-Code and Duplicate Template Errors
Language-code errors and duplicate template output are common sources of hreflang failures. They often appear as missing return tags, mismatched language codes, or multiple hreflang blocks in the HTML.
Observed evidence
- Inspect the raw HTML of a page for multiple
<link rel="alternate" hreflang="...">blocks. This can happen when a plugin and the theme both output hreflang tags, or when a CMS snippet is duplicated. - Check the language codes used. Common mistakes include using
en-ukinstead ofen-gb, or usingzh-cnwhen the site targets Traditional Chinese for Taiwan (zh-TW). Google’s documentation lists supported language and region codes; using an unsupported code can cause the tag to be ignored. - Look for stale output from caching layers. A cached version of the page may contain old hreflang tags that no longer match the current URL structure.
Specific corrective action
- Remove duplicate hreflang blocks. Keep only one set of annotations per page, preferably generated by a single source (e.g., a central function or a single plugin).
- Correct language codes to match the actual content language and region. For example, use
enfor English,defor German,frfor French, andzh-Hantfor Traditional Chinese if needed. - Invalidate the affected URLs in the caching layers responsible for stale output, rather than purging the entire site by default. Then re-fetch the page to confirm the output is fresh.
Retest and limits
After correcting codes and removing duplicates, re-crawl the affected pages and verify that each page has exactly one hreflang set. Use a crawler that reports hreflang errors, such as Screaming Frog, to check for missing return tags.
Note that x-default is optional; you do not need to add it unless you have a specific fallback page for unspecified languages.
Use your own retrieved HTML or crawler output for tag comparison; record Search Console indexing and live-test evidence separately.
Complete a Pair-Level Repair and Retest Record
To systematically track hreflang issues, maintain a pair-level record for each language pair. This table helps you document the observed problem, the exact fix, and the retest result.
| Source URL | Alternate URL | Return tag present. | Canonical points to | HTTP status | Evidence time (UTC) | Owner | Retest result |
|---|---|---|---|---|---|---|---|
| Hypothetical English product | Matching Chinese product | No | Wrong Chinese canonical | To be measured | Record actual time | Assigned maintainer | Not yet retested |
This row illustrates a defect, not a completed client repair. Do not prefill a successful result. Replace descriptions with actual URLs and attach the two retrieved responses before signing off.
Observed evidence
For each pair, record the exact URLs, whether the alternate page includes a reciprocal hreflang tag back to the source, and the canonical URL on each page.
Also note the HTTP status of each URL—if a page returns a redirect or 404, the hreflang annotation is ineffective.
Specific corrective action
If a return tag is missing, add it to the alternate page. If the canonical is cross-language, change it to the same-language URL. If a URL redirects, update the hreflang to point to the final URL, or fix the redirect if it is unintended.
Retest and limits
After making changes, re-crawl the pair and update the table with the retest result. This record is for your internal tracking; it does not affect search engines directly. It helps you ensure that all pairs are reciprocal and that no stale tags remain.
Remember that this record does not guarantee indexing or rankings; it only documents your technical compliance.
Questions and Limits of Hreflang Repairs
Partial language availability
If you have not translated every page into every language, you do not need to annotate missing pages. Hreflang only applies to pages that have an equivalent in another language. For a page without a relevant language or regional alternate, do not invent a counterpart. A single-language site may still have genuine regional versions, so evaluate the actual page relationship.
Optional x-default
x-default is optional. It is used to indicate a fallback page for users whose language is not covered by the other annotations. If you do not have a suitable fallback, you can omit it without causing errors.
Sitemap versus HTML equivalence
Google’s documentation states that HTML tags, HTTP headers, and sitemap annotations are all equivalent methods for specifying hreflang. You can choose one method and apply it consistently. Mixing methods can lead to conflicts if they disagree.
What cannot be concluded
Fixing hreflang errors does not guarantee that search engines will index the pages or rank them for specific languages. Hreflang is a hint, not a directive.
Also, hreflang does not consolidate signals; it does not tell search engines to treat translations as duplicates. Each language version is an independent page that can rank on its own merits.
Therefore, after repairs, monitor your logs and indexing status over time, but do not expect immediate changes in rankings.
Source: Tell Google about localized versions of your page
Next step
Use the pair-level record table to document your next hreflang repair cycle.
Related services and further reading
Official references and sources
Comments (0)
No comments yet. Be the first!