做多語言或面向多地区的站点时,收錄問题往往不是「頁面没被爬」,而是「同一份内容在索引里出現了好几個語言版本,信号和展示都對不上」。這類問题的根源多半在 URL 结构和信号冲突上,先把這两件事理清,比反复提交 sitemap 更有效。
先确定語言版本用什么 URL 结构
常见的三種做法:子目錄(example.com/en/)、子域名(en.example.com)、獨立域名(example.de)。它們對收錄的影响主要在两点:一是信号繼承,子目錄通常能沿用主域已有的歷史积累和抓取习惯;二是统一管理,語言數量多时,子目錄更容易把 sitemap、内鏈和模板收敛到一套体系里。
語言版本尽量不要用參數(如 ?lang=en)承载,也不要只靠 cookie 记住語言偏好。參數版本容易被当成同一頁面的多個副本,而 cookie 版本對爬虫来说不可见——它每次抓到的都是預設語言那一版。
hreflang 是提示,不负责解决重复
hreflang 的作用是告诉搜尋引擎「這几個頁面是同一内容的語言或地区版本,請把對應版本给對應的用戶」。它不是用来防止重复收錄的工具。如果两個語言版本的正文几乎一样,即使 hreflang 寫對了,索引里也可能只保留其中一個,或者两個都留着但互相抢词。
常见寫法错誤:單向标注(A 指向 B,B 不指回 A);指向了已重定向或不可抓取的 URL;語言代碼與地区代碼用错。這些不會立刻让頁面掉出索引,但會让信号互相矛盾,之後的處理成本比一開始就寫對要高。
自動跳轉和語言切換器的坑
按浏览器語言自動 302 或用 JS 跳轉,是多語言站点最容易踩的一個坑。爬虫通常不带普通用戶的語言偏好,它抓到的可能是跳轉後的預設語言版本,于是目标語言頁面長期停在「已發現,尚未编入索引」的狀態。
- 優先用可点击的顯式連結做語言切換,而不是自動跳轉;
- 如果一定要自動跳轉,至少保證每個語言版本都有一個固定、可直達的 URL,並且站内連結指向它;
- 語言切換器里的連結要是真的 a 标簽,不要用 JS 事件或表單提交来模拟導航。
内容重合度高时,索引會自己收敛
如果几個語言版本只是机器翻译,正文结构完全一致,连产品參數和常见問题都一模一样,搜尋引擎很难判断哪一版更值得保留。常见结果是:主語言版本被收錄,其余版本要么不進索引,要么過一段時間消失。
想改善,重点不在技術标注,而在内容本身的差异化:本地化的标题和描述、地区特定的價格與單位、面向当地用戶的联系方式和案例說明。哪怕只有這些部分不同,頁面被当成獨立文档處理的可能性也會高一些。
排查顺序
- 從抓取日誌里挑一個目标語言頁面,確認爬虫實际抓到的是不是這一版,返回 200 還是跳轉;
- 检查该頁面的 canonical 是否指向自己,而不是指向主語言版本——多語言站点誤用 canonical 的情况很常见;
- 核對 hreflang 是否双向、每组是否自指、指向的 URL 能否直接訪問;
- 確認 sitemap 包含所有語言版本,各語言版本的 sitemap 不互相混入;
- 看各語言版本的收錄比例,找出長期為零的那几组,優先處理。
多語言收錄問题的本质不是「怎么让蜘蛛多来」,而是「让蜘蛛清楚哪個 URL 對應哪個語言、哪個是主版本」。信号一致比數量堆叠更重要。
最後提醒一点:語言版本越多,可用的抓取资源越會被摊薄。與其一次上线十几種語言的空壳頁面,不如先把两三個真正有本地化内容的版本做扎實,收錄狀態和索引质量通常更可控。