做多語言站点最容易出現两種情况:一種是各語言版本各寫各的,蜘蛛在两個版本之間来回跳;另一種是干脆没做标记,蜘蛛把英文頁当成中文頁的重复内容。hreflang 解决的是“同一内容、不同語言或地区”之間的對應關系,但它不是寫上就灵的配置,需要像检查内鏈一样定期自查。
先確認語言版本是怎么组织的
常见有三種:子目錄(example.com/en/)、子域名(en.example.com)、獨立域名(example.com 與 example.co.uk)。三種都能用,重点是保持统一,不要一半用子目錄一半用子域名,否則日誌、證书、驗證文件的归属都會變得混乱。
從抓取路径和權重集中角度看,子目錄通常最容易管理:同一域名下的 hreflang、Sitemap、canonical 都在一套体系里,蜘蛛顺着一條路径就能走完所有版本。子域名和獨立域名則需要額外確認站点驗證、證书覆盖和抓取統計是否分別到位。
hreflang 的三條基本規則
- 必须双向返回:A 頁指向 B 頁,B 頁也要指回 A 頁。單向指向经常會被忽略,等于白寫。
- 語言與地区分開寫:zh-Hans、zh-Hant、en、en-US 是不同含义,別把語言碼当地区碼用,也別用國家碼代替語言碼。
- 加一個 x-default:用于没有匹配語言时的兜底頁,通常是語言選擇頁或預設語言首頁。
自查时不要只看“有没有寫”,要確認每條指向的 URL 都能正常打開、狀態碼是 200,並且指向的确實是同一篇内容的對應版本。指向 301、404 或另一篇文章的标簽,會直接干扰判断。
一份可以照着做的自查清單
- 列出所有語言版本,标注 URL 形式、預設語言和兜底頁。
- 抽查 10~20 篇文章,逐個確認相互指向是否完整,以及是否包含指向自身的标簽。
- 检查是否有指向已下线、已改版頁面的舊标簽,及时更新或刪除。
- 確認 canonical 指向本語言版本自身,而不是统一指向預設語言頁。
- 對照 Sitemap,確認地图包含各語言版本,且 alternates 與頁面上的标记一致。
和 canonical、Sitemap 的關系
hreflang 不是 canonical 的替代品。canonical 回答“哪個是這一語言版本的正本”,hreflang 回答“哪些頁面是它的其他語言版本”。如果一個英文頁的 canonical 指到中文頁,等于告诉蜘蛛忽略英文頁,hreflang 寫得再全也难起作用。反過来,如果每個語言版本都獨立自指,再把 hreflang 补全,结构就清楚得多。
抓取路径上的常见坑
- 語言切換靠 JS 下拉框,切換後 URL 不變,蜘蛛只能看到預設語言。
- hreflang 只寫在首頁,内頁完全没有标记,對應關系断在半路。
- 同一語言存在多個 URL(带參數、大小寫不同),标簽指向混乱。
- 地区判断靠 Cookie 或 IP,導致同一個 URL 返回不同語言的内容。
建议每季度做一次抽查,新增語言或改版之後再加一次。多語言站点的 URL 發現本来就比單語言复杂,把對應關系理顺,蜘蛛才能把每個版本当成獨立且明确的頁面来抓,而不是在一堆近似的 URL 之間反复打轉。