seo-hreflang
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseHreflang & International SEO
Hreflang与国际SEO
Validate existing hreflang implementations or generate correct hreflang tags
for multi-language and multi-region sites. Supports HTML, HTTP header, and
XML sitemap implementations.
验证现有hreflang实现或为多语言、多地区网站生成正确的hreflang标签。支持HTML、HTTP标头及XML站点地图三种实现方式。
Validation Checks
验证检查
1. Self-Referencing Tags
1. 自引用标签
- Every page must include an hreflang tag pointing to itself
- The self-referencing URL must exactly match the page's canonical URL
- Missing self-referencing tags cause Google to ignore the entire hreflang set
- 每个页面必须包含指向自身的hreflang标签
- 自引用URL必须与页面的规范URL完全匹配
- 缺少自引用标签会导致Google忽略整个hreflang标签组
2. Return Tags
2. 反向引用标签
- If page A links to page B with hreflang, page B must link back to page A
- Every hreflang relationship must be bidirectional (A→B and B→A)
- Missing return tags invalidate the hreflang signal for both pages
- Check all language versions reference each other (full mesh)
- 如果页面A通过hreflang链接到页面B,页面B必须反向链接到页面A
- 所有hreflang关联必须是双向的(A→B且B→A)
- 缺少反向引用标签会使两个页面的hreflang信号失效
- 检查所有语言版本是否互相引用(形成完整网状结构)
3. x-default Tag
3. x-default标签
- Required: designates the fallback page for unmatched languages/regions
- Typically points to the language selector page or English version
- Only one x-default per set of alternates
- Must also have return tags from all other language versions
- 必填:指定不匹配语言/地区时的备用页面
- 通常指向语言选择器页面或英文版本
- 每组替代页面只能有一个x-default标签
- 所有其他语言版本必须包含指向x-default页面的反向引用标签
4. Language Code Validation
4. 语言代码验证
- Must use ISO 639-1 two-letter codes (e.g., ,
en,fr,de)ja - Common errors:
- instead of
eng(ISO 639-2, not valid for hreflang)en - instead of
jp(incorrect code for Japanese)ja - without region qualifier (ambiguous — use
zhorzh-Hans)zh-Hant
- 必须使用ISO 639-1双字母代码(例如:、
en、fr、de)ja - 常见错误:
- 使用而非
eng(ISO 639-2代码,不适用于hreflang)en - 使用而非
jp(日语的错误代码)ja - 使用但未添加地区限定符(存在歧义——应使用
zh或zh-Hans)zh-Hant
- 使用
5. Region Code Validation
5. 地区代码验证
- Optional region qualifier uses ISO 3166-1 Alpha-2 (e.g., ,
en-US,en-GB)pt-BR - Format: (lowercase language, uppercase region)
language-REGION - Common errors:
- instead of
en-uk(UK is not a valid ISO 3166-1 code)en-GB - (Latin America is not a country — use specific countries)
es-LA - Region without language prefix
- 可选的地区限定符使用ISO 3166-1 Alpha-2代码(例如:、
en-US、en-GB)pt-BR - 格式:(语言小写,地区大写)
language-REGION - 常见错误:
- 使用而非
en-uk(UK不是有效的ISO 3166-1代码)en-GB - 使用(拉丁美洲不是国家——应使用具体国家代码)
es-LA - 仅使用地区限定符而未添加语言前缀
- 使用
6. Canonical URL Alignment
6. 规范URL对齐
- Hreflang tags must only appear on canonical URLs
- If a page has pointing elsewhere, hreflang on that page is ignored
rel=canonical - The canonical URL and hreflang URL must match exactly (including trailing slashes)
- Non-canonical pages should not be in any hreflang set
- hreflang标签只能出现在规范URL页面上
- 如果页面的指向其他页面,该页面上的hreflang标签会被忽略
rel=canonical - 规范URL与hreflang URL必须完全匹配(包括尾部斜杠)
- 非规范页面不应加入任何hreflang标签组
7. Protocol Consistency
7. 协议一致性
- All URLs in an hreflang set must use the same protocol (HTTPS or HTTP)
- Mixed HTTP/HTTPS in hreflang sets causes validation failures
- After HTTPS migration, update all hreflang tags to HTTPS
- 同一hreflang标签组中的所有URL必须使用相同协议(HTTPS或HTTP)
- 标签组中混合HTTP/HTTPS会导致验证失败
- 迁移到HTTPS后,需更新所有hreflang标签为HTTPS协议
8. Cross-Domain Support
8. 跨域支持
- Hreflang works across different domains (e.g., example.com and example.de)
- Cross-domain hreflang requires return tags on both domains
- Verify both domains are verified in Google Search Console
- Sitemap-based implementation recommended for cross-domain setups
- hreflang支持跨不同域名使用(例如example.com和example.de)
- 跨域hreflang要求两个域名都包含反向引用标签
- 需验证两个域名均已在Google搜索控制台中验证
- 跨域场景推荐使用站点地图方式实现
Common Mistakes
常见错误
| Issue | Severity | Fix |
|---|---|---|
| Missing self-referencing tag | Critical | Add hreflang pointing to same page URL |
| Missing return tags (A→B but no B→A) | Critical | Add matching return tags on all alternates |
| Missing x-default | High | Add x-default pointing to fallback/selector page |
Invalid language code (e.g., | High | Use ISO 639-1 two-letter codes |
Invalid region code (e.g., | High | Use ISO 3166-1 Alpha-2 codes |
| Hreflang on non-canonical URL | High | Move hreflang to canonical URL only |
| HTTP/HTTPS mismatch in URLs | Medium | Standardize all URLs to HTTPS |
| Trailing slash inconsistency | Medium | Match canonical URL format exactly |
| Hreflang in both HTML and sitemap | Low | Choose one method — sitemap preferred for large sites |
| Language without region when needed | Low | Add region qualifier for geo-targeted content |
| 问题 | 严重程度 | 修复方案 |
|---|---|---|
| 缺少自引用标签 | 关键 | 添加指向当前页面URL的hreflang标签 |
| 缺少反向引用标签(A→B但无B→A) | 关键 | 在所有替代页面上添加匹配的反向引用标签 |
| 缺少x-default标签 | 高 | 添加指向备用/选择器页面的x-default标签 |
无效语言代码(例如 | 高 | 使用ISO 639-1双字母代码 |
无效地区代码(例如 | 高 | 使用ISO 3166-1 Alpha-2代码 |
| 在非规范URL上添加hreflang标签 | 高 | 仅在规范URL页面上添加hreflang标签 |
| URL中HTTP/HTTPS不匹配 | 中 | 将所有URL统一为HTTPS协议 |
| 尾部斜杠不一致 | 中 | 与规范URL格式完全匹配 |
| 同时在HTML和站点地图中添加hreflang | 低 | 选择一种实现方式——大型网站推荐使用站点地图 |
| 需要地区限定符但未添加 | 低 | 为地理定位内容添加地区限定符 |
Implementation Methods
实现方法
Method 1: HTML Link Tags
方法1:HTML链接标签
Best for: Sites with <50 language/region variants per page.
html
<link rel="alternate" hreflang="en-US" href="https://example.com/page" />
<link rel="alternate" hreflang="en-GB" href="https://example.co.uk/page" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
<link rel="alternate" hreflang="x-default" href="https://example.com/page" />Place in section. Every page must include all alternates including itself.
<head>适用场景:每个页面的语言/地区变体少于50个的网站。
html
<link rel="alternate" hreflang="en-US" href="https://example.com/page" />
<link rel="alternate" hreflang="en-GB" href="https://example.co.uk/page" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
<link rel="alternate" hreflang="x-default" href="https://example.com/page" />放置在部分。每个页面必须包含所有替代页面的标签,包括自身。
<head>Method 2: HTTP Headers
方法2:HTTP标头
Best for: Non-HTML files (PDFs, documents).
Link: <https://example.com/page>; rel="alternate"; hreflang="en-US",
<https://example.com/fr/page>; rel="alternate"; hreflang="fr",
<https://example.com/page>; rel="alternate"; hreflang="x-default"Set via server configuration or CDN rules.
适用场景:非HTML文件(PDF、文档等)。
Link: <https://example.com/page>; rel="alternate"; hreflang="en-US",
<https://example.com/fr/page>; rel="alternate"; hreflang="fr",
<https://example.com/page>; rel="alternate"; hreflang="x-default"通过服务器配置或CDN规则设置。
Method 3: XML Sitemap (Recommended for large sites)
方法3:XML站点地图(推荐大型网站使用)
Best for: Sites with many language variants, cross-domain setups, or 50+ pages.
See Hreflang Sitemap Generation section below.
适用场景:包含大量语言变体、跨域设置或页面数量超过50个的网站。
请参阅下方的Hreflang站点地图生成部分。
Method Comparison
方法对比
| Method | Best For | Pros | Cons |
|---|---|---|---|
| HTML link tags | Small sites (<50 variants) | Easy to implement, visible in source | Bloats |
| HTTP headers | Non-HTML files | Works for PDFs, images | Complex server config, not visible in HTML |
| XML sitemap | Large sites, cross-domain | Scalable, centralized management | Not visible on page, requires sitemap maintenance |
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| HTML链接标签 | 小型网站(变体少于50个) | 易于实现,在源码中可见 | 会使 |
| HTTP标头 | 非HTML文件 | 适用于PDF、图片等 | 服务器配置复杂,在HTML中不可见 |
| XML站点地图 | 大型网站、跨域场景 | 可扩展,集中管理 | 页面上不可见,需要维护站点地图 |
Hreflang Generation
Hreflang生成流程
Process
步骤
- Detect languages: Scan site for language indicators (URL path, subdomain, TLD, HTML lang attribute)
- Map page equivalents: Match corresponding pages across languages/regions
- Validate language codes: Verify all codes against ISO 639-1 and ISO 3166-1
- Generate tags: Create hreflang tags for each page including self-referencing
- Verify return tags: Confirm all relationships are bidirectional
- Add x-default: Set fallback for each page set
- Output: Generate implementation code (HTML, HTTP headers, or sitemap XML)
- 检测语言:扫描网站的语言标识(URL路径、子域名、顶级域名、HTML lang属性)
- 映射对应页面:匹配不同语言/地区的对应页面
- 验证语言代码:验证所有代码是否符合ISO 639-1和ISO 3166-1标准
- 生成标签:为每个页面创建包含自引用的hreflang标签
- 验证反向引用:确认所有关联都是双向的
- 添加x-default:为每组页面设置备用标签
- 输出:生成实现代码(HTML、HTTP标头或站点地图XML)
Hreflang Sitemap Generation
Hreflang站点地图生成
Sitemap with Hreflang
包含Hreflang的站点地图
xml
<?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/page</loc>
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" />
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
<xhtml:link rel="alternate" hreflang="de" href="https://example.de/page" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" />
</url>
<url>
<loc>https://example.com/fr/page</loc>
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" />
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
<xhtml:link rel="alternate" hreflang="de" href="https://example.de/page" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" />
</url>
</urlset>Key rules:
- Include the namespace declaration
xmlns:xhtml - Every entry must include ALL language alternates (including itself)
<url> - Each alternate must appear as a separate entry with its own full set
<url> - Split at 50,000 URLs per sitemap file
xml
<?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/page</loc>
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" />
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
<xhtml:link rel="alternate" hreflang="de" href="https://example.de/page" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" />
</url>
<url>
<loc>https://example.com/fr/page</loc>
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" />
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
<xhtml:link rel="alternate" hreflang="de" href="https://example.de/page" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" />
</url>
</urlset>关键规则:
- 必须包含命名空间声明
xmlns:xhtml - 每个条目必须包含所有语言变体(包括自身)
<url> - 每个变体必须作为单独的条目存在,并包含完整的标签组
<url> - 每个站点地图文件最多包含50,000个URL,超出需拆分
Output
输出内容
Hreflang Validation Report
Hreflang验证报告
Summary
摘要
- Total pages scanned: XX
- Language variants detected: XX
- Issues found: XX (Critical: X, High: X, Medium: X, Low: X)
- 扫描页面总数:XX
- 检测到的语言变体数量:XX
- 发现的问题数量:XX(关键:X,高:X,中:X,低:X)
Validation Results
验证结果
| Language | URL | Self-Ref | Return Tags | x-default | Status |
|---|---|---|---|---|---|
| en-US | https://... | ✅ | ✅ | ✅ | ✅ |
| fr | https://... | ❌ | ⚠️ | ✅ | ❌ |
| de | https://... | ✅ | ❌ | ✅ | ❌ |
| 语言 | URL | 自引用 | 反向引用标签 | x-default | 状态 |
|---|---|---|---|---|---|
| en-US | https://... | ✅ | ✅ | ✅ | ✅ |
| fr | https://... | ❌ | ⚠️ | ✅ | ❌ |
| de | https://... | ✅ | ❌ | ✅ | ❌ |
Generated Hreflang Tags
生成的Hreflang标签
- HTML tags (if HTML method chosen)
<link> - HTTP header values (if header method chosen)
- (if sitemap method chosen)
hreflang-sitemap.xml
- HTML 标签(若选择HTML方法)
<link> - HTTP标头值(若选择标头方法)
- (若选择站点地图方法)
hreflang-sitemap.xml
Recommendations
建议
- Missing implementations to add
- Incorrect codes to fix
- Method migration suggestions (e.g., HTML → sitemap for scale)
- 需要添加的缺失实现
- 需要修复的错误代码
- 方法迁移建议(例如:从HTML迁移到站点地图以支持大规模场景)