站点运营

站点运营:多语言与 hreflang 自查,别让语言版本互相抢入口

多语言站点里,hreflang 写错往往不会立刻报错,却会让蜘蛛在不同语言版本之间反复试探,甚至把对应版本当成重复内容。本文从语言版本的 URL 组织方式讲起,整理 hreflang 的双向指向、x-default、canonical 与 Sitemap 配合等自查要点,并给出一份可以照着做的检查清单。

站点运营

站点运营:多语言与 hreflang 自查,别让语言版本互相抢入口

做多语言站点最容易出现两种情况:一种是各语言版本各写各的,蜘蛛在两个版本之间来回跳;另一种是干脆没做标记,蜘蛛把英文页当成中文页的重复内容。hreflang 解决的是“同一内容、不同语言或地区”之间的对应关系,但它不是写上就灵的配置,需要像检查内链一样定期自查。

先确认语言版本是怎么组织的

常见有三种:子目录(example.com/en/)、子域名(en.example.com)、独立域名(example.com 与 example.co.uk)。三种都能用,重点是保持统一,不要一半用子目录一半用子域名,否则日志、证书、验证文件的归属都会变得混乱。

从抓取路径和权重集中角度看,子目录通常最容易管理:同一域名下的 hreflang、Sitemap、canonical 都在一套体系里,蜘蛛顺着一条路径就能走完所有版本。子域名和独立域名则需要额外确认站点验证、证书覆盖和抓取统计是否分别到位。

hreflang 的三条基本规则

  • 必须双向返回:A 页指向 B 页,B 页也要指回 A 页。单向指向经常会被忽略,等于白写。
  • 语言与地区分开写:zh-Hans、zh-Hant、en、en-US 是不同含义,别把语言码当地区码用,也别用国家码代替语言码。
  • 加一个 x-default:用于没有匹配语言时的兜底页,通常是语言选择页或默认语言首页。
自查时不要只看“有没有写”,要确认每条指向的 URL 都能正常打开、状态码是 200,并且指向的确实是同一篇内容的对应版本。指向 301、404 或另一篇文章的标签,会直接干扰判断。

一份可以照着做的自查清单

  1. 列出所有语言版本,标注 URL 形式、默认语言和兜底页。
  2. 抽查 10~20 篇文章,逐个确认相互指向是否完整,以及是否包含指向自身的标签。
  3. 检查是否有指向已下线、已改版页面的旧标签,及时更新或删除。
  4. 确认 canonical 指向本语言版本自身,而不是统一指向默认语言页。
  5. 对照 Sitemap,确认地图包含各语言版本,且 alternates 与页面上的标记一致。

和 canonical、Sitemap 的关系

hreflang 不是 canonical 的替代品。canonical 回答“哪个是这一语言版本的正本”,hreflang 回答“哪些页面是它的其他语言版本”。如果一个英文页的 canonical 指到中文页,等于告诉蜘蛛忽略英文页,hreflang 写得再全也难起作用。反过来,如果每个语言版本都独立自指,再把 hreflang 补全,结构就清楚得多。

抓取路径上的常见坑

  • 语言切换靠 JS 下拉框,切换后 URL 不变,蜘蛛只能看到默认语言。
  • hreflang 只写在首页,内页完全没有标记,对应关系断在半路。
  • 同一语言存在多个 URL(带参数、大小写不同),标签指向混乱。
  • 地区判断靠 Cookie 或 IP,导致同一个 URL 返回不同语言的内容。

建议每季度做一次抽查,新增语言或改版之后再加一次。多语言站点的 URL 发现本来就比单语言复杂,把对应关系理顺,蜘蛛才能把每个版本当成独立且明确的页面来抓,而不是在一堆近似的 URL 之间反复打转。