关于 seo-hreflang
面向 SEO 人员和网站运营者的技能,用于生成或检查多语言、多地区网站的 hreflang。它可检查互惠链接、规范 URL 和语言代码,并支持 HTML、HTTP 标头及 XML 站点地图。
主要功能
- 01检查 hreflang 关系
- 02生成语言替代标签
- 03核对规范 URL
- 04验证语言和地区代码
- 05支持 HTML、标头和站点地图
适用场景
- 01审查网站的地区替代页面
- 02为多域名网站生成站点地图 hreflang
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill seo-hreflang安装后在 Claude Code 中输入/seo-hreflang确认已加载。
详细介绍
Hreflang 与国际 SEO
适用场景
- 验证或生成多语言或多地区网站的 hreflang 时使用。
- 用户提到国际 SEO、语言标签、x-default 或 hreflang 问题时使用。
- 审查 HTML、标头或站点地图实现中的区域设置替代页面时使用。
验证现有的 hreflang 实现,或为多语言和多地区网站生成正确的 hreflang 标签。 支持 HTML、HTTP 标头和 XML 站点地图实现。
验证检查
1. 自引用标签
- 每个页面都必须包含指向自身的 hreflang 标签
- 自引用 URL 必须与页面的规范 URL 完全一致
- 缺少自引用属于实现缺陷;应报告受影响的 URL,而不是断言整个集合始终会被忽略
2. 返回标签
- 如果页面 A 通过 hreflang 链接到页面 B,页面 B 必须链接回页面 A
- 每个 hreflang 关系都必须是双向的(A→B 和 B→A)
- 缺少返回标签会导致两个页面的 hreflang 信号均无效
- 检查所有语言版本是否相互引用(完整网状结构)
3. x-default 标签
- 可选:指定语言或地区不匹配时使用的回退页面
- 通常指向语言选择器页面或英文版本
- 每组替代页面只能有一个 x-default
- 其他所有语言版本也必须包含返回标签
4. 语言代码验证
- 必须使用 ISO 639-1 双字母代码(例如
en、fr、de、ja) - 常见错误:
- 使用
eng而不是en(这是 ISO 639-2 代码,不适用于 hreflang) - 使用
jp而不是ja(日语的代码不正确) zh是有效的通用中文代码;如果页面对应的文字系统有所区别,请使用zh-Hans或zh-Hant
- 使用
5. 地区代码验证
- 可选的地区限定符使用 ISO 3166-1 Alpha-2(例如
en-US、en-GB、pt-BR) - 格式:
language-REGION(语言代码小写,地区代码大写) - 常见错误:
- 使用
en-uk而不是en-GB(UK 不是有效的 ISO 3166-1 代码) - 使用
es-LA(拉丁美洲不是国家;请使用具体国家) - 地区代码前缺少语言代码
- 使用
6. 规范 URL 对齐
- hreflang 标签只能出现在规范 URL 上
- 如果页面的
rel=canonical指向其他位置,该页面上的 hreflang 将被忽略 - 规范 URL 和 hreflang URL 必须完全一致(包括末尾斜杠)
- 非规范页面不应出现在任何 hreflang 集合中
7. 协议一致性
Google 支持完整限定的替代 URL;统一使用 HTTPS 是部署建议,而不是普遍适用的 hreflang 有效性规则。
- hreflang 集合中的所有 URL 必须使用相同协议(HTTPS 或 HTTP)
- 当 HTTP/HTTPS 版本不同时,检查重定向和规范目标
- 迁移至 HTTPS 后,将所有 hreflang 标签更新为 HTTPS
8. 跨域支持
- Hreflang 支持不同域名之间的设置(例如 example.com 和 example.de)
- 跨域 hreflang 要求两个域名上都包含返回标签
- 使用 Search Console 有助于诊断,但不是跨域 hreflang 的前提条件
- 建议跨域设置采用基于站点地图的实现
常见错误
| 问题 | 严重性 | 修复方法 |
|---|---|---|
| 缺少自引用标签 | 严重 | 添加指向同一页面 URL 的 hreflang |
| 缺少返回标签(A→B,但没有 B→A) | 严重 | 为所有备用页面添加匹配的返回标签 |
| 缺少 x-default | 可选改进 | 添加指向备用页/选择器页面的 x-default |
语言代码无效(例如,eng) | 高 | 使用 ISO 639-1 双字母代码 |
地区代码无效(例如,en-uk) | 高 | 使用 ISO 3166-1 Alpha-2 代码 |
| hreflang 指向非规范 URL | 高 | 仅将 hreflang 移至规范 URL |
| URL 中的 HTTP/HTTPS 不一致 | 中 | 将所有 URL 统一为 HTTPS |
| 尾部斜杠不一致 | 中 | 与规范 URL 格式完全一致 |
| HTML 和站点地图中都设置了 hreflang | 维护注意事项 | 两种方式都有效;保持两者集合一致,或只使用一种方式 |
| 需要地区限定时未设置地区 | 低 | 为地理定位内容添加地区限定符 |
实现方式
方式 1:HTML 链接标签
最适合:每个页面有少于 50 个语言/地区变体的网站。
<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> 部分。每个页面都必须包含所有备用页面,包括自身。
方式 2:HTTP 标头
最适合:非 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 规则设置。
方式 3:XML 站点地图(大型网站推荐)
最适合:语言变体较多、跨域设置或页面数达到 50 个以上的网站。
请参阅下文的 Hreflang 站点地图生成部分。
方式比较
| 方式 | 最适合 | 优点 | 缺点 |
|---|---|---|---|
| HTML 链接标签 | 小型网站(<50 个变体) | 易于实现,可在源代码中查看 | 会使 <head> 膨胀,规模扩大后难以维护 |
| HTTP 标头 | 非 HTML 文件 | 适用于 PDF、图像 | 服务器配置复杂,无法在 HTML 中查看 |
| XML 站点地图 | 大型网站、跨域设置 | 可扩展,集中管理 | 页面上不可见,需要维护站点地图 |
Hreflang 生成
流程
- 检测语言:扫描网站中的语言指示(URL 路径、子域名、顶级域名、HTML lang 属性)
- 映射对应页面:匹配不同语言/地区的对应页面
- 验证语言代码:根据 ISO 639-1 和 ISO 3166-1 验证所有代码
- 生成标签:为每个页面创建 hreflang 标签,包括自引用标签
- 验证返回标签:确认所有关系都是双向的
- 考虑 x-default:在适用时设置合适的备用选项
- 输出:生成实现代码(HTML、HTTP 标头或站点地图 XML)
Hreflang 站点地图生成
带 Hreflang 的站点地图
<?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
输出
Hreflang 验证报告
摘要
- 扫描页面总数:XX
- 检测到的语言变体:XX
- 发现的问题:XX(严重:X,高:X,中:X,低:X)
验证结果
| 语言 | URL | 自引用 | 返回标签 | x-default | 状态 |
|---|---|---|---|---|---|
| en-US | https://... | ✅ | ✅ | ✅ | ✅ |
| fr | https://... | ❌ | ⚠️ | ✅ | ❌ |
| de | https://... | ✅ | ❌ | ✅ | ❌ |
生成的 Hreflang 标签
- HTML
<link>标签(如果选择 HTML 方式) - HTTP 标头值(如果选择标头方式)
hreflang-sitemap.xml(如果选择站点地图方式)
建议
- 添加缺失的实现
- 修正错误的代码
- 迁移方式建议(例如,从 HTML 迁移到站点地图以适应规模增长)
错误处理
| 场景 | 操作 |
|---|---|
| URL 无法访问(DNS 故障、连接被拒绝) | 清楚地报告错误。不要猜测网站结构。建议用户核实 URL 并重试。 |
| 未找到 hreflang 标签 | 报告未找到的情况。检查其他国际化信号(子目录、子域名、国家和地区顶级域名),并建议合适的 hreflang 实现方式。 |
| 检测到无效的语言/地区代码 | 列出每个无效代码及其正确替代代码。提供可直接实施的修正后 hreflang 标签集。 |
限制
- 仅当任务明确符合上述范围时,才使用此技能。
- 不要将输出视为环境特定验证、测试或专家审核的替代品。
- 如果缺少必要的输入、权限、安全边界或成功标准,请停下并请求澄清。
评论
支持 Markdown