多语言或多地区站点,最容易出问题的地方往往不是翻译质量,而是语言版本之间的信号有没有对齐。搜索引擎面对同一套内容的两三个语言版本时,需要知道谁是谁的对应页、哪一版该给哪个地区的用户看。hreflang 就是干这件事的。它不保证收录,也不提升排名,但写错会让蜘蛛在几个版本之间反复横跳,把抓取预算花在互相矛盾的信号上。
先判断是否真的需要 hreflang
只有一套中文内容、面向同一个地区的站点,不需要 hreflang,加了反而多一层出错的可能。真正需要的场景是:同一页面存在简体和繁体版本,存在面向不同国家和地区的中文站,或者内容一致但语言、货币不同的分站。判断标准很简单——如果两个页面的主体内容高度相似,只是面向的人群不同,那就需要给它们建立对应关系。
几种典型的写错方式
- 只做单向:A 页面指向 B,B 页面没有指回 A。这种不对称关系蜘蛛通常直接忽略。
- 语言代码自造:语言用 ISO 639-1,地区用 ISO 3166-1 Alpha 2,顺序是语言-地区,比如 zh-TW。写成自造的缩写,或者标注与页面实际内容对不上,等于没写。
- 缺少自指:每个版本都应该包含一条指向自己的 hreflang,很多站点会漏掉。
- 缺少 x-default:没有默认版本时,不知道该把其他地区的访客送到哪一页。
- 依赖 JS 动态注入:能渲染的蜘蛛可能读到,读不到的只看到一半信号,最好写在 head 里,或者交给 Sitemap 承载。
- 指向的 URL 本身是 301 或 404:对应关系断在中间。
六步自检流程
- 把所有语言版本的 URL 列成一张表,一行对应一个页面组。
- 逐个检查组内是否双向对称,并且每一条都包含自指。
- 确认 URL 返回 200,且最终地址与 hreflang 里写的一致,不要还写着旧域名。
- 检查每个版本的 canonical 是否指向自己,而不是统一指向主语言版本。canonical 与 hreflang 打架时,通常是 canonical 优先,等于把其他语言版本否掉了。
- 确认 x-default 指向真正的入口页,一般是语言选择页或默认语言版本。
- 如果同时在 Sitemap 里用 xhtml:link 补充声明,两边的数值要保持一致。
提醒一句:hreflang 只描述对应关系,不解决重复内容。内容确实重复时,先想清楚是要合并成一个版本,还是分语言长期运营。
配合日志和索引状态观察
改完之后不要只盯着代码。去抓取日志里看每个语言目录的抓取占比,如果某个版本几乎不被访问,通常是信号没传过去,或者入口太深。再看索引覆盖,确认是否有版本被当成重复页排除掉。观察周期给到两到四周,刚提交就下结论容易误判。
把它变成常态化维护项
新增语言版本时同步补上对应关系;下线某个版本时,记得把其他版本里指向它的那一条删掉。这类工作写在发布清单里当勾选项,比事后排查省事得多。语言版本不多的站点,一次整理清楚可以管很久。