多語言、多地区站点在做收錄整理时,最容易卡在一個問题上:同一個頁面有英文版、中文版、日文版,搜尋引擎到底该把哪個版本放進索引,又该在哪個地区的搜尋结果里展示。很多人把 hreflang 当成一種“提交收錄”的手段,其實它更像一張版本對應關系說明表。
hreflang 解决的是版本對應,不是收錄本身
hreflang 的作用是告诉搜尋引擎:“這几個地址是同一内容的不同語言或地区版本,請按用戶所在地区選擇展示哪一個。”它不保證頁面被收錄,也不直接提升排名。真正决定收錄的,還是頁面能不能被抓取、内容是否有價值、URL 是否規范。
所以当多語言站点出現“英文版收錄了、中文版没收錄”的情况,先別急着改 hreflang,先確認中文版頁面本身是否可抓取、是否有獨立内容、是否被 canonical 指到了英文版。
常见的多語言 URL 结构
- 子目錄:example.com/cn/、example.com/en/,權重集中,维護成本低,最常见。
- 子域名:cn.example.com,适合各地区运营相對獨立的站点,但要單獨做抓取和收錄管理。
- 獨立域名:地区差异大、需要本地化品牌时使用,代價是每個域名都要單獨经营。
- 參數切換:?lang=cn 這類做法對搜尋引擎不友好,容易形成參數型重复,建议尽量避免。
结构本身没有绝對好坏,關键是選定之後保持稳定,別频繁更換,否則每次迁移都會带来一轮 URL 交接問题。
寫法上的几個硬要求
hreflang 必须是双向的。A 頁面指向 B 頁面,B 頁面也要指回 A 頁面,同时每個頁面都要包含指向自身的 hreflang(自引用)。只寫單向,等于說明表缺了一半,搜尋引擎通常無法確認對應關系。
另外,hreflang 里的地址要用最终可訪問的規范地址,不要指向會 301 跳轉的舊地址。語言代碼用 ISO 639-1(如 zh、en),地区代碼用 ISO 3166-1 Alpha 2(如 CN、US),两者组合时用连字符,例如 zh-CN。
如果有一版是面向所有其他地区的預設版本,可以用 x-default 标记。
hreflang 和 canonical 別打架
這是多語言站最容易出错的地方。如果中文版頁面用 canonical 指向英文版,同时又说“這是中文版”,两個信号互相矛盾。搜尋引擎通常會優先相信 canonical,结果就是中文版長期進不了索引。
正确做法是:每個語言版本的 canonical 指向自己。只有当某個版本确實是重复内容、不需要單獨收錄时,才指向主版本,並且要把這個版本從 hreflang 里去掉。
常见誤区
- 以為寫了 hreflang 就能让每個語言版本都被收錄,其實它不负责收錄。
- 机器翻译後直接上线,各版本内容几乎相同,索引里往往只保留一個。
- 只在一部分頁面加 hreflang,站内對應關系不完整。
- 用 302 或 JS 跳轉做語言切換,蜘蛛可能抓不到目标版本。
- 把 hreflang 寫進站点地图後,忘了和頁面上的标注保持一致。
動手整理时的顺序
- 先确定每個語言版本都有唯一、稳定的規范 URL。
- 检查各版本是否可抓取:robots、noindex、登入墙、JS 渲染是否挡住蜘蛛。
- 统一 canonical,确保各版本指向自身。
- 补齐双向 hreflang,並加上自引用和 x-default。
- 站点地图标注和頁面标注二選一,保持一致,不要两邊寫不同的内容。
- 上线後按語言分组观察索引情况,發現問题先按語言定位,而不是全站一起改。
多語言站点的收錄問题,大多不是 hreflang 寫错了,而是每個語言版本本身没有形成獨立、可抓取、有差异的頁面。
整理這類站点时,建议把 hreflang 看成“索引归属的說明”,而不是“收錄開關”。先把每個語言版本的抓取和規范化做扎實,再谈對應關系,效率會高很多。