当站点面向不同语言或不同地区的用户提供不同页面时,搜索引擎需要知道这些页面是同一主题的“兄弟版本”,而不是互相抄袭的重复内容。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 后无法判断是哪一步起了作用。