← Knowledge Notes
Global Growth / Knowledge note · English

Complete Guide to Internationalization (hreflang/Multilingual/Multi-Regional) + Explicit Content (SafeSearch/Adult)

Distinction between multilingual and multi-regional sites. 3 equivalent hreflang implementation methods (HTML link / HTTP header / Sitemap), choose only one. 6 iron rules of hreflang (every version lists all versions including itself + bidirectional links + absolute URLs + ISO 639-1 + ISO 3166-1 + x-default). 4 URL structure options (ccTLD strongest signal / subdomain / subdirectory / parameter not recommended). Google's signal priority for selecting locale (ccTLD > hreflang > server location > others). Googlebot geo-distributed crawling behavior for locale-adaptive pages. SafeSearch filtering algorithm + EDSA (Educational/Documentary/Scientific/Artistic) exemptions. 5 best practices for explicit content (prevent UGC CSAM / allow fetching of videos / do not block age gates / separate domains / mark meta rating="adult") + 5 common misclassification fixes.

Source collection:Google Search and SEO · Published here:2026-09-26

SEOSearch EnginesOrganic growth

In one sentence: The core of internationalization is telling Google which version is served to users in which region/language(via hreflang), not relying on Google to guess on its own. The core of handling explicit content is correct classification(SafeSearch-friendly markup) rather than hiding it (hiding actually causes misclassification).

TL;DR Decision Table

Your Scenario What to Use
Multilingual site (same content in multiple translated versions) hreflang Mark all hreflang fully + independent URL for each version
Multi-regional site (same language, different regional content) ccTLD preferred / hreflang en-gb en-us for differentiation
Want to concentrate SEO for a specific region ccTLD (.de) or subdirectory /de/
Want to restrict content to display only to a specific region Country restrictions + use x-default
Site has adult content (partial) Separate independent domain/subdomain + meta rating="adult"
Entire site is adult content Mark meta rating + allow Googlebot to bypass age gate
Site misclassified as explicit Go through 5-step troubleshooting + appeal (wait 2–3 months)

Part 1 — Multilingual vs Multi-Regional

Definition
Multilingual Multiple language versions. Example: Canadian company with EN + FR versions
Multi-regional Different regional versions (can be same language). Example: Product manufacturer shipping to USA + Canada
Both at the same time Example: USA version + Canadian version, Canadian version further split into FR + EN

Google behavior:

  • multilingual → matches user's search language
  • multi-regional → matches user's country of residence

Part 2 — 3 hreflang Implementation Methods (Equivalent, Choose One)

⚠️ Core mental model: hreflang does not tell Google what language the page is in (Google does not rely on hreflang or <html lang> to determine language,it looks at the main body content). hreflang tells Google that these URLs are locale variants of the same content, and Google routes users of the corresponding locale to the corresponding URL based on this.

2.1 Method A: HTML <link> tag

Place inside <head> (must be a valid head), example with USA + UK + DE versions + x-default:

<head>
  <title>Widgets, Inc</title>
  <link rel="alternate" hreflang="en-gb" href="https://en-gb.example.com/page.html" />
  <link rel="alternate" hreflang="en-us" href="https://en-us.example.com/page.html" />
  <link rel="alternate" hreflang="en"    href="https://en.example.com/page.html" />
  <link rel="alternate" hreflang="de"    href="https://de.example.com/page.html" />
  <link rel="alternate" hreflang="x-default" href="https://www.example.com/" />
</head>

Key point: Every versioned page must include<head> the same set of hreflang links (including the link to itself). hreflang links (including the one pointing to itself).

Suitable for non-HTML files(PDFs, etc.):

Link: <https://example.com/file.pdf>; rel="alternate"; hreflang="en",
      <https://de-ch.example.com/file.pdf>; rel="alternate"; hreflang="de-ch",
      <https://de.example.com/file.pdf>; rel="alternate"; hreflang="de"

Note: Wrap URLs in < >, separate multiple entries with commas.

2.3 Method C: XML Sitemap

<?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://www.example.com/english/page.html</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.example.com/english/page.html"/>
    <xhtml:link rel="alternate" hreflang="de" href="https://www.example.de/deutsch/page.html"/>
    <xhtml:link rel="alternate" hreflang="de-ch" href="https://www.example.de/schweiz-deutsch/page.html"/>
  </url>
  <url>
    <loc>https://www.example.de/deutsch/page.html</loc>
    <!-- 同样 3 个 xhtml:link 必须再列一遍 -->
  </url>
  <!-- 每个版本都列一次,内部 xhtml:link 完全一致 -->
</urlset>

Advantage: Convenient for large sites to maintain, centralized management.

⚠️ The 3 methods are equivalent,Do not use them simultaneously — there is no benefit, it only increases maintenance cost.


Part 3 — 6 Iron Rules of hreflang ⭐⭐⭐

  1. Every locale version must list all locale versions, including itself — if you omit itself, Google will not fill it in
  2. Must be bidirectional(when A → B, B must also → A) — one-way links will cause Google to ignore the entire annotation
  3. Absolute URLs(including protocol) — https://example.com/foo is not //example.com/foo
  4. Cross-domain allowed(example.com and example.de can hreflang to each other with no problem)
  5. Language code must be ISO 639-1(2 letters)
  6. Region code must be ISO 3166-1 Alpha 2(2 letters), region-only (en-419) is not supported

3.1 Add x-default as fallback

Where do users who do not match any locale go? Use x-default:

<link rel="alternate" href="https://example.com/" hreflang="x-default" />

⚠️ x-default which has no language code — it is the fallback when the user's language does not match. Designed for language selector pages.

3.2 Simplified scenario: Cannot maintain all versions

When launching a new sub-site → initially only bidirectionally link with the primary language(priority). Example: Original .fr main site, newly added .mx and .es → .mx and .es all first bidirectionally link to .fr, add other links later.mx ↔ .es.

3.3 Complete hreflang example (Belgium, 4 languages)

<!-- 比利时德语 -->
<link rel="alternate" hreflang="de-be" href="https://example.com/de-be/" />
<!-- 比利时荷兰语 -->
<link rel="alternate" hreflang="nl-be" href="https://example.com/nl-be/" />
<!-- 比利时法语 -->
<link rel="alternate" hreflang="fr-be" href="https://example.com/fr-be/" />

⚠️ Cannot write only region:hreflang="be" does not mean "Belgium" — be is Belarusian!The first code is always language.

3.4 Chinese script variants

Code Meaning
zh-TW Chinese (Traditional, auto-inferred — because Taiwan uses Traditional)
zh-Hant Chinese (Traditional, explicitly specify script)
zh-Hans Chinese (Simplified)
zh-Hans-US Simplified Chinese, United States users

3.5 ⚠️ Commonly overlooked region codes

  • EU / UN / UK is not recognized in hreflang (ignored by Google)
  • United Kingdom uses gb(ISO 3166-1 Alpha 2), not uk

3.6 Debugging tools


Part 4 — 4 URL Structure Options

Structure Example Pros Cons
ccTLD(country-specific TLD) example.de Clearest strongest signal / independent of server location / easy to separate Expensive / complex infrastructure / some countries have ccTLD eligibility restrictions / can only target a single country
Subdomain + gTLD de.example.com Easy to set up / flexible server location / easy to separate Users may not know whether "de" refers to language or country
Subdirectory + gTLD ⭐ example.com/de/ Easy to set up / easy to maintain under same host Users may not know it is geotargeting / single server / hard to separate
URL parameter site.com?loc=de Not recommended Hard to segment URLs / hard for users to recognize

4.1 Generic vs Country TLD list

Fully gTLD: .com .org .edu .gov etc.

Regional gTLD(treated as generic): .eu / .asia

ccTLDs treated as gTLD(20 total): .ad .ai .as .bz .cc .cd .co .dj .fm .io .la .me .ms .nu .sc .sr .su .tv .tk .ws

→ These ccTLDs will not be geotargeted by default by Google, and require explicit geotargeting (hreflang / Search Console).

4.2 Google's signals for selecting target locale (in descending priority)

  1. ccTLD(.de = strong signal for Germany)
  2. hreflang annotations(HTML / header / sitemap)
  3. Server IP location(this signal is weak when using CDN)
  4. Others: local address / phone number / local currency / links from local sites / Business Profile

4.3 ⚠️ Google Signals that are not used

  • ❌ <html lang="de"> attribute
  • ❌ Language words in URL path (example.com/de/ — this /de/ itself is just a path; Google determines language via hreflang / content)
  • ❌ Subdomain name (en.example.com — the en Google is not automatically determined to be English)
  • ❌ geo.position / distribution and other locational meta tags (completely ignored)

Part 5 — Specific Strategies for Multilingual Sites

✅ example.com/en/page + example.com/de/page ❌ Same URL, serve different content based on Accept-Language modify content

Why: Googlebot usually does not send Accept-Language header, so it cannot see variants.

5.2 Let users switch languages

✅ Add a "Choose language" selector / flags / dropdown ❌ Automatically redirect users to the language you guess they want — this prevents users and Google from viewing other versions

5.3 Googlebot behavior for Locale-Adaptive Pages

If your site returns different content for the same URL based on user IP / Accept-Language (locale-adaptive):

  • Googlebot is now geo-distributed — not only US IPs, but IPs from other countries as well
  • Serve the content intended for users in the country whose IP the Googlebot is coming from
  • Googlebot will not specifically schedule crawls to discover all your locale variants
  • Google It is strongly recommended that you switch to separate URLs + hreflang

⚠️ robots.txt and robots meta must be consistent across all locales.

5.4 Boilerplate translation dominated by a single language

Example: Forum / UGC site where main content is in EN, only navigation / footer translated to DE.

→ Google judges such pages as duplicates(main content unchanged), so in this case hreflang is not mandatory, but adding it can hint a more user-friendly version.

5.5 Use local words / IDN in URLs

✅ example.com/lebensmittel/pfefferminz(German URL) ✅ example.com/ペパーミント(Japanese URL,UTF-8 encoded + percent-encode when linking) ✅ IDN domain names example.中国


Part 6 — Geotargeting for Multi-Regional Sites

6.1 4 geotargeting methods

A. ccTLD(.de .cn .jp) — strongest B. subdirectory /de/ + set country target in Search Console (optional) C. subdomain de.example.com + hreflang D. explicit hreflang annotations(regardless of URL structure)

6.2 ⚠️ Things not to do

  • Do not use IP analysis to auto-adapt content — Google will not change crawler origin
  • Do not automatically redirect US users to the.us version (prevents.com from being discovered)
  • Do not list only ccTLDs in the sitemap — this omits other locales

6.3 What to do about same-language duplicate content

example.de/ and example.com/de/ both have German content:

→ Select one canonical use rel="canonical" + hreflang double buffering to mark the corresponding region.


Part 7 — 5 Best Practices for Explicit Content ⭐

7.1 When this guide applies

  • Your site contains sexually explicit content / nudity
  • Your site contains graphic violence
  • Your site contains sex toys / sexual services, etc.

⚠️ CSAM (child sexual abuse material): Google does not classify it, it directly removes it from the entire web and penalizes the whole site. This is not a SafeSearch issue but a legal one.

7.2 How SafeSearch works

Content types filtered by SafeSearch(when user sets Filter / Blur):

  • Various explicit sexual content / pornography
  • Nudity
  • Realistic sex toys
  • Sexually oriented dating / escort services
  • Violence / blood
  • Pages linking to explicit content

EDSA exemption(Permitted under SafeSearch): Content with educational / documentary / scientific / artistic value.

SafeSearch off / Blur, Google will still :

7.3 5 Best Practice

A. Prevent harmful UGC content

Platform sites (UGC) should implement:

  • publisher verification
  • content moderation processes
  • hash matching(detect known CSAM) + classifier(detect unknown)

⚠️ Allowing UGC uploads of CSAM / non-consensual explicit content → Google demotes the entire site, affecting rankings for all pages.

B. Allow Googlebot to fetch video files

If blocked allow video fetch. Why: Google cannot fetch → cannot perform automatic CSAM detection → the entire page may be demoted / filtered(especially in Video mode).

Worried about exposing videos? Use verify Googlebot reverse IP verification.

C. Allow Googlebot to bypass age gates

verify Googlebot → return content directly to the real Googlebot without showing an age gate.

⚠️ If not allowed → Google cannot see the content → the entire site may be classified as explicit (even if it actually is not), and will disappear completely when SafeSearch is on.

D. Use separate domains / subdomains

✅ ❌
explicit.example.com/... + www.example.com/... to separate Mixing everything together on www.example.com/...

Why: Google's algorithm operates at site level; mixing content together → the entire site is classified as explicit → the main site disappears when SafeSearch is on.

It does not need to actually be named "explicit"; any name works, the key is structural separation.

E. Mark explicit pages with meta rating

<meta name="rating" content="adult">

or equivalent (choose one):

<meta name="rating" content="RTA-5042-1996-1400-1577-RTA">

HTTP response headers may also be used. Mark explicit content in video sitemaps:

<video:family_friendly>no</video:family_friendly>

7.4 ⚠️ Explicit pages do not have access to Search features

  • ❌ rich results
  • ❌ featured snippets
  • ❌ video previews

(regardless of whether SafeSearch is on or off)


Part 8 — Explicit Misclassified Troubleshooting

8.1 5-step troubleshooting

1. 单页测: SafeSearch Off 能搜到 + Filter On 搜不到 = 单页被过滤
2. 全站测: site:example.com + Filter On 搜不到 = 全站被过滤
3. 对照 5 大常见错误修
4. 等 2-3 月让 Google 重判
5. 仍误判 → request review

8.2 The 5 most common misclassification errors

Mistake Fix
Misuse of adult rating meta on non-explicit pages Only use it on truly explicit pages. SafeSearch filters all pages marked with rating="adult" page
<video:family_friendly>no misuse Only use for truly explicit videos
UGC comments with no moderation getting spammed with explicit content Add moderation; use prevent abuse
Age gate blocking Googlebot Skip the age gate after verifying Googlebot
Mixing explicit and non-explicit content on the same domain Use separate domains / subdomains

8.3 What to do if still misclassified

  • After making fixes,wait at least 2–3 months; Google's classifier needs time to reprocess
  • If the site already has a large amount of explicit content, the whole site being classified as explicit is expected behavior
  • Blurred explicit images that can be unblurred → still classified as explicit
  • Explicit pages do not receive rich results / featured snippets / video previews

Part 9 — Anti-pattern collection

# Anti-pattern Consequence
1 Adding hreflang on only one page and not on others One-way, Google ignores the entire set of annotations
2 Using relative paths for hreflang URLs Not recognized
3 Using language codes outside ISO 639-1 Ignored
4 Using EU / UN / UK as a region Ignored
5 Writing only a region code without a language (hreflang="be") be is treated as the Belarusian language, not as Belgium
6 Using all three hreflang methods — HTML + Header + Sitemap — on the same page Increases maintenance cost, no signal benefit
7 Changing language via cookies / Accept-Language without separate URLs Googlebot cannot see variants
8 Automatically redirecting users to a guessed language Hinders discovery of other versions
9 Adapting content using IP analysis Google does not change crawler origin, so it cannot see adapted content
10 Adding meta rating="adult" to non-explicit pages causes SafeSearch filtering
11 Marking all videos as family_friendly=no results in all being filtered
12 Mixing site-wide explicit content on the main domain The entire site is filtered by SafeSearch
13 Age gate blocking Googlebot Google cannot see content, and the site may be classified as explicit
14 Expecting Google to use <html lang> to determine language Google does not look at the lang attribute; it looks at the main body content
15 Expecting Google to use URL paths /de/ to determine locale Paths are only URLs, not locale signals
16 Listing hreflang in a sitemap but omitting the page itself Annotations become invalid
17 hreflang linking to a fragment (#xxx) Not supported
18 Expecting explicit misclassifications to be fixed quickly The classifier requires 2–3 months

Part 10 — Related wiki

Last updated

2026-05-17 — Compiled based on 6 Google Search Central specialty/international + specialty/explicit series documents (latest updates from 2025-12 to 2025-12-22).

Sources and related materials