多语言、多地区站点在做收录整理时,最容易卡在一个问题上:同一个页面有英文版、中文版、日文版,搜索引擎到底该把哪个版本放进索引,又该在哪个地区的搜索结果里展示。很多人把 hreflang 当成一种“提交收录”的手段,其实它更像一张版本对应关系说明表。
hreflang 解决的是版本对应,不是收录本身
hreflang 的作用是告诉搜索引擎:“这几个地址是同一内容的不同语言或地区版本,请按用户所在地区选择展示哪一个。”它不保证页面被收录,也不直接提升排名。真正决定收录的,还是页面能不能被抓取、内容是否有价值、URL 是否规范。
所以当多语言站点出现“英文版收录了、中文版没收录”的情况,先别急着改 hreflang,先确认中文版页面本身是否可抓取、是否有独立内容、是否被 canonical 指到了英文版。
常见的多语言 URL 结构
- 子目录:example.com/cn/、example.com/en/,权重集中,维护成本低,最常见。
- 子域名:cn.example.com,适合各地区运营相对独立的站点,但要单独做抓取和收录管理。
- 独立域名:地区差异大、需要本地化品牌时使用,代价是每个域名都要单独经营。
- 参数切换:?lang=cn 这类做法对搜索引擎不友好,容易形成参数型重复,建议尽量避免。
结构本身没有绝对好坏,关键是选定之后保持稳定,别频繁更换,否则每次迁移都会带来一轮 URL 交接问题。
写法上的几个硬要求
hreflang 必须是双向的。A 页面指向 B 页面,B 页面也要指回 A 页面,同时每个页面都要包含指向自身的 hreflang(自引用)。只写单向,等于说明表缺了一半,搜索引擎通常无法确认对应关系。
另外,hreflang 里的地址要用最终可访问的规范地址,不要指向会 301 跳转的旧地址。语言代码用 ISO 639-1(如 zh、en),地区代码用 ISO 3166-1 Alpha 2(如 CN、US),两者组合时用连字符,例如 zh-CN。
如果有一版是面向所有其他地区的默认版本,可以用 x-default 标记。
hreflang 和 canonical 别打架
这是多语言站最容易出错的地方。如果中文版页面用 canonical 指向英文版,同时又说“这是中文版”,两个信号互相矛盾。搜索引擎通常会优先相信 canonical,结果就是中文版长期进不了索引。
正确做法是:每个语言版本的 canonical 指向自己。只有当某个版本确实是重复内容、不需要单独收录时,才指向主版本,并且要把这个版本从 hreflang 里去掉。
常见误区
- 以为写了 hreflang 就能让每个语言版本都被收录,其实它不负责收录。
- 机器翻译后直接上线,各版本内容几乎相同,索引里往往只保留一个。
- 只在一部分页面加 hreflang,站内对应关系不完整。
- 用 302 或 JS 跳转做语言切换,蜘蛛可能抓不到目标版本。
- 把 hreflang 写进站点地图后,忘了和页面上的标注保持一致。
动手整理时的顺序
- 先确定每个语言版本都有唯一、稳定的规范 URL。
- 检查各版本是否可抓取:robots、noindex、登录墙、JS 渲染是否挡住蜘蛛。
- 统一 canonical,确保各版本指向自身。
- 补齐双向 hreflang,并加上自引用和 x-default。
- 站点地图标注和页面标注二选一,保持一致,不要两边写不同的内容。
- 上线后按语言分组观察索引情况,发现问题先按语言定位,而不是全站一起改。
多语言站点的收录问题,大多不是 hreflang 写错了,而是每个语言版本本身没有形成独立、可抓取、有差异的页面。
整理这类站点时,建议把 hreflang 看成“索引归属的说明”,而不是“收录开关”。先把每个语言版本的抓取和规范化做扎实,再谈对应关系,效率会高很多。