Hreflang Tags

Hreflang tags tell search engines which language and regional versions of a page exist. Wash automatically generates hreflang data for multilingual WordPress sites syncing to Shopify.

What are Hreflang Tags?

Hreflang is an HTML attribute that tells search engines:

  • Which language a page is written in
  • Which geographic region it targets
  • Where to find alternate language versions

Example Hreflang Tags

<link rel="alternate" hreflang="en" href="https://store.com/blogs/news/article" />
<link rel="alternate" hreflang="de" href="https://store.com/de/blogs/news/article" />
<link rel="alternate" hreflang="fr" href="https://store.com/fr/blogs/news/article" />
<link rel="alternate" hreflang="x-default" href="https://store.com/blogs/news/article" />

Why Hreflang Matters for SEO

Without HreflangWith Hreflang
Search engines may show wrong language versionCorrect language shown to each user
Duplicate content penalties possibleSearch engines understand it's translations
Users land on wrong language pagesUsers see content in their language
Wasted crawl budgetEfficient crawling of all versions

Supported WordPress Plugins

Wash extracts hreflang data from popular multilingual plugins:

PluginSupportNotes
WPMLFullLanguage codes, translations, default language
PolylangFullLanguage slugs, translation links
TranslatePressFullURL-based language detection
WeglotPartialAPI-based translation URLs

Enabling Hreflang Sync

Step 1: Enable in WordPress

  1. Go to Wash > Settings > Hreflangs
  2. Toggle Enable Hreflang Sync to On
  3. Select your multilingual plugin from the dropdown
  4. Save Changes

Step 2: Configure in Shopify App

  1. Open the Wash app in Shopify Admin
  2. Go to Connection Settings > Hreflangs
  3. Enable Hreflang Generation
  4. Configure your default language

How It Works

WordPress (WPML/Polylang)
        ↓
Wash detects translations
        ↓
Hreflang data stored in metafields
        ↓
Shopify theme renders tags

Metafield Structure

Hreflang data is stored in article metafields:

Metafield KeyTypeExample Value
hreflang_tagsJSON[{"lang": "en", "url": "..."}, {"lang": "de", "url": "..."}]
content_languageStringen
default_languageStringen

Displaying in Shopify Theme

Theme.liquid (in <head>)

{%- if template contains 'article' -%}
  {%- assign hreflangs = article.metafields.wash.hreflang_tags -%}
  {%- if hreflangs -%}
    {%- for tag in hreflangs -%}
      <link rel="alternate" hreflang="{{ tag.lang }}" href="{{ tag.url }}" />
    {%- endfor -%}
  {%- endif -%}
{%- endif -%}

With x-default Fallback

{%- if template contains 'article' -%}
  {%- assign hreflangs = article.metafields.wash.hreflang_tags -%}
  {%- assign default_lang = article.metafields.wash.default_language | default: 'en' -%}
  {%- if hreflangs -%}
    {%- for tag in hreflangs -%}
      <link rel="alternate" hreflang="{{ tag.lang }}" href="{{ tag.url }}" />
      {%- if tag.lang == default_lang -%}
        <link rel="alternate" hreflang="x-default" href="{{ tag.url }}" />
      {%- endif -%}
    {%- endfor -%}
  {%- endif -%}
{%- endif -%}

Language Codes

Use ISO 639-1 language codes, optionally with ISO 3166-1 region:

CodeLanguageRegion
enEnglishGlobal
en-USEnglishUnited States
en-GBEnglishUnited Kingdom
deGermanGlobal
de-ATGermanAustria
frFrenchGlobal
esSpanishGlobal
x-defaultFallbackNo match

Shopify Markets Integration

If you use Shopify Markets for internationalization:

  1. Configure market domains in Shopify Admin
  2. Wash will use market URLs in hreflang tags
  3. Each market's articles get correct language URLs

Example with Shopify Markets

// Shopify Markets configuration:
// - Primary: mystore.com (en)
// - Germany: mystore.com/de-de (de)
// - France: mystore.com/fr (fr)

// Generated hreflang:
<link rel="alternate" hreflang="en" href="https://mystore.com/blogs/news/article" />
<link rel="alternate" hreflang="de" href="https://mystore.com/de-de/blogs/news/article" />
<link rel="alternate" hreflang="fr" href="https://mystore.com/fr/blogs/news/article" />

Troubleshooting

Hreflang Tags Not Appearing

  • Verify hreflang sync is enabled in WordPress
  • Check that multilingual plugin is detected
  • Ensure article has translations in WordPress
  • Re-sync the article after enabling

Wrong Language Codes

  • Check your multilingual plugin's language settings
  • Verify ISO language codes are correct
  • Update Wash settings if codes changed

Validation Tools

Best Practices

  1. Always include x-default — Fallback for unmatched languages
  2. Use consistent URLs — Same URL format across all languages
  3. Include self-referencing — Each page should reference itself
  4. Bidirectional linking — All translations must link to each other
  5. Canonical consistency — Canonical URL should match hreflang

Related Documentation