Translating pages is easy. Ranking them across languages and regions—without cannibalization, duplicates, or knowledge-graph confusion—is the hard part. Modern multilingual SEO is no longer just “copy + hreflang.” It’s entity-first architecture, rigorous content parity, and clean language/region signals that let crawlers understand what each page is about, for whom, and how it relates to its siblings.
Below is a practical playbook you can ship with engineering and content teams—works for SaaS, media, and ecommerce.
1) Think in entities, not just keywords
Keywords vary by language; entities travel. When your French page targets logiciel CRM, your Spanish page software CRM, and your English page CRM software, they should all resolve to the same underlying entity in your site knowledge graph.
Why entities win
- Disambiguation: chips (snacks vs. semiconductors) or ga (Google Analytics vs. the state of Georgia) becomes explicit via structured data.
- Robust internal linking: you connect all versions to a canonical concept, not just a string.
- Better E-E-A-T signals: consistent identity across languages via
sameAsand authority sources.
Implementation
- Maintain an Entity Inventory (Airtable/Notion):
- ID (internal)
- Labels by language (primary & common variants)
- Wikidata/DBpedia/official IDs (when applicable)
- URL per locale
- Allowed synonyms (per market)
- In content templates, populate:
Organization,Product,HowTo, orFAQPageschema (by locale).sameAspointing to global profiles (brand) and to language-specific authoritative sources when helpful.
- Use stable slugs by locale (don’t machine-transliterate brand terms if they’re globally recognized entities). If localization demands a different slug, keep the entity ID constant in your CMS and map to each locale URL.
2) Hreflang that crawlers trust
hreflang tells search engines which language/region page serves which user—and how alternates relate. Misconfigured tags are the #1 cause of cross-locale cannibalization.
Rules that prevent pain
- One canonical per cluster. Each language URL must be self-canonical (
rel="canonical"to itself) and list all alternates viahreflang. - Bidirectional. If page A declares B as an alternate, B must declare A.
- Region subtlety. Use language-only (
fr) when content is identical across French-speaking regions; only add region codes (fr-FR,fr-CA) when meaningfully different (currency, legal terms, offers). x-default. Point to a global selector or your language auto-detector page (not your English page unless English truly is your global default).- Sitemaps > HTML for scale. For large sites, maintain a hreflang sitemap with full alternate clusters; it’s cleaner and easier to validate.
Minimal example (head):
<link rel="canonical" href="https://example.com/es/producto/crm" />
<link rel="alternate" hreflang="es" href="https://example.com/es/producto/crm" />
<link rel="alternate" hreflang="en" href="https://example.com/en/product/crm" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/produit/crm" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />
Sitemap snippet:
<url>
<loc>https://example.com/en/product/crm</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/product/crm"/>
<xhtml:link rel="alternate" hreflang="es" href="https://example.com/es/producto/crm"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/produit/crm"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/"/>
</url>
QA checklist
- Exact one-to-one clusters (no orphans).
- All URLs 200-status, indexable (no
noindex, no blocked via robots). - Canonical and hreflang not conflicting (e.g., canonical to
/en/whilehreflangpoints to/es/…).
3) Content parity: equivalent value, not identical words
Google doesn’t require literal translation; it expects equivalent intent and completeness. That’s content parity: every locale page should cover the same core topics, answer comparable questions, and provide similar UX (navigation, schema types), adjusted to local reality.
Define a Parity Spec
- Primary intent parity: Same entity/topic and search intent.
- Section parity: If EN page has Overview → Features → Pricing → FAQ, your DE page should mirror those concepts, even if pricing or examples change.
- Media parity: Comparable images/video (localized screenshots, currency).
- Link parity: Internal links to the same sibling entities in that language.
- Schema parity: Same types/properties where applicable (
FAQPage,Productwithoffers,aggregateRating).
Measure it
- Add a Parity Score (0–100) per page:
- Sections present (40)
- Questions answered (20)
- Structured data parity (20)
- Internal link parity (20)
- Anything <80 triggers editorial fixes.
Local exceptions
- Pricing, legal disclaimers, and proofs may differ. Document exceptions in your Entity Inventory so they don’t look like omissions.
4) URL architecture that scales
Choose a pattern and stick to it:
- Subfolders (
example.com/fr/…): strongest for shared authority and simplest ops. - Subdomains (
fr.example.com): use only if infrastructure/legal requires. - ccTLDs (
example.fr): strongest geo cues, heaviest ops; best for big markets with dedicated teams.
Do not mix patterns (e.g., /fr/ for FR and es.example.com for ES) unless you have a deliberate reason and separate authority plans.
5) Internal linking and navigation
Search engines discover and interpret locale webs through internal links:
- Language switcher must link to the corresponding page, not just the homepage.
- Avoid JS-only locale switching; provide real
<a href="">links crawlable without JS. - Build entity hubs in each language (e.g.,
/fr/centre-de-ressources/ia/) and link all related articles to the hub. - Keep breadcrumb patterns consistent across locales.
6) Schema and knowledge-graph hygiene
- Localize
inLanguage,name,description,headline,offers.priceCurrency,areaServed. - Keep a stable
@idper entity across locales (e.g.,https://example.com/#product-crm) and use it in each locale’s JSON-LD block. - Add
isBasedOnortranslationOfWork(forCreativeWork) when you truly have derivatives; this documents lineage without collapsing pages.
JSON-LD skeleton
{
"@context": "https://schema.org",
"@type": "Product",
"@id": "https://example.com/#product-crm",
"name": "Software CRM",
"inLanguage": "en",
"offers": {
"@type": "Offer",
"priceCurrency": "USD"
},
"brand": {"@type":"Organization","name":"Acme"}
}
Replicate in /es/ with inLanguage: "es", localized name, local currency, same @id.
7) Technical signals that matter
- Canonicalization: Self-canonical per locale; never point canonicals across languages.
- No automatic redirection purely by IP/Accept-Language without a visible choice—can block crawlers.
- Server headers: Correct
Content-Language. - Images/CDN: Localize alt text and file names; serve from the same host structure.
- Pagination & filters: Keep parameter behavior identical per locale; use canonical +
noindex,followfor thin faceted pages consistently.
8) Build the multilingual production pipeline
People & process
- Source of truth: one headless CMS with locale fields, entity IDs, and parity checks.
- Translation brief per page includes: entity goal, user intent, banned literalisms, terms glossary, and local examples to insert.
- QA gates:
- Lint hreflang clusters.
- Validate structured data.
- Score content parity.
- Crawl locale site sections for broken alternates.
Tooling ideas
- Automated hreflang validator (nightly).
- Diff tool that compares EN vs. locale section headings.
- Lighthouse i18n checks (font fallback, RTL support).
- Rank tracking by entity and by locale (avoid only keyword lists).
9) Reporting & KPIs
Track per locale at the cluster level (entity + all alternates):
- Indexed alternate rate (% of pages with all hreflang siblings indexed)
- Cross-locale cannibalization count (query → >1 locale URL ranking in same country results unintentionally)
- Impressions/clicks per locale for the same entity (Search Console → regex on slugs or page IDs)
- Local intent coverage (number of entity FAQs translated & ranking)
- Lead/revenue by locale page (not just sitewide) with consistent UTMs and CRM mapping
10) Common pitfalls (and fast fixes)
- Machine-translated thin pages → Fix: mandate parity spec; local editors add examples/metrics.
- Mismatched canonicals/hreflang → Fix: self-canonical per locale; rebuild clusters in sitemap.
- Region tags without real differences (
en-GB,en-AU) → Fix: collapse toenor introduce genuine localized offers. - Language switcher to home → Fix: map 1:1 alternates programmatically.
- Untranslated schema → Fix: localize JSON-LD fields and currencies; validate in bulk.
Copy-paste checklists
Engineering
- Locale folders consistent; no mixed patterns
- Self-canonical per locale
- Hreflang clusters bidirectional (HTML or sitemap)
x-defaultto language selector- Language switcher links to 1:1 alternates
- Structured data localized; shared
@idper entity
Editorial/SEO
- Parity Spec met (≥80)
- Local examples, metrics, screenshots
- Entity Inventory updated (labels, synonyms, IDs)
- Internal links point to local entity hubs
- Title/description transcreated, not literal
Add comment