多语言或面向多地区的站点,通常会为每种语言准备一套独立 URL。搜索蜘蛛抓取时无法凭空判断这几套页面是同一内容的不同语言版本,还是要分开对待的不同页面,这个判断很大一部分依赖 hreflang 标注。标注准确,各语言版本各拿各的流量;标注出错,轻则语言版本互相抢同一批搜索需求,重则整组页面被当成重复内容,抓取和展示都受影响。
自查前先明确两件事
第一,确认哪些页面算同一组。只有主体内容相同、仅语言或地区不同的页面才应该互相标注。把一篇中文原创和它的英文改写放在一组里,本身就是误判。
第二,确认语言代码写法。语言用 ISO 639-1 两位小写代码,地区用 ISO 3166-1 两位大写代码,中间用连字符。常见错误是把简体中文写成 CN、把英国英语写成 en-UK,正确写法分别是 zh-CN 和 en-GB。只标语言不标地区(如 en、zh)也可以,但要和同组页面保持一致,别一半写 en 一半写 en-US。
常见问题清单
1. 缺少自我指向
这是出现频率最高的一种。页面标注了同组的其他语言版本,唯独漏掉自己。正确的做法是:每个页面在自己的 hreflang 集合里都要包含一条指向自身 URL 的标注。少了这一条,搜索蜘蛛可能无法把该页面归入这组语言集群。
2. 双向不对等
A 页面声明了 B 和 C,但 B 页面只声明了 C,没有回指 A。hreflang 是相互确认的关系,单方面声明往往不被采信。自查时最稳妥的方式是把同组页面的标注集中列出来,逐条核对是否两两对应。
3. 指向跳转地址或失效地址
hreflang 里写的必须是最终可访问的规范地址。如果它指向一个 301 跳转页,或者页面已经下线变成 404,这条标注等于没有,还可能把抓取引向错误方向。语言版本做迁移或栏目改版后,这一类问题最容易出现。
4. x-default 缺失或被滥用
x-default 用来指定语言选择页或默认兜底版本,一般指向语言选择页或主语言版本。常见问题是每个页面都塞一条 x-default 且指向不同地址,或者整个组里根本没有 x-default。前者互相矛盾,后者在用户语言无法匹配时缺少明确落点。
5. 标注位置分散且互相打架
hreflang 可以通过 HTML head 标签、HTTP 响应头或 sitemap 三种方式声明。同一组页面如果一部分用 head、一部分用 sitemap,且内容不一致,就会产生冲突。建议同一站点统一一种主要方式,其余作为补充而非替换。
6. 语言版本之间内容差异过小
如果几个语言版本只是机器翻译的近似结果,或正文几乎一致仅换了标题,即使 hreflang 写对了,页面本身仍然缺乏独立价值。这时候该处理的是内容,而不是标注。
一次完整的自查步骤
- 导出站点所有含 hreflang 的 URL 及其标注内容,整理成表格,一列是当前页面,其余列是它声明的各语言地址。
- 按语言组归类,检查每组内是否每个页面都有自我指向。
- 逐条验证被声明的地址:是否返回 200、是否是最终地址、是否与表格中记录的一致。
- 检查语言代码格式,统一大小写和地区写法。
- 确认每组只有一个 x-default,且落点合理。
- 抽查若干页面,确认 head 标签与 sitemap 中的声明没有矛盾。
- 把整理好的对照表存档,下次改版或新增语言时直接沿用。
发现问题后的处理顺序
先修失效和跳转地址,因为这类问题会直接浪费抓取;再补自我指向和双向对等,这一步能解决大部分集群识别问题;然后统一语言代码和 x-default;最后才考虑是否需要为语言版本补充差异化内容。改动较大时,不必一次性全站推倒重来,可以按语言组分批处理,每批改完观察一段时间的抓取和展示变化,再决定是否继续。
hreflang 不是给搜索蜘蛛看的装饰,而是你对几套页面关系的明确声明。声明写错,比不写更容易造成混乱——不写时蜘蛛至少会按常规逻辑判断,写错时它可能沿着错误线索走。
多语言站点的运营成本本来就高于单语言站点,把 hreflang 这类基础标注定期过一遍,比事后排查流量异常要省力得多。建议把它并入站点改版清单,和 sitemap 更新、重定向检查一起执行。