站点做了多語言或多地区版本之後,常见的一種情况是:几個語言版本的頁面结构高度相似,只是文字不同,搜尋引擎在抓取时容易把它們当成重复内容,最後只留一個版本在索引里,其余的版本權重被分散。hreflang 是用来缓解這個問题的信号之一,但它需要寫對、寫全,才可能被正确理解。
hreflang 想解决的問题
简單说,它告诉搜尋引擎:這几個 URL 是同一内容的不同語言或地区版本,請在對應語言或地区的搜尋结果里展示合适的那一個。它不解决抓取問题,也不保證收錄,只是减少版本之間的互相竞争。
几個容易寫错的地方
回鏈不完整
hreflang 要求互相指向。A 頁面标注了 B,B 也要标注 A,否則這组關系是断的。很多站点只在主版本上寫了一遍,分支頁面没有任何标注,等于白寫。
語言與地区代碼不規范
語言用 ISO 639-1 两位代碼,地区用 ISO 3166-1 Alpha 2,形如 zh-CN、en-US、es-ES。寫成 zh_CN、en_US、ES 這類形式,机器可能直接忽略。地区部分可以省略,但語言部分不能随意缩寫。
x-default 缺失
当用戶的語言或地区没有明确匹配項时,需要一個兜底版本,通常用 x-default 指向它。常见做法是指向英文版或者語言選擇頁,具体看你的业務覆盖范围。
和 canonical 打架
如果每個語言版本都 canonical 到同一個 URL,同时又用 hreflang 声明它們是並列版本,两個信号就互相矛盾了。通常建议每個語言版本 canonical 到自己。
标注了不存在的頁面
指向 404、被 robots 屏蔽或者被 noindex 的地址,會让整组關系失效。改版或下线頁面之後,记得同步清理 hreflang 里的死鏈。
自查清單
- 列出所有語言或地区版本,確認每個版本都出現在其他版本的 hreflang 列表中,形成閉环。
- 检查代碼拼寫,語言和地区代碼符合标准格式,不要混用下划线和大小寫。
- 每组關系里有且只有一個 x-default。
- hreflang 指向的 URL 全部可訪問,返回 200,且没有被 noindex。
- hreflang 里的地址與頁面 canonical 地址保持一致,不要一個带 www 一個不带。
- 確認标注方式统一:head 里的 link 标簽、HTTP 头、sitemap 三種方式選一種為主,不要混着用還互相矛盾。
寫完之後看什么
hreflang 生效不會立刻体現在排名上,更實际的观察方向是抓取和索引:用站長工具或服務器日誌看各語言版本是否都被抓取過,索引里是不是長期只剩一個版本。如果分支版本始终抓不到,先回去检查站内連結和 sitemap 有没有把它們暴露出来,hreflang 本身不负责让頁面被發現。
多語言站点的根本還是内容差异。如果两個版本只是粗翻的替換,hreflang 寫得再規范,也很难改變它們被视為近似重复内容的结果。