站点运营

站点运营:多语言与地区版本自查,别让蜘蛛在两套页面之间来回切换

面向不同语言或地区的站点,常常在语言切换、hreflang 标注和 canonical 之间埋下冲突:蜘蛛从 A 语言被自动弹到 B 语言,或者两套页面互相被当成重复内容。本文给出一份可执行的自查顺序,从版本清单、标注回链、x-default 到跳转与缓存,逐项确认后再上线改动。

站点运营

站点运营:多语言与地区版本自查,别让蜘蛛在两套页面之间来回切换

当站点面向不同语言或不同地区的用户提供不同页面时,搜索引擎需要知道这些页面是同一主题的“兄弟版本”,而不是互相抄袭的重复内容。hreflang 标注就是用来表达这层关系的。它本身不会提升排名,但能减少蜘蛛把不同语言页面判为重复版本的概率,也能让用户看到更贴合自己语言习惯的页面。这项工作更适合在栏目改版、新增语种之前做一次系统自查。

先分清语言版本和地区版本

语言和地区是两个维度。只按语言区分时,用 zh、en、es 这类代码即可;同时区分地区时,写成 zh-Hans、en-US、pt-BR 这类组合。常见问题是把两者混着用:一部分页面标 en,另一部分标 en-US,还有的写 EN_us,大小写和连接符不统一,机器读起来就是几套不同的标注。整理清单时,建议每个 URL 只对应一个语言地区组合,并把代码统一成规范写法。

版本清单是自查的起点

不要直接在模板里改标签,先把现有版本列成一张表,再对照检查。

  • 每个语言或地区版本的完整 URL,是否唯一、是否可访问。
  • 该 URL 是否参与 hreflang 标注,还是只在导航里出现。
  • 是否只有部分栏目做了多语言,另一部分仍是单语言。
  • 是否有“空版本”:页面存在但正文几乎与默认语言相同。

清单拉出来后,很多冲突会自己浮现出来,比如某个语种只有首页和列表页,详情页直接回落到默认语言版本。

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

不少站点用浏览器语言或 IP 做强制跳转:蜘蛛以默认语言抓取 A 页面,服务器返回 302 把它带到 B 页面,结果 B 页面被反复抓取,A 页面长期得不到更新。更稳妥的做法是保留各语言版本的直接入口,把选择权放在页面内的切换链接或选择页上,而不是在入口处一刀切。

判断标准很简单:关掉浏览器语言偏好、清空 Cookie 之后,能不能直接打开每一个语言版本的首页和栏目标题页。如果打不开,蜘蛛多半也打不开。

标注本身要查的几处细节

  • 回链:每个版本都要列出全部版本,包括自己。只写单向指向的做法,容易被忽略。
  • 绝对地址:带协议和主机名,避免相对路径在分站或子目录下解析错误。
  • x-default:为没有匹配到具体语言的用户准备一个默认版本或语言选择页,通常是主语言版本。
  • 与 canonical 的关系:canonical 一般指向本语言版本自己,不要跨语言指向默认语言,否则等于告诉蜘蛛其他语言版本都该合并过去。
  • 目标可用性:标注指向的 URL 不能是 404、重定向终点,也不能被 robots 规则或 noindex 挡住。

内容重复与 CDN 缓存

如果两个版本只是货币符号或少量文案不同,正文结构完全一致,可以考虑合并为一个版本,用地区选择或参数表达差异。多出来的薄版本会稀释抓取预算,也会让 hreflang 标注失去意义。另一个隐蔽问题是 CDN 缓存:按 URL 缓存时没带上 Vary 或语言维度,返回给英文爬虫的可能是中文页面缓存。自查时可以用不同语言头请求同一 URL,比对返回内容是否随语言变化。

上线后的观察方式

改完标注不等于结束。可以定期从服务器日志中筛选各语言目录,看蜘蛛是否在稳定抓取每个版本,还是长期只抓默认版本。同时检查搜索后台的国际定位或语言报告,确认标注被识别。每次调整只改一类问题,观察一段时间再动下一处,避免同时改动跳转、canonical 和 hreflang 后无法判断是哪一步起了作用。