網站收錄

多語言版本互相抢收錄:語言 URL 與 hreflang 的核對顺序

同一份内容的多個語言版本,常常只有一個能稳定出現在搜尋里,另一個長期不露面,或者两個版本轮流顶替。本文從 URL 清單入手,梳理子目錄、子域名、參數三種组织方式的差异,给出 hreflang 互相回指、canonical 归属、抓取與收錄狀態分開核對的具体顺序,帮助判断该收敛還是该保留多版本。

網站收錄

多語言版本互相抢收錄:語言 URL 與 hreflang 的核對顺序

同一份内容做了英文版、繁体版或面向不同地区的版本,搜尋里却總是只出現其中一個,另一個長期不露面,或者两個版本轮流顶替。這種情况常被笼统归為“重复内容”,但更實际的第一步,是弄清楚有哪几個 URL 在争同一個入口,以及哪一個是主版本。

先把 URL 清單列出来,而不是先改代碼

很多人一發現問题就去動 hreflang,结果越改越乱。更稳的顺序是先做清單:把同一份内容對應的所有地址整理成一行,包括語言子目錄、子域名、參數形式,以及可能被外部引用過的舊地址。清單里每一項都要标注:返回狀態碼、canonical 指向、hreflang 指向、是否在 sitemap 里、是否有内鏈入口。這份表做出来,問题往往已经能看出七八成。

常见的三種组织方式,各自的坑不一样

  • 子目錄(/en/、/zh-tw/):结构清楚,權重集中在主域,最容易處理。風險是漏配 hreflang 互相回指,或者某一語言目錄没有内鏈入口,變成半孤立頁面。
  • 子域名(en.example.com):技術上更獨立,但容易被当成不同站点,收錄和權重各自計算。要額外確認子域是否已被驗證、是否單獨提交過 sitemap。
  • 參數形式(?lang=en):最容易被当作同一頁面的變体處理,也最容易出現參數顺序不一致而衍生出多份 URL。

hreflang 的核對顺序

  1. 每個版本都要指向自己,並且互相指回其他所有版本,單向指向通常不生效。
  2. 語言代碼用規范寫法,地区可選。寫错或不存在的代碼,等于没寫。
  3. 需要有一個 x-default,指向預設版本或語言選擇頁。
  4. hreflang 里的 URL 必须是绝對地址、可抓取、返回 200,並且與 canonical 不冲突。
  5. 检查 canonical 是否横向乱指:A 語言頁面 canonical 到 B 語言頁面,等于主動把两個版本合並成一個,通常不是本意。
hreflang 是给搜尋引擎的提示,不是强制指令。它解决不了“两份内容几乎一样”這個問题本身,只能帮助判断该给哪個地区的用戶看哪一版。

内容本身是否真的不同

如果几個語言版本只是把模板头尾換了語言,正文仍然靠机器翻译逐句對應,甚至部分段落直接沿用原文,那么被合並、或者只保留一個版本,是常见结果。判断方法很朴素:把两個版本的正文各取一段,去掉導航和頁脚,看信息是否等價。如果只是词對词的翻译,谈不上差异化。

抓取與收錄狀態要分開看

某個語言版本没有出現在搜尋结果里,可能是三種情况:没被抓取、抓取了没進索引、進了索引但目前查询不展示。核對方式是對每個版本單獨查狀態,而不是只看主版本。常见誤区是主版本收錄良好,就預設其他版本也正常,结果等到流量明顯偏向一侧才發現問题。

一份可以照着走的自查清單

  • 每個語言版本的 URL 都能直接打開,返回 200,不经過多級跳轉。
  • hreflang 双向回指完整,語言代碼正确,包含 x-default。
  • canonical 指向自身,不横向指向其他語言版本。
  • 各版本在 sitemap 中都有條目,並标注對應的語言關系。
  • 站内導航或語言切換器提供真實可抓取的連結,而不是纯 JS 下拉。
  • 舊的語言地址如果不再使用,做 301 指向對應的新版本,而不是直接 404。

處理完之後不要期待立刻變化。語言版本的归並和替換通常需要几轮抓取周期,期間保持 URL 稳定、不要再频繁調整 hreflang 指向,否則等于每次都在重置判断依據。