A hreflang canonical conflict occurs when a WordPress site tells search engines that one URL is the preferred version while its language or regional markup points to a different URL. This commonly happens on multilingual sites, translated product pages, country-specific landing pages, or staging-to-production migrations.
In this guide
The fix is not to remove canonical tags or hreflang blindly. Each signal has a different job: the canonical tag identifies the preferred version of substantially similar pages, while hreflang connects equivalent pages intended for different languages or regions. They should support the same URL structure rather than contradict it.
What canonical and hreflang tags each do
A canonical tag looks like this:
<link rel="canonical" href="https://example.com/fr/produit/" />
It tells search engines which URL should represent a page when several URLs contain duplicate or near-duplicate content. A page should normally have a self-referencing canonical unless there is a deliberate reason to consolidate it elsewhere.
Hreflang markup connects equivalent pages for different audiences. For example:
<link rel="alternate" hreflang="en" href="https://example.com/product/" /><link rel="alternate" hreflang="fr" href="https://example.com/fr/produit/" /><link rel="alternate" hreflang="x-default" href="https://example.com/product/" />
These URLs are alternatives, not duplicates to be collapsed into one page. Google may use the markup to show the appropriate language or regional version, but hreflang does not force indexing and does not replace canonicalization.
How a hreflang and canonical conflict happens
One language page canonicals to another language
Suppose the English page is /product/ and the French page is /fr/produit/. If both pages use the English URL as their canonical, the French page is effectively asking search engines not to treat it as an independent indexable version.
At the same time, hreflang may identify the French URL as the French alternative. Those instructions do not work well together because the French page does not clearly establish itself as a valid member of the language set.
Hreflang URLs redirect or return errors
Hreflang should point directly to final, indexable URLs. Problems arise when the URLs:
- redirect from HTTP to HTTPS or between www and non-www;
- redirect to a different language;
- return a 404, 403, or server error;
- are blocked by
robots.txtor a security rule; - contain tracking parameters or temporary query strings;
- are on a staging domain or an old site address.
Only some language versions reference one another
Hreflang annotations should be reciprocal. If the English page references French, the French page should reference English. Missing return references can make the language cluster unreliable, especially when a translation plugin generates markup inconsistently.
Two systems output different tags
A translation plugin, SEO plugin, theme, custom code, or server-side integration can each add language or canonical markup. The browser may then receive multiple canonical tags or conflicting hreflang sets. Search engines may choose one signal, but the result is unpredictable.
Run a safe diagnosis before changing settings

Do not start by editing theme files. First identify what the public page actually sends to visitors and crawlers.
- Open the affected URL in a private browser window.
- View the source, not only the rendered inspector. Search for
rel="canonical"andhreflang. - Record every canonical URL and every language or regional URL.
- Open each referenced hreflang URL and confirm that it is the final intended address.
- Check whether each page links back to the other language versions.
- Compare the markup for logged-out visitors with the markup seen after clearing caches.
There should generally be one clear canonical declaration in the document head. If you find multiple canonical tags, treat that as a separate configuration problem and trace which plugin, theme, or custom function creates each one. The guide to multiple canonical tags in WordPress explains that investigation in more detail.
Use one consistent URL set
Create a simple table for each language or region before making changes:
- Language: such as English or French.
- Public URL: the final HTTPS address.
- Canonical: normally the same URL for that page.
- Hreflang code: such as
en,fr, oren-GB. - Indexability: whether the page is allowed to be indexed.
For genuinely equivalent pages, the desired pattern is usually:
English page: canonical = https://example.com/product/French page: canonical = https://example.com/fr/produit/
Both pages should then reference the complete set of alternatives:
English page:en - https://example.com/product/fr - https://example.com/fr/produit/x-default - https://example.com/product/
French page:en - https://example.com/product/fr - https://example.com/fr/produit/x-default - https://example.com/product/
The exact language codes depend on your targeting. A country-specific version may use a code such as en-GB rather than only en. Use the language and region your content actually serves; do not create country variants merely to add more tags.
Fix the conflict in the system generating the tags
When an SEO plugin controls canonicals
Open the page-level SEO settings and check the canonical field. Leave it blank if the plugin automatically generates a self-referencing canonical and the page should stand on its own. Add a custom canonical only when consolidation is intentional.
Then inspect the plugin’s global settings for taxonomy, attachment, parameter, or multilingual rules. Exact labels vary by plugin version. Avoid adding a second canonical through a header-injection field or theme snippet.
When a translation plugin controls hreflang
Use the translation plugin’s official URL and language settings as the source of truth. Confirm that every translation has a stable public URL and that translated pages are not set to noindex unless that is deliberate.
Do not manually add a second hreflang set if the plugin already outputs one. Duplicate or incomplete sets are more likely to create errors than solve them.
When custom code adds markup

Search the active theme, child theme, must-use plugins, and custom snippets for:
rel_canonical;wp_head;hreflang;wpseo_canonicalor similar SEO filters;- hard-coded domain names from a previous migration.
Make changes in a child theme or a maintained custom plugin, not directly in a parent theme. Keep a backup and record the original code so the change can be reversed.
Check redirects, sitemaps, and internal links
Tags alone cannot repair inconsistent URL architecture. Every canonical and hreflang URL should resolve directly to a final page with the correct language content.
Review redirects for:
- HTTP versus HTTPS;
- www versus non-www;
- trailing slash differences;
- uppercase and lowercase paths;
- old translated slugs;
- domain changes after migration.
Your XML sitemap should contain the canonical URLs you want discovered, not obsolete redirected URLs or parameter variations. Internal links should also use the same final URL format. If one page links to an old address while its canonical points elsewhere, update the internal link rather than relying on a redirect.
If the issue appeared after changing SSL or a CDN, check for URL mismatches before changing SEO settings. A redirect configuration problem can affect every language version; the guide to WordPress redirect errors after SSL or Cloudflare changes covers that broader diagnosis.
Validate the corrected markup
After saving changes, purge the relevant page, plugin, server, and CDN caches. Then check the public source again from a logged-out session. Confirm all of the following:
- each page has one intended canonical;
- the canonical is a final HTTPS URL;
- the canonical is not unexpectedly pointing to another language;
- hreflang URLs use the same final URL format;
- language codes match the content and audience;
- language pages reference one another;
- the referenced pages are accessible and indexable when intended;
- the sitemap and internal links use canonical URLs.
Use the official Google documentation for localized versions to verify hreflang syntax and implementation details. Search tools may continue showing old observations until pages are crawled again, so do not undo a correct fix solely because a report does not update immediately.
When canonical and hreflang should not be combined
Not every page needs hreflang. Do not connect pages that are merely similar but serve different purposes, such as a product page and a category page. Do not use hreflang to connect unrelated regional content, thin placeholder translations, or pages that intentionally redirect.
If two URLs are true duplicates and there is no meaningful language or regional distinction, use canonicalization instead of hreflang. For a broader review of duplicate URL signals, see how to fix broken canonical tags and duplicate URL issues.
When to get professional help
Consider assistance if the conflict affects hundreds of URLs, appeared after a migration, involves several translation systems, or keeps returning after cache purges. A specialist can compare server responses, rendered HTML, sitemap entries, redirects, and plugin output without guessing at isolated tags.
For ongoing updates, security checks, and multi-site oversight, WP Fix It Care and Site Manager can be a practical option. If the site is already producing errors or serving the wrong URLs, take a backup before changing global rules.
The safest resolution is a consistent architecture: every language page has its own appropriate canonical, every equivalent page is referenced reciprocally with hreflang, and redirects, sitemaps, and internal links all use the same final URLs.



