站点运营

站点运营:多语言与地区版本自查,别让 hreflang 和跳转互相打架

多语言或多地区站点容易出现语言跳转、hreflang 标注、canonical 和 sitemap 互相矛盾的情况,导致蜘蛛抓取分散。本文从语言版本确认、跳转方式、标注一致性、内链与 sitemap 配合等角度,给出一份可执行的自查清单。

站点运营

站点运营:多语言与地区版本自查,别让 hreflang 和跳转互相打架

多语言或多地区站点看起来只是多了几套语言版本,实际运营中经常出现地址重复、跳转混乱、抓取分散的问题。蜘蛛访问一个页面时,如果同时看到语言跳转、hreflang 标注、canonical 和 sitemap 里不同的地址,它很难判断哪个是主要入口。下面从几个常见环节整理自查思路。

先确认语言版本是否真的必要

不是每个站点都需要多语言。若只是为了“看起来更完整”而开了多个语言目录,却没有对应内容,往往会产生大量空页面或机器翻译页。这类页面容易成为低质地址,消耗抓取资源。自查时可以问:每个语言版本是否有独立编辑和持续更新能力?没有的话,优先保留一个主语言版本,把资源集中起来。

hreflang 标注容易写错的几个地方

  • 语言代码和地区代码顺序写反,比如把 zh-CN 写成 CN-zh。
  • 只写了单向标注,A 页面指向 B 页面,B 页面却没有指回 A 页面。
  • 指向了重定向地址或 404 地址,导致标注本身失效。
  • 同一页面重复输出多组 hreflang,甚至包含自己。
  • 用不存在的语言代码,比如 en-UK 这类非标准写法。

这些问题不一定立刻导致抓取失败,但会让蜘蛛在多个语言版本之间反复确认,增加不必要的抓取成本。

语言跳转不要强制且自动

很多站点会根据 IP 或浏览器语言自动跳转到对应版本。对用户来说可能方便,对蜘蛛来说却容易造成困扰:蜘蛛从一个地址进来,被立即跳到另一个地址,原本的页面内容无法被抓取。更稳妥的做法是:

  • 页面顶部或页脚保留语言切换入口,让用户主动选择。
  • 如果一定要自动跳转,确保跳转前页面可访问,并且跳转目标与当前页面语言版本对应。
  • 不要用 JavaScript 在首屏强制跳转,尤其不要跳转到不同内容的页面。
  • 跳转规则不要随 IP 频繁变化,避免蜘蛛每次抓取都得到不同结果。
自动跳转适合做用户体验的补充,不适合作为蜘蛛发现内容的唯一方式。

canonical 与 hreflang 各司其职

canonical 用来告诉蜘蛛哪个地址是同一内容的代表版本,hreflang 用来告诉蜘蛛这些地址是不同语言或地区的对应版本。两者混用容易出问题。比如某个语言版本被 canonical 指到了主语言版本,那么该语言版本就很难被单独抓取和展示。自查时要确认:每个语言版本的 canonical 指向自己,而不是指向另一种语言;hreflang 则互相指向对应的语言版本。

sitemap 与内链的配合

sitemap 可以列出各语言版本的地址,但不要只依赖它。内链同样重要:语言切换入口、面包屑、相关文章模块,都应该自然链接到对应语言版本。如果某个语言版本只有 sitemap 里有地址,站内没有任何入口,它就容易变成孤岛。可以定期从首页出发,模拟蜘蛛路径,看能否在少量点击内到达主要语言版本。

一份可执行的自查清单

  1. 列出所有语言和地区版本,确认每个版本都有实际内容。
  2. 检查 hreflang 是否双向、是否指向 200 状态码页面。
  3. 检查 canonical 是否指向自身语言版本,而不是其他语言。
  4. 检查语言跳转是否会影响蜘蛛抓取,必要时改为用户主动切换。
  5. 检查 sitemap 是否包含各语言版本,且地址与页面实际地址一致。
  6. 检查站内链接是否覆盖主要语言版本,避免孤岛。
  7. 观察日志中不同语言版本的抓取频率,若某个版本长期不被抓取,优先排查入口和标注。

多语言站点的运营难点不在于开了多少语言,而在于每个版本是否有清晰、一致的抓取路径。把跳转、标注、内链和 sitemap 对齐之后,蜘蛛的判断成本会降低,你也更容易从日志里看出哪些页面真正被关注。