站点运营

站点运营:多语言与多地区站点自查,别让蜘蛛把语言版本当成重复内容

多语言、多地区站点最容易出现的问题,是同一份内容被拆成好几套 URL,而 hreflang、canonical 和跳转逻辑又没写对,蜘蛛只能靠猜。这篇文章给出一份可照着做的自查清单,帮你在扩大覆盖面之前,先把各语言版本之间的关系理清楚。

站点运营

站点运营:多语言与多地区站点自查,别让蜘蛛把语言版本当成重复内容

做多语言或多地区站点时,常见的起点是这样的:主站跑得还行,于是顺手复制一套英文版、繁中版、日文版。页面能打开,用户也能切换语言,看起来没什么问题。但抓取日志里往往是另一番景象——不同语言的页面被反复抓取,抓取预算被摊薄,甚至某个语言版本长期进不了索引。

问题通常不在翻译质量,而在版本之间的关系没有讲清楚。蜘蛛看到的是几个内容高度相似、URL 结构又各自独立的页面,它只能自己判断谁是主、谁是副本,判断结果未必和你的预期一致。

先搞清楚蜘蛛面对的是哪种局面

在动手改之前,先确认你的多语言实现方式属于哪一类。不同的实现方式,后续需要补的信号完全不一样。

URL 结构决定了一半的问题

  • 子目录:example.com/en/、example.com/zh-hant/。结构集中,权重不易分散,多数情况是较好选择。
  • 子域名:en.example.com。适合服务器或运营团队分离的情况,但和主站的关系需要额外声明。
  • 独立域名:example.co.uk 这类 ccTLD,地区信号最强,维护成本也最高。
  • 参数或 Cookie 切换语言:最难被稳定抓取。同一个 URL 返回不同语言内容,蜘蛛往往只记住其中一种。

hreflang 的三条硬规则

  1. 双向:A 页指向 B 页,B 页必须指回 A 页。单向声明基本等于没写。
  2. 自引用:每个页面也要把自己算进语言集合里,包括 x-default 页面。
  3. 代码规范:语言用 ISO 639-1,地区用 ISO 3166-1 Alpha 2,例如 zh-Hans、zh-Hant、en-US、pt-BR。只写 zh 或 en,然后指望蜘蛛自己分辨简繁,通常不现实。

自动跳转是最容易被忽略的坑

不少站点会根据 IP、浏览器语言或 UA 自动 302 到对应语言版本。对真实用户这是体验优化,对蜘蛛可能是灾难:它从某个地区 IP 抓取时被一路跳走,于是永远看不到你希望它抓的那个页面。

如果必须做自动跳转,至少保证三点:不跳转到与当前 URL 语言明显冲突的版本;保留一个可被直接访问、不做跳转的入口页;不要用 JavaScript 在渲染完成之后才跳。

canonical 与 Sitemap 要跟着一起改

语言版本不属于重复内容,所以通常不应该把英文页的 canonical 指向中文页。canonical 表达的是“这是同一份内容”,hreflang 表达的是“这是同一份内容的不同语言版本”,两者混用会让信号自相矛盾。

Sitemap 方面,可以每种语言各出一份,并在其中标注对应的 hreflang;也可以合并成一份,但要保证列出的 URL 都能正常访问、不被跳转。

一份可以照着走的自查顺序

  1. 列出所有语言与地区版本的实际 URL,确认每种只对应一套地址。
  2. 抽查三到五个页面,检查 hreflang 是否双向、是否自引用、代码是否规范。
  3. 用不同地区的 IP 或 UA 访问同一个 URL,观察是否被静默跳转。
  4. 核对 canonical,确认没有跨语言指向。
  5. 检查 Sitemap 与 robots.txt,是否放行了全部语言版本。
  6. 过一段时间再看抓取日志,确认各语言版本的抓取比例是否合理。

几件不建议在语言版本上做的事

  • 用同一个 URL 加参数切换语言,而参数并不真正影响页面内容。
  • 把机翻内容直接铺成几十个语言版本,正文几乎一致,只有语言不同。
  • 语言版本上线后长期不更新,只留下一个空目录。
  • 借助蜘蛛池或其他方式强推某个语言版本的 URL,却没有对应内容与内链支撑。

多语言站点的核心不是“多”,而是关系清晰。让每个版本的 URL 唯一、声明完整、能被直接访问,蜘蛛才有可能把正确的页面分发给正确的用户。把这些基础做完,再去分析抓取日志和 URL 发现情况,才是有意义的优化。