REEID EDITORIAL

Common hreflang mistakes in multilingual WordPress

In multilingual WordPress sites, hreflang only works when every language version points to the same set of alternates, each target is indexable, and the URLs stay aligned as content changes. The most common failures are not syntax errors alone, but broken relationships between posts, templates, canonicals, redirects, and language mappings.

11 Sep 20267 min read

Key takeaway

Treat hreflang as a relationship graph, not a tag you add once. If one language URL changes, redirects, canonicals, or post updates can break the return links and make the whole set unreliable.

Why hreflang breaks so often in WordPress

Hreflang depends on a complete set of reciprocal language URLs. In WordPress, that set is usually assembled from content relationships, permalink structures, and whatever system stores the language mapping. If any part of that chain changes without updating the others, the alternates stop describing the same content set.

That is why many failures are not visible as broken pages. The page still loads, but search engines receive conflicting signals: one URL says it is the English version, another points to a different slug, and a third version may no longer be indexable or may canonicalize elsewhere. The result is a relationship problem, not just a markup problem.

Missing return links

A hreflang set must be reciprocal. If the French page points to the English page, the English page must point back to the French page and to every other valid alternate in the set.

In WordPress, return links often fail when one translation is published later, when a template only renders alternates on some post types, or when a language relationship exists in one direction but not the other. This creates an incomplete graph: search engines can see that a page claims alternates, but they cannot verify the full set from every member.

The operational consequence is that one missing reciprocal link can weaken the entire cluster. The issue is especially easy to miss when content editors update only one language version and assume the relationship is still intact.

Wrong language or locale mappings

A common failure is confusing language codes, regional variants, or site labels. The hreflang value must describe the actual language or language-region target, not the menu label or the site’s internal naming convention.

In WordPress, this often appears when a site has multiple English variants, or when a translation is assigned to the wrong locale relationship after a content migration. The page may be fully translated, but if the mapping says the wrong language or region, the signal becomes misleading.

This matters because hreflang is used to distinguish closely related versions. If the mapping is wrong, search engines may treat the wrong page as the best match for a user’s language or region, even though the content itself is correct.

Inconsistent URL sets across language versions

Every page in a hreflang cluster should reference the same set of alternates. If the English page lists English, French, and German, but the German page lists only German and English, the set is inconsistent.

This usually happens when language relationships are maintained manually, when a template is reused across post types with different translation coverage, or when some pages are excluded from the alternate output because they do not have a matching translation. The problem is not merely missing one URL; it is that the cluster no longer describes a stable, shared set.

For WordPress implementers, the practical question is whether the alternate list is derived from the current content relationship or hard-coded per template. Hard-coded lists drift as soon as a translation is added, removed, or unpublished.

Non-indexable targets

Hreflang should point to URLs that search engines can index. If a target is blocked, noindexed, unavailable, or otherwise not eligible for indexing, it cannot serve as a reliable alternate.

In WordPress, this can happen when a translated page is still in draft, protected, excluded by site settings, or rendered through a route that is not meant to be indexed. It can also happen when a translation exists in the content system but the public URL is not actually accessible.

The failure mode is subtle: the relationship looks complete in the CMS, but the destination cannot participate in search indexing. That means the hreflang signal is pointing to a page that cannot fulfill its role in the cluster.

Redirects that sit inside the hreflang set

Hreflang should reference the final, canonical destination URL rather than a URL that immediately redirects. Redirects add another layer of interpretation and can obscure which URL is meant to represent the language version.

In WordPress, redirects often appear after permalink changes, slug updates, or language-specific routing adjustments. If the hreflang output still uses the old URL, the relationship points to a moving target. If the redirect chain changes later, the hreflang set can silently degrade.

The engineering trade-off is clear: redirects are useful for preserving old links, but hreflang should be maintained on the stable destination URLs. Otherwise the language graph and the routing layer drift apart.

Canonical conflicts

A hreflang URL and its canonical signal need to agree on what page represents the content. If a translated page canonicalizes to a different language version, the signals conflict.

This can happen when canonical logic is inherited from a template, when a plugin-owned data layer outputs alternates but the theme or SEO layer outputs a different canonical, or when a content relationship is copied from one language to another without adjusting the canonical target. The result is that one system says, “this is the French page,” while another says, “the English page is the preferred version.”

That conflict can make hreflang less trustworthy because search engines receive two competing instructions about the same URL. The safest pattern is consistency: each indexable language page should canonicalize to itself unless there is a deliberate, documented reason not to.

Stale relationships after content changes

WordPress content changes do not always preserve language relationships automatically. A slug change, translation deletion, post duplication, or content merge can leave behind stale references in post meta, custom fields, or plugin-owned relationship data.

This is one of the most common long-term failures because the site may have been correct at launch. Over time, editors update one language, move a page, or retire a translation, but the alternate set is not rebuilt. The hreflang output then advertises URLs that no longer belong together.

The operational risk is cumulative. The more often content changes, the more likely the language graph becomes partially outdated unless the system regenerates relationships from the current source of truth.

How these failures usually appear in WordPress

Most hreflang problems in WordPress come from a mismatch between content state and output state. The CMS may know which posts are translations, but the rendered page, canonical tag, redirect layer, or permalink structure may no longer reflect that relationship.

That is why implementers should think in terms of dependencies: the translation relationship, the public URL, the indexability of the target, and the canonical destination all need to agree. If one layer changes without the others, the hreflang cluster becomes inconsistent even if the markup itself is syntactically valid.

IMPORTANT

Frequently asked questions

Why does one missing return link matter if the other pages are correct?

Because hreflang is evaluated as a reciprocal set. If one page points to alternates that do not point back, the cluster is incomplete and the relationship is less trustworthy.

Should hreflang point to redirected URLs or final URLs?

It should point to the final, stable destination URLs. Redirects add another layer that can drift from the language relationship and weaken the signal.

Can a page be in the hreflang set if it is noindexed?

No. A non-indexable target cannot reliably serve as an alternate in the cluster because search engines are not meant to index it.

What usually causes hreflang to go stale in WordPress?

Content changes such as slug updates, translation deletions, duplication, or merges can leave outdated language relationships in post meta, custom fields, or plugin-owned data if the set is not regenerated.

PUT THE ARCHITECTURE TO WORK

See how WordPress integrations behave in a multilingual system

Explore plugin-specific compatibility, translation surfaces and implementation notes in the REEID Integration Directory.

Shopping Cart
Scroll to Top