做多語言或多地区站点时,常见的起点是這样的:主站跑得還行,于是顺手複製一套英文版、繁中版、日文版。頁面能打開,用戶也能切換語言,看起来没什么問题。但抓取日誌里往往是另一番景象——不同語言的頁面被反复抓取,抓取预算被摊薄,甚至某個語言版本長期進不了索引。
問题通常不在翻译质量,而在版本之間的關系没有讲清楚。蜘蛛看到的是几個内容高度相似、URL 结构又各自獨立的頁面,它只能自己判断谁是主、谁是副本,判断结果未必和你的预期一致。
先搞清楚蜘蛛面對的是哪種局面
在動手改之前,先確認你的多語言實現方式属于哪一類。不同的實現方式,後續需要补的信号完全不一样。
URL 结构决定了一半的問题
- 子目錄:example.com/en/、example.com/zh-hant/。结构集中,權重不易分散,多數情况是較好選擇。
- 子域名:en.example.com。适合服務器或运营团队分离的情况,但和主站的關系需要額外声明。
- 獨立域名:example.co.uk 這類 ccTLD,地区信号最强,维護成本也最高。
- 參數或 Cookie 切換語言:最难被稳定抓取。同一個 URL 返回不同語言内容,蜘蛛往往只记住其中一種。
hreflang 的三條硬規則
- 双向:A 頁指向 B 頁,B 頁必须指回 A 頁。單向声明基本等于没寫。
- 自引用:每個頁面也要把自己算進語言集合里,包括 x-default 頁面。
- 代碼規范:語言用 ISO 639-1,地区用 ISO 3166-1 Alpha 2,例如 zh-Hans、zh-Hant、en-US、pt-BR。只寫 zh 或 en,然後指望蜘蛛自己分辨简繁,通常不現實。
自動跳轉是最容易被忽略的坑
不少站点會根據 IP、浏览器語言或 UA 自動 302 到對應語言版本。對真實用戶這是体驗優化,對蜘蛛可能是灾难:它從某個地区 IP 抓取时被一路跳走,于是永遠看不到你希望它抓的那個頁面。
如果必须做自動跳轉,至少保證三点:不跳轉到與目前 URL 語言明顯冲突的版本;保留一個可被直接訪問、不做跳轉的入口頁;不要用 JavaScript 在渲染完成之後才跳。
canonical 與 Sitemap 要跟着一起改
語言版本不属于重复内容,所以通常不應该把英文頁的 canonical 指向中文頁。canonical 表達的是“這是同一份内容”,hreflang 表達的是“這是同一份内容的不同語言版本”,两者混用會让信号自相矛盾。
Sitemap 方面,可以每種語言各出一份,並在其中标注對應的 hreflang;也可以合並成一份,但要保證列出的 URL 都能正常訪問、不被跳轉。
一份可以照着走的自查顺序
- 列出所有語言與地区版本的實际 URL,確認每種只對應一套地址。
- 抽查三到五個頁面,检查 hreflang 是否双向、是否自引用、代碼是否規范。
- 用不同地区的 IP 或 UA 訪問同一個 URL,观察是否被静默跳轉。
- 核對 canonical,確認没有跨語言指向。
- 检查 Sitemap 與 robots.txt,是否放行了全部語言版本。
- 過一段時間再看抓取日誌,確認各語言版本的抓取比例是否合理。
几件不建议在語言版本上做的事
- 用同一個 URL 加參數切換語言,而參數並不真正影响頁面内容。
- 把机翻内容直接铺成几十個語言版本,正文几乎一致,只有語言不同。
- 語言版本上线後長期不更新,只留下一個空目錄。
- 借助蜘蛛池或其他方式强推某個語言版本的 URL,却没有對應内容與内鏈支撑。
多語言站点的核心不是“多”,而是關系清晰。让每個版本的 URL 唯一、声明完整、能被直接訪問,蜘蛛才有可能把正确的頁面分發给正确的用戶。把這些基础做完,再去分析抓取日誌和 URL 發現情况,才是有意义的優化。