Technical SEO

Shopify Markets: Audit Hreflang and Canonical Output

Use a two-market worksheet to find conflicting hreflang sources, wrong canonical targets and broken locale destinations.

Published Sep 28, 20263 min readBy RankCrab Team

When Shopify Markets, a theme and an SEO app all touch language annotations, inspect what the storefront actually emits before adding code. One well-maintained source is easier to verify than several competing sets of tags.

Shopify's current documentation says automatic hreflang annotations are output through content_for_header and warns about conflicting manual additions. This article supplies an audit procedure and fictional fixtures, not a hands-on test of a merchant account.

Choose a small representative set

Start with the homepage, a product and a collection in two configured markets. Record the expected customer destination first. Language-region codes describe the intended audience; an unfamiliar combination is not invalid merely because it is uncommon.

ResourceEnglish USFrench CanadaCheck
Homehttps://example.com/https://example.com/fr-ca/Each destination works without login
Shirt/products/linen-shirt/fr-ca/products/chemise-linTranslated handles resolve correctly
Collection/collections/summer/fr-ca/collections/eteAnnotations connect equivalent pages

The localized handles above are invented. Do not paste them into a real theme.

Compare intended and delivered tags

An illustrative localized product might declare:

<link rel="canonical" href="https://example.com/fr-ca/products/chemise-lin">
<link rel="alternate" hreflang="en-US" href="https://example.com/products/linen-shirt">
<link rel="alternate" hreflang="fr-CA" href="https://example.com/fr-ca/products/chemise-lin">

Now suppose an app adds another fr-CA annotation pointing to the homepage. That is a concrete conflict: one audience code has two destinations for the same resource. Find the emitting source instead of appending another corrective tag.

Paste annotations into the hreflang checker and compare canonical output in captured snapshots with the HTML SEO diff. Fetch both destinations and check reciprocal annotations manually. A valid-looking snippet cannot establish that the other page is reachable or links back.

Audit worksheet

FieldRecord for each locale URL
Expected market and resourceThe product/collection this customer should see
HTTP result and final URLA response and redirect destination, not just the browser address
CanonicalEvery emitted canonical and whether its target is intended
Alternate mapCode → full URL; preserve duplicates for review
Reciprocal setWhat the linked locale page actually emits
OwnerShopify automatic output, theme, app, or unknown
Indexed inspectionGoogle's selection if available, with date

Choose one layer to own annotations. If a custom multi-store arrangement needs manual output, follow Shopify's current instructions and verify the whole cluster before disabling automatic tags. Avoid hardcoded handles in a global template: the same code runs on many resources.

Do not diagnose by the duplicate label alone

Two regional pages can be similar; hreflang does not make them different products or compel Google to index both. Confirm the business reason for the market versions and inspect declared versus selected canonicals. Do not invent local text solely to make a difference score rise.

For Google's implementation requirements, consult localized page versions. If the issue affects ordinary product variants rather than markets, use the variant URL guide.

Publish and verify

Keep a saved copy of the affected template/app settings. After the change, repeat the same sample and record the resulting tags, destination responses and date. Expand testing to another template and a translated handle. Mark anything not inspected as unknown; passing six URLs does not establish that every market URL is correct.

Check the evidence before you change the site.

Review sitemap changes, redirect mappings and page directives with free browser tools.