站点运营

站点运营:多语言站点的 URL 结构与 hreflang 配置

多语言和多地区站点的 URL 结构一旦定下就不好改。本文梳理子目录、子域名、独立国家域名三种组织方式的取舍,说明 hreflang 的双向互指、自引用与 x-default 写法,以及自动跳转、语言切换器、canonical 配合中容易踩的坑,并附一份上线前的自查清单。

站点运营

站点运营:多语言站点的 URL 结构与 hreflang 配置

做多语言或多地区站点时,URL 结构往往在项目早期就定下来了,后期想改成本很高。对搜索蜘蛛来说,它需要知道同一篇内容的各个语言版本分别对应哪个 URL,以及在不同地区应该展示哪一个。这件事没处理好,常见的结果是两个版本互相竞争,或者某一个版本长期没有抓取记录。

三种常见的 URL 组织方式

先选结构,再谈配置。三种方式各有代价,没有绝对最优:

  • 子目录(example.com/zh/、example.com/en/):部署最简单,共用同一套服务器和证书,权重集中在一个域名下。代价是各语言版本共用技术栈,以后要单独迁走某一个语言时,需要连带处理目录级的重定向。
  • 子域名(en.example.com):可以独立部署、独立配置 CDN 策略,某个版本出问题时影响面较小。代价是需要在搜索平台分别验证站点,链接权重也要跨子域传递。
  • 独立国家域名(example.de):地区信号最明确,但每个域名都要单独维护证书、解析、监控,成本和运维负担最高,适合本地化投入较大的情况。

不管选哪种,关键是同一个页面的每个语言版本都用一个稳定、可被抓取的 URL,避免同一版本通过多套地址访问。

hreflang 的写法与常见错误

hreflang 的作用是告诉搜索引擎:这些 URL 是同一内容的不同语言或地区版本,请按用户情况选择展示。写法上有几个容易出错的地方。

必须双向互指

A 页面标注了 B 是它的英文版,B 页面也要标注 A 是它的中文版;同时每个页面都要自引用,即在自身的 hreflang 列表里包含自己。只写单向引用,整组标注有可能被忽略。

x-default 的用途

x-default 用来指定当用户的语言和地区都不匹配时的兜底版本,一般指向主语言版本或语言选择页。它不替代其他条目,而是作为补充。

放在哪里

可以写在 HTML 的 head 里,也可以放在 XML 站点地图中,选一种并保持一致即可。条目多、模板不统一时,站点地图通常更容易批量维护。注意语言地区代码要写规范,比如 zh-CN、zh-Hant、en、en-GB,不要写成中文描述。

自动跳转与语言切换器的坑

常见的副作用来自两处:一是按 IP 或浏览器语言做自动跳转,二是语言切换器用脚本或表单提交实现。

  • 自动跳转如果对爬虫也生效,可能让搜索引擎只看到一个版本,其他语言的 URL 逐渐不再被抓取。更稳妥的做法是跳转只对真实用户生效,或者用不跳转的语言选择页作为入口。
  • 语言切换器应该输出可点击的链接,直接指向对应语言的 URL,而不是靠脚本改写地址。脚本跳转对链接发现没有帮助。
  • 不要用 cookie 或 localStorage 记录的语言偏好去改变服务端返回的版本。爬虫没有这些状态,会拿到和用户不同的页面。
  • 不要用 robots.txt 直接屏蔽其他语言目录,这会让那些 URL 失去被抓取的机会。

和 canonical、站点地图的配合

一个常见误区是让英文版 canonical 指向中文版,希望“集中权重”。多语言版本之间是翻译关系,不是重复内容,每个语言版本 canonical 指向自己即可,跨语言合并反而会让另一个版本难以被展示。真正需要 canonical 合并的,是同一语言下因为参数、大小写或历史遗留产生的多套地址。

站点地图方面,如果 hreflang 写在站点地图里,要保证其中出现的 URL 都能返回正常状态;已下线的语言版本及时从站点地图和 hreflang 列表中移除,避免留下指向 404 的标注。

上线前可以过一遍的清单

  1. 每种语言是否都有独立、稳定、可被抓取的 URL。
  2. hreflang 是否双向互指,并包含自引用。
  3. x-default 是否指向合理的兜底版本。
  4. 自动跳转是否只对用户生效,是否影响爬虫获取其他版本。
  5. 语言切换器是否为可点击的链接。
  6. 各语言版本的 canonical 是否指向自身。
  7. 站点地图中的 hreflang 与页面 URL 是否一一对应且可访问。
  8. 服务器日志中是否能看到爬虫访问各语言目录的记录。

多语言站点的 URL 问题通常不是配置一次就能收尾的,语言增删、内容迁移、模板调整都会带来新的不一致。比较务实的做法是把它放进定期检查的清单,用服务器日志和站点地图做交叉核对;发现某个版本长期没有抓取记录时,先查链接入口和 hreflang 标注,再考虑其他原因。