Meta Tags for Multi-Language Sites
Master meta tags for multilingual sites. Learn hreflang, lang attributes, and locale codes to avoid duplicate content and rank globally.
Prerequisites
Before you implement meta tags for a multi-language site, you need:
- A live website with at least two language versions (or planned versions)
- Access to your site's HTML head section or content management system (CMS)
- Language codes — ISO 639-1 codes (en, es, fr, de, zh, ja) and optional region codes (US, MX, GB)
- URL structure decided — whether you'll use subfolders (/en/, /es/), subdomains (en.example.com), or URL parameters (?lang=en)
- Google Search Console access to monitor indexing and errors
- A list of all language versions of each page (example: English version at /en/about, Spanish at /es/about)
If you haven't set up Google Search Console yet, follow this 10-minute setup guide first. You'll need it to validate your meta tag implementation.
If you're running WordPress, configure your SEO plugin to handle language and locale tags automatically — most plugins include hreflang support out of the box.
Understanding the Core Meta Tags for Multi-Language Sites
When you launch a site in multiple languages, search engines face a problem: which version should they show to users? Meta tags solve this by telling Google, Bing, and other crawlers exactly which language each page targets.
There are three critical meta tags and attributes for multi-language SEO:
1. The lang attribute — Tells browsers and search engines the natural language of the page content. This goes in the opening <html> tag.
2. The hreflang link element — Signals relationships between language versions of the same page. This prevents duplicate content penalties and tells Google which version to show to users in different regions.
3. The Content-Language meta tag — An older tag that specifies the intended audience's language. It's less critical now but still useful as a backup signal.
According to official Google documentation on managing multi-regional and multilingual sites, the lang attribute and hreflang tags are the primary signals Google uses to understand your site's language structure. Implementing them correctly prevents duplicate content issues, improves crawl efficiency, and ensures the right version appears in the right search results.
The brutal truth: most founders skip this step entirely. They launch in three languages and wonder why Google indexes all versions as duplicates, tanks their rankings, and wastes crawl budget. The fix takes 30 minutes and compounds your visibility across every language market.
Step 1: Implement the Lang Attribute on Every Page
The lang attribute is the foundation. It goes in your HTML's opening tag and tells search engines the primary language of that page.
Setting the Lang Attribute
Add the lang attribute to your opening <html> tag with the ISO 639-1 language code:
<html lang="en">
<head>
<!-- rest of your head -->
</head>
<body>
<!-- content -->
</body>
</html>
For pages targeting a specific region, use the format language-region. Use ISO 3166-1 alpha-2 region codes:
<html lang="en-US">
<!-- English for United States -->
</html>
<html lang="en-GB">
<!-- English for United Kingdom -->
</html>
<html lang="es-MX">
<!-- Spanish for Mexico -->
</html>
<html lang="zh-CN">
<!-- Simplified Chinese for China -->
</html>
Every page on your site must have a lang attribute. No exceptions. This is the signal that tells Google what language the content is written in, and it's the first thing crawlers check.
Common Language Codes
Here are the codes you'll use most often:
en— English (generic)en-US— English (United States)en-GB— English (United Kingdom)es— Spanish (generic)es-ES— Spanish (Spain)es-MX— Spanish (Mexico)fr— French (generic)fr-CA— French (Canada)de— Germanit— Italianpt-BR— Portuguese (Brazil)pt-PT— Portuguese (Portugal)ja— Japanesezh-CN— Simplified Chinesezh-TW— Traditional Chineseru— Russianar— Arabichi— Hindi
If you're unsure which code to use, check ISO 639-1 language codes and ISO 3166-1 alpha-2 region codes.
Pro Tip: Validate Your Lang Attributes
Once you've added the lang attribute, validate it. Open any page in your browser, right-click, select "View Page Source," and search for <html lang=. Confirm the code matches the page's content language. If you have 50+ pages, use a crawler tool like Screaming Frog to check all pages at once.
Step 2: Implement Hreflang Tags to Link Language Versions
The hreflang tag is where the real magic happens. It tells Google which pages are translations of each other and which version to show to users in different regions.
Without hreflang, Google treats each language version as a separate page. You get duplicate content issues, diluted link equity, and wasted crawl budget.
How Hreflang Works
Each page needs a set of hreflang links that point to all language versions of that page, including itself. The tag goes in the <head> section:
<link rel="alternate" hreflang="en" href="https://example.com/about" />
<link rel="alternate" hreflang="es" href="https://example.com/es/about" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/about" />
<link rel="alternate" hreflang="x-default" href="https://example.com/about" />
Break this down:
rel="alternate"— Tells search engines this is an alternate versionhreflang="en"— The language code for this versionhref="https://example.com/about"— The full, absolute URL of that language versionhreflang="x-default"— The fallback version for users whose language isn't specified
Critical Rules for Hreflang Implementation
Rule 1: Every language version must link to every other version. If you have English, Spanish, and French versions of a page, the English page must list all three hreflang tags (including itself). The Spanish page must also list all three. This is bidirectional.
Rule 2: Use absolute URLs, not relative URLs. Always include the full domain: https://example.com/about, not /about.
Rule 3: Include a self-referential hreflang tag. The English version must include <link rel="alternate" hreflang="en" href="https://example.com/about" />. This tells Google the page is also available in English.
Rule 4: Use hreflang="x-default" for your fallback version. This is typically your English version or the version shown to users in regions you don't specifically target. Only use one x-default tag per page.
Example: Complete Hreflang Implementation
Let's say you have an "About Us" page in English (US), Spanish (Mexico), and French (Canada). Your URL structure uses subfolders:
- English:
https://example.com/about - Spanish:
https://example.com/es/about - French:
https://example.com/fr/about
On the English version (https://example.com/about), add these tags to the <head>:
<link rel="alternate" hreflang="en-US" href="https://example.com/about" />
<link rel="alternate" hreflang="es-MX" href="https://example.com/es/about" />
<link rel="alternate" hreflang="fr-CA" href="https://example.com/fr/about" />
<link rel="alternate" hreflang="x-default" href="https://example.com/about" />
On the Spanish version (https://example.com/es/about), add:
<link rel="alternate" hreflang="en-US" href="https://example.com/about" />
<link rel="alternate" hreflang="es-MX" href="https://example.com/es/about" />
<link rel="alternate" hreflang="fr-CA" href="https://example.com/fr/about" />
<link rel="alternate" hreflang="x-default" href="https://example.com/about" />
On the French version (https://example.com/fr/about), add:
<link rel="alternate" hreflang="en-US" href="https://example.com/about" />
<link rel="alternate" hreflang="es-MX" href="https://example.com/es/about" />
<link rel="alternate" hreflang="fr-CA" href="https://example.com/fr/about" />
<link rel="alternate" hreflang="x-default" href="https://example.com/about" />
Notice: all three pages have identical hreflang sets. This is correct. Each page tells Google about all versions of itself.
Alternative: Hreflang in Your Sitemap
If you have hundreds of pages, adding hreflang to every HTML file is tedious. You can specify hreflang in your XML sitemap instead.
Create a sitemap that includes all language versions with hreflang attributes:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.com/about</loc>
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/about" />
<xhtml:link rel="alternate" hreflang="es-MX" href="https://example.com/es/about" />
<xhtml:link rel="alternate" hreflang="fr-CA" href="https://example.com/fr/about" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/about" />
</url>
<url>
<loc>https://example.com/es/about</loc>
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/about" />
<xhtml:link rel="alternate" hreflang="es-MX" href="https://example.com/es/about" />
<xhtml:link rel="alternate" hreflang="fr-CA" href="https://example.com/fr/about" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/about" />
</url>
<url>
<loc>https://example.com/fr/about</loc>
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/about" />
<xhtml:link rel="alternate" hreflang="es-MX" href="https://example.com/es/about" />
<xhtml:link rel="alternate" hreflang="fr-CA" href="https://example.com/fr/about" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/about" />
</url>
</urlset>
Submit this sitemap to Google Search Console. Google will read the hreflang attributes from the sitemap instead of requiring them in every page's HTML.
For a step-by-step guide on generating sitemaps for any stack, read our sitemap generation guide.
Pro Tip: Validate Hreflang Implementation
After implementing hreflang, validate it using Google Search Console:
- Go to Settings > International Targeting in Google Search Console
- Check the "Hreflang" section
- Google will report any errors, such as missing reciprocal links or incorrect language codes
If you see errors, fix them immediately. Broken hreflang tags are worse than no hreflang tags — they confuse Google and hurt your rankings.
Step 3: Add the Content-Language Meta Tag (Recommended)
The Content-Language meta tag is older and less critical than lang and hreflang, but it still serves as a backup signal. It goes in the <head> section:
<meta http-equiv="Content-Language" content="en-US" />
For pages targeting a specific language and region, use the format language-region:
<meta http-equiv="Content-Language" content="es-MX" />
According to practical guidance on writing language metatags for websites, the Content-Language meta tag tells browsers and search engines the natural language of the page. While lang is now the primary signal, Content-Language provides redundancy.
When to Use Content-Language
- Always add it if you're targeting a specific region (e.g.,
en-USfor US English,es-MXfor Mexican Spanish) - Use generic language codes only if you're serving the same content to multiple regions (e.g.,
enfor all English-speaking regions) - Don't mix — if you use
lang="en-US", useContent-Language: en-USas well
Common Pitfall: Multiple Content-Language Tags
Don't add multiple Content-Language meta tags to a single page. Search engines will ignore the tag if there are duplicates. One tag per page, always.
Step 4: Optimize Meta Titles and Descriptions for Each Language
Meta titles and descriptions are the text users see in search results. For multi-language sites, you must translate them — not machine-translate, but human-translated by native speakers.
Meta Title Best Practices
Your meta title should:
- Be unique for each language version — not a direct translation, but optimized for that language's search behavior
- Include the target keyword in that language
- Be 50-60 characters to avoid truncation in search results
- Lead with the brand name or the most important keyword
Example:
English (en-US):
<title>Best Project Management Software for Teams | Acme</title>
Spanish (es-MX):
<title>Software de Gestión de Proyectos para Equipos | Acme</title>
French (fr-CA):
<title>Logiciel de Gestion de Projets pour Équipes | Acme</title>
Notice: each title is translated and optimized for that language's search behavior. Spanish speakers search differently than English speakers; French speakers have different intent patterns than both.
Meta Description Best Practices
Meta descriptions:
- Should be 150-160 characters for optimal display
- Must be unique for each language — again, optimized, not machine-translated
- Should include a call-to-action ("Learn more," "Get started," "Try free")
- Should match the page's content — don't mislead
Example:
English:
<meta name="description" content="Manage projects, tasks, and teams in one place. Free trial, no credit card. Start organizing today." />
Spanish:
<meta name="description" content="Gestiona proyectos, tareas y equipos en un solo lugar. Prueba gratis, sin tarjeta de crédito. Comienza hoy." />
French:
<meta name="description" content="Gérez les projets, les tâches et les équipes en un seul endroit. Essai gratuit, sans carte de crédit. Commencez maintenant." />
If you're scaling a multi-language site and need to generate meta descriptions in bulk, read this guide on scaling SEO for multi-language websites with AI meta descriptions. It covers how to use AI tools to generate descriptions at scale while maintaining quality.
Step 5: Handle Canonical Tags for Language Versions
Canonical tags tell search engines which version of a page is the "primary" version. For multi-language sites, you must use self-referential canonical tags on each version.
Self-Referential Canonical Tags
On your English page, point to itself:
<link rel="canonical" href="https://example.com/about" />
On your Spanish page, point to itself:
<link rel="canonical" href="https://example.com/es/about" />
On your French page, point to itself:
<link rel="canonical" href="https://example.com/fr/about" />
This tells Google: "Each of these pages is the canonical version of itself." Combined with hreflang, this prevents duplicate content issues.
When NOT to Use Canonical Tags
Do not point all language versions to a single canonical URL. This is a common mistake:
<!-- DON'T DO THIS -->
<link rel="canonical" href="https://example.com/about" />
<!-- on the Spanish page -->
If you point the Spanish page's canonical to the English version, Google will ignore the Spanish page entirely. You lose rankings in Spanish search results.
For more on canonical tags and how they interact with other SEO signals, read our guide on WWW vs. non-WWW and enforcing canonical domains. The principles apply to language versions as well.
Step 6: Structure URLs for Language Versions
Your URL structure signals language to Google. There are three main approaches:
Approach 1: Subfolders (Recommended)
https://example.com/about (English)
https://example.com/es/about (Spanish)
https://example.com/fr/about (French)
Pros: Easy to implement, keeps all content under one domain, simplest for analytics.
Cons: Slightly more complex URL structure.
SEO impact: Neutral to positive. All language versions benefit from the main domain's authority.
Approach 2: Subdomains
https://en.example.com/about (English)
https://es.example.com/about (Spanish)
https://fr.example.com/about (French)
Pros: Clean URLs, clear separation of languages.
Cons: Subdomains are treated as separate sites by Google. Link equity doesn't flow between them as easily.
SEO impact: Negative. Subdomains dilute domain authority. Avoid this unless you have a specific reason.
Approach 3: Country Code Top-Level Domains (ccTLDs)
https://example.com/about (English, US)
https://example.es/about (Spanish, Spain)
https://example.fr/about (French, France)
Pros: Strong regional signal. Each domain can rank independently in its region.
Cons: Expensive (multiple domains), complex to manage, no shared authority.
SEO impact: Positive for regional rankings, but requires significant investment.
Recommendation: Use subfolders. They're the easiest to implement and maintain, and they keep all your link equity in one domain.
Once you've chosen your URL structure, set up a sitemap for your entire site and submit it to Google Search Console.
Step 7: Avoid Common Multi-Language SEO Mistakes
According to best practices for multi-language SEO, most founders make the same mistakes. Here's how to avoid them:
Mistake 1: Automatic Redirects Based on Browser Language
Don't automatically redirect users to their language version. If a user in Mexico visits your English site, don't force them to the Spanish version. Let them choose.
Why? Because:
- Users might prefer English
- Bots (including Google's crawlers) get redirected inconsistently
- It confuses analytics
Instead, show a banner: "Available in Spanish" with a link.
Mistake 2: Machine Translation Without Review
Never publish machine-translated content without human review. Google can detect low-quality translations, and they hurt your rankings.
Hire native speakers to review translations. It costs more upfront but pays off in rankings and user trust.
Mistake 3: Forgetting to Translate Meta Tags
Meta titles and descriptions must be translated too, not left in English. Search engines read these, and users see them in results. Untranslated meta tags signal low effort and hurt click-through rates.
Mistake 4: Inconsistent Hreflang Implementation
If you implement hreflang on 50 pages but forget 10, Google gets confused. Implement it everywhere or nowhere. Half-measures don't work.
Mistake 5: Using Generic Language Codes When You Target Regions
If you serve Spanish to Mexico, use es-MX, not es. If you serve English to the US, use en-US, not en. Generic codes tell Google you don't have a specific regional preference, which can hurt local rankings.
Mistake 6: Not Testing Indexing Across Languages
After implementing meta tags, check Google Search Console to confirm all language versions are indexed. Go to Coverage and filter by language. You should see all versions listed.
If any version is missing, fix it immediately. Common causes:
- Broken hreflang links (pointing to non-existent URLs)
- Noindex tags on language versions (remove them)
- Robots.txt blocking language folders (check and fix)
For guidance on noindex vs. robots.txt and when to use each, read our decision tree.
Step 8: Monitor and Maintain Multi-Language Meta Tags
Implementing meta tags is not a one-time task. You must monitor them continuously.
Weekly Checks
- Search Console: Check for hreflang errors in International Targeting
- Crawl reports: Use Screaming Frog to verify all pages have correct
langattributes - Indexing: Confirm all language versions appear in Google's index
Monthly Checks
- Search rankings: Track keyword rankings across languages
- Click-through rates: Check if CTR is consistent across language versions (if not, meta descriptions may need tweaking)
- Crawl budget: Ensure Google isn't wasting crawl budget on duplicate or low-value pages
Quarterly Reviews
- Content updates: When you update a page, ensure all language versions are updated and meta tags are refreshed
- New pages: Every new page must have correct
lang,hreflang, andContent-Languagetags before publishing - Competitive analysis: Check how competitors structure their multi-language sites
For a comprehensive view of your site's health, link Google Analytics 4 with Google Search Console. This gives you search query data, impressions, and click-through rates by language, all in one dashboard.
Step 9: Implement Open Graph Tags for Language Versions
When your pages are shared on social media or previewed by AI search engines, Open Graph tags control what appears. For multi-language sites, you must translate these as well.
Open Graph tags include:
og:title— The title shown in social previewsog:description— The description shown in previewsog:image— The image shown in previewsog:locale— The locale (language and region) of the pageog:locale:alternate— Alternate locales (for language versions)
Example:
English page:
<meta property="og:title" content="Best Project Management Software for Teams" />
<meta property="og:description" content="Manage projects, tasks, and teams in one place." />
<meta property="og:image" content="https://example.com/og-image-en.jpg" />
<meta property="og:locale" content="en_US" />
<meta property="og:locale:alternate" content="es_MX" />
<meta property="og:locale:alternate" content="fr_CA" />
Spanish page:
<meta property="og:title" content="Software de Gestión de Proyectos para Equipos" />
<meta property="og:description" content="Gestiona proyectos, tareas y equipos en un solo lugar." />
<meta property="og:image" content="https://example.com/og-image-es.jpg" />
<meta property="og:locale" content="es_MX" />
<meta property="og:locale:alternate" content="en_US" />
<meta property="og:locale:alternate" content="fr_CA" />
Notice the og:locale format: language_REGION with an underscore, not a hyphen. This is different from lang attributes.
For a detailed walkthrough on setting up Open Graph tags, read our guide on Open Graph tags for AI search. It covers how to optimize these tags for both social sharing and AI search engines like ChatGPT and Perplexity.
Step 10: Validate Everything with Google Tools
Before you call your multi-language implementation complete, validate it using Google's tools.
Google Search Console: International Targeting
- Go to Settings > International Targeting in Google Search Console
- Check the Hreflang section
- Google will report:
- Any pages with hreflang errors
- Missing reciprocal links
- Incorrect language codes
- Fix any errors immediately
Google Search Console: Coverage
- Go to Coverage in Google Search Console
- Filter by language using the "Language" filter
- Confirm all language versions are indexed
- If any are missing, check for noindex tags, robots.txt blocks, or broken hreflang links
Google Rich Results Test
- Go to Google's Rich Results Test
- Enter the URL of each language version
- Check for any structured data errors
- If you've added schema markup (like Organization schema), verify it's valid
For a step-by-step guide on setting up schema markup and validating it, read our guide on schema markup with Google's Rich Results Test.
Troubleshooting Common Issues
Issue 1: Hreflang Errors in Google Search Console
Symptom: Google Search Console reports hreflang errors like "Hreflang link points to page without reciprocal link."
Cause: You've added hreflang to some pages but not all, or the links are broken.
Fix:
- Identify the page with the error
- Check all its hreflang tags
- Verify each URL exists and is accessible
- Ensure every language version links back to the original page
- Re-submit the sitemap to Google Search Console
Issue 2: Language Versions Not Indexed
Symptom: Only your English version appears in Google's index. Spanish and French versions are missing.
Cause: Likely noindex tags, robots.txt blocks, or broken hreflang links.
Fix:
- Check the page source of the missing version for
<meta name="robots" content="noindex" /> - If present, remove it
- Check robots.txt for blocks on
/es/or/fr/folders - If present, remove them
- Verify hreflang links point to valid, accessible URLs
- Request indexing in Google Search Console
Issue 3: Duplicate Content Warnings
Symptom: Google treats all language versions as duplicates of the English version.
Cause: Missing or broken hreflang tags, or canonical tags pointing all versions to one URL.
Fix:
- Verify hreflang tags are present on all pages
- Verify each language version has a self-referential canonical tag
- Verify no canonical tags point to a different language version
- Wait 2-4 weeks for Google to re-crawl and update its index
Issue 4: Wrong Language Version Appearing in Search Results
Symptom: Users in Mexico search in Spanish but see your English results.
Cause: Incorrect language codes or missing regional targeting.
Fix:
- Verify you're using regional language codes (e.g.,
es-MX, notes) - Verify
hreflangtags use the same regional codes - Check that the Spanish version's content is actually in Spanish (not English)
- Wait for Google to re-crawl (1-2 weeks)
Key Takeaways and Action Plan
Multi-language SEO is not complicated, but it requires precision. Here's what you need to do:
Immediate Actions (This Week)
- Add
langattributes to every page's opening<html>tag - Add hreflang tags to all language versions (or add them to your sitemap)
- Add
Content-Languagemeta tags to specify regional targeting - Translate meta titles and descriptions — not machine-translated, but optimized for each language
- Use self-referential canonical tags on each language version
Short-Term Actions (This Month)
- Validate in Google Search Console — check for hreflang errors and missing indexed pages
- Test crawling with Screaming Frog to verify all pages have correct
langattributes - Translate Open Graph tags for social sharing and AI search engines
- Monitor indexing — confirm all language versions appear in Google's index
Ongoing Actions (Ongoing)
- Check Google Search Console monthly for hreflang errors and coverage issues
- Update all language versions when you publish new content
- Monitor rankings across languages to spot issues early
- Test user experience — ensure language switchers work and users can navigate between versions
Why This Matters for Founders
You shipped your product. Now you need visibility. If you're launching in multiple markets, meta tags for multi-language sites are non-negotiable.
Without them, you waste crawl budget, dilute link equity, and confuse search engines. With them, you rank in every language market, you avoid duplicate content penalties, and you get users who actually speak your language.
The implementation takes 2-4 hours for a small site, maybe a day for a larger one. The ROI compounds. Every month you delay costs you visibility in languages you could already be dominating.
If you're running a bootstrapped operation and need a comprehensive SEO audit, keyword roadmap, and 100 AI-generated blog posts in one shot, check out Seoable. It's built for founders who ship and need results fast. One-time $99 fee, no monthly recurring costs.
But whether you use Seoable or handle SEO yourself, implement these meta tags today. Your future international rankings depend on it.
Get the next one on Sunday.
One short email a week. What is working in SEO right now. Unsubscribe in one click.
Subscribe on Substack →