Why is your multilingual site losing traffic and getting penalized without hreflang?
You have a website in Italian, English, and German. Each page exists in three versions. Problem? Google doesn't know which one to show a user from Munich — and often shows the wrong one. Worse: it labels your pages as duplicates and drops them from the index. At Meteora Web, we see this every time we audit Italian SMEs that export. The culprit? Missing hreflang tags.
Hreflang is not optional. It's the signal that tells Google: "This is the version for German-speaking Switzerland, this for Germany, this for Austria." Without it, your multilingual site is a mess for search engines. And a mess costs you visits, orders, and revenue.
What are the risks of a site without hreflang?
Three concrete scenarios we've seen in real projects:
- Cannibalized traffic — The Italian version appears in Swiss results because Google chose it as "best". Your translations stay hidden.
- Duplicate filter — If content is similar (e.g., translated landing page), Google decides it's copied and discards everything. Say goodbye to indexing.
- Confused URLs — Pages with ?lang=de or /it/ and /de/ mixed without consistency. Google takes weeks to understand the structure.
We solved a case for a clothing e-commerce client operating in Italy, Germany, and France. They used Polylang on WooCommerce but no hreflang. Result: German pages were indexed only in Italy. After implementation, organic traffic from Germany grew 340% in 8 weeks.
Sponsored Protocol
How does the hreflang tag work in practice?
Hreflang is an HTML attribute you can implement in three ways. Let's look at each with real code.
1. Link tag in page head (recommended)
On every page, declare all language versions.
<link rel="alternate" hreflang="it" href="https://www.meteoraweb.com/contatti" />
<link rel="alternate" hreflang="en" href="https://www.meteoraweb.com/en/contact" />
<link rel="alternate" hreflang="de" href="https://www.meteoraweb.com/de/kontakt" />
<link rel="alternate" hreflang="x-default" href="https://www.meteoraweb.com/en/contact" />Note: x-default indicates the default version for users not matching any language/country. Always include it.
2. Hreflang in XML sitemap
Useful for large or dynamic sites. Each URL is a node listing translations.
<url>
<loc>https://www.meteoraweb.com/contatti</loc>
<xhtml:link rel="alternate" hreflang="it" href="https://www.meteoraweb.com/contatti" />
<xhtml:link rel="alternate" hreflang="en" href="https://www.meteoraweb.com/en/contact" />
<xhtml:link rel="alternate" hreflang="de" href="https://www.meteoraweb.com/de/kontakt" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.meteoraweb.com/en/contact" />
</url>Advantage: no need to modify every page's HTML. Perfect for Laravel or other frameworks with automatic sitemap generation.
Sponsored Protocol
3. HTTP headers (for PDFs and non-HTML resources)
If you need to serve translated versions of documents, use Link in the header.
Link: <https://www.meteoraweb.com/contatti>; rel="alternate"; hreflang="it",
<https://www.meteoraweb.com/en/contact>; rel="alternate"; hreflang="en",
<https://www.meteoraweb.com/de/kontakt>; rel="alternate"; hreflang="de",
<https://www.meteoraweb.com/en/contact>; rel="alternate"; hreflang="x-default"We often use this technique for static sites on Nginx with rewrites.
Which language-country codes should you use?
Format is language-country (ISO 639-1 + ISO 3166-1 alpha-2), or just language. Examples:
it— generic Italian (all Italian-speaking countries)it-CH— Italian for Switzerlanden— generic Englishen-GB— British Englishen-US— American Englishde— generic Germande-AT— German for Austria
Common mistake: using it_it (with underscore and uppercase) is invalid. Format must be lowercase with a dash. Google will ignore the tag.
Sponsored Protocol
How to avoid conflicts with the canonical tag?
The canonical tag and hreflang must be consistent. The basic rule: if hreflang indicates a URL is an alternate version, the canonical must point to itself, not to another version. Example:
<link rel="canonical" href="https://www.meteoraweb.com/de/kontakt" />
<link rel="alternate" hreflang="de" href="https://www.meteoraweb.com/de/kontakt" />
<link rel="alternate" hreflang="en" href="https://www.meteoraweb.com/en/contact" />If you mistakenly set canonical to the English version on the German page, Google thinks the German page is a copy and ignores it. We've seen entire sites disappear from the index because of this detail.
What mistakes kill hreflang implementation?
Here are the top 5 we encounter in projects:
- Missing bidirectional correspondence — If the Italian page points to the German one, but the German page doesn't point back, indications are incomplete. They must be reciprocal.
- Hreflang on pages with tracking parameters — URLs with
?utm_source=...should not have hreflang, as they are not distinct language versions. - Declaring multiple versions for the same hreflang — You cannot have two URLs with
hreflang="en"on the same page. - Forgetting
x-default— Without it, Google might not know what to show users with an uncovered language. - Hreflang and domain changes — If you use different domains (e.g., .it, .de, .com), hreflang remains valid, but each domain must be properly configured in Search Console.
How to verify if your hreflang works?
Don't rely on guessing. Use real tools:
Sponsored Protocol
- Google Search Console — Go to «International Targeting» → «Pages with hreflang labels». Shows errors and warnings.
- Aleyda Solis' Hreflang Testing Tool — Enter a URL and check if declarations are correct.
- Browser extensions — Extensions like «Hreflang Checker» for Chrome show tags present on the page.
At Meteora Web, when we implement hreflang for a client, we test it on at least 5 representative pages and check the sitemap with a custom Python script. A single mistake on a strategic landing page can lose weeks of rankings.
Sponsored Protocol
What to do now
Don't wait for Google to penalize your site. Take concrete actions today:
- Audit your multilingual pages — List all language-URL pairs. Verify each pair is bidirectional.
- Choose your implementation method — For WordPress with Polylang/WPML, plugins often auto-generate hreflang. Check the output. For Laravel or custom sites, use the XML sitemap.
- Add the
x-defaulttag — Point it to the version you consider universal (usually English). - Check canonical and hreflang together — Ensure no conflicts.
- Resubmit your sitemap to Google Search Console — Force re-crawling of pages.
If you manage a project with dozens or hundreds of pages, don't do it manually. Use a script to generate hreflang in the sitemap. We've automated the process for clients with more than 5 languages. Result: implementation time cut from days to minutes.
Remember: a multilingual site without hreflang is like a shop window with only Italian signs in Munich. Customers pass by. We, from Sciacca, help Italian SMEs avoid this mistake. If you want clarity, contact us.
For more technical SEO insights, read our advanced technical SEO pillar guide.