站点运营

站点运营:hreflang 與語言版本自查,別让多語言頁面互相冲突

多語言站点靠 hreflang 把同一内容的不同語言版本串起来,标注寫错或漏寫,語言版本之間就會互相抢流量,甚至被判為重复内容。本文给出一份可执行的自查清單,涵盖自我指向、双向對等、語言代碼、x-default 與失效地址等常见問题,並說明發現問题後的處理顺序。

站点运营

站点运营:hreflang 與語言版本自查,別让多語言頁面互相冲突

多語言或面向多地区的站点,通常會為每種語言准备一套獨立 URL。搜尋蜘蛛抓取时無法凭空判断這几套頁面是同一内容的不同語言版本,還是要分開對待的不同頁面,這個判断很大一部分依赖 hreflang 标注。标注准确,各語言版本各拿各的流量;标注出错,轻則語言版本互相抢同一批搜尋需求,重則整组頁面被当成重复内容,抓取和展示都受影响。

自查前先明确两件事

第一,確認哪些頁面算同一组。只有主体内容相同、僅語言或地区不同的頁面才應该互相标注。把一篇中文原创和它的英文改寫放在一组里,本身就是誤判。

第二,確認語言代碼寫法。語言用 ISO 639-1 两位小寫代碼,地区用 ISO 3166-1 两位大寫代碼,中間用连字符。常见错誤是把簡體中文寫成 CN、把英國英语寫成 en-UK,正确寫法分別是 zh-CN 和 en-GB。只标語言不标地区(如 en、zh)也可以,但要和同组頁面保持一致,別一半寫 en 一半寫 en-US。

常见問题清單

1. 缺少自我指向

這是出現频率最高的一種。頁面标注了同组的其他語言版本,唯獨漏掉自己。正确的做法是:每個頁面在自己的 hreflang 集合里都要包含一條指向自身 URL 的标注。少了這一條,搜尋蜘蛛可能無法把该頁面归入這组語言集群。

2. 双向不對等

A 頁面声明了 B 和 C,但 B 頁面只声明了 C,没有回指 A。hreflang 是相互確認的關系,單方面声明往往不被采信。自查时最稳妥的方式是把同组頁面的标注集中列出来,逐條核對是否两两對應。

3. 指向跳轉地址或失效地址

hreflang 里寫的必须是最终可訪問的規范地址。如果它指向一個 301 跳轉頁,或者頁面已经下线變成 404,這條标注等于没有,還可能把抓取引向错誤方向。語言版本做迁移或栏目改版後,這一類問题最容易出現。

4. x-default 缺失或被滥用

x-default 用来指定語言選擇頁或預設兜底版本,一般指向語言選擇頁或主語言版本。常见問题是每個頁面都塞一條 x-default 且指向不同地址,或者整個组里根本没有 x-default。前者互相矛盾,後者在用戶語言無法匹配时缺少明确落点。

5. 标注位置分散且互相打架

hreflang 可以通過 HTML head 标簽、HTTP 响應头或 sitemap 三種方式声明。同一组頁面如果一部分用 head、一部分用 sitemap,且内容不一致,就會产生冲突。建议同一站点统一一種主要方式,其余作為补充而非替換。

6. 語言版本之間内容差异過小

如果几個語言版本只是机器翻译的近似结果,或正文几乎一致僅換了标题,即使 hreflang 寫對了,頁面本身仍然缺乏獨立價值。這时候该處理的是内容,而不是标注。

一次完整的自查步骤

  1. 導出站点所有含 hreflang 的 URL 及其标注内容,整理成表格,一列是目前頁面,其余列是它声明的各語言地址。
  2. 按語言组归類,检查每组内是否每個頁面都有自我指向。
  3. 逐條驗證被声明的地址:是否返回 200、是否是最终地址、是否與表格中记錄的一致。
  4. 检查語言代碼格式,统一大小寫和地区寫法。
  5. 確認每组只有一個 x-default,且落点合理。
  6. 抽查若干頁面,確認 head 标簽與 sitemap 中的声明没有矛盾。
  7. 把整理好的對照表存档,下次改版或新增語言时直接沿用。

發現問题後的處理顺序

先修失效和跳轉地址,因為這類問题會直接浪費抓取;再补自我指向和双向對等,這一步能解决大部分集群识別問题;然後统一語言代碼和 x-default;最後才考虑是否需要為語言版本补充差异化内容。改動較大时,不必一次性全站推倒重来,可以按語言组分批處理,每批改完观察一段時間的抓取和展示變化,再决定是否繼續。

hreflang 不是给搜尋蜘蛛看的装饰,而是你對几套頁面關系的明确声明。声明寫错,比不寫更容易造成混乱——不寫时蜘蛛至少會按常規逻辑判断,寫错时它可能沿着错誤线索走。

多語言站点的运营成本本来就高于單語言站点,把 hreflang 這類基础标注定期過一遍,比事後排查流量異常要省力得多。建议把它並入站点改版清單,和 sitemap 更新、重定向检查一起执行。