多語言或地区化站点常有几套入口:子目錄 /en/、/zh/,子域名 en.example.com,或者带語言參數的同一路径。這些入口在视觉上各自成立,但在蜘蛛看来,如果彼此之間没有清晰的關系說明,就容易被当作互不相關的站点分別抓取。结果是同一份内容被多次發現、多次回訪,抓取预算被摊薄,新頁面被發現的节奏也随之變慢。
入口分散通常表現在哪里
- 日誌里同一篇内容出現多组路径前缀,抓取時間错開但频率接近;
- 某個語言版本的内鏈只指向自己這一套路径,跨語言入口靠外鏈或跳轉维持;
- Sitemap 按語言拆成多份,但每份之間没有相互引用,也没有列出對應關系;
- 頁面上的語言切換使用 JavaScript 或 302 跳轉,蜘蛛不一定能顺着走完。
這些現象單獨看都不算错誤,合在一起就會让入口识別變得模糊。
排查顺序:從確認對應關系開始
- 先確認每個 URL 是否有唯一的主版本。 如果同一内容在多個路径下都能完整訪問,需要决定哪一個是主要入口,哪一些是给用戶看的語言版本。
- 核對 hreflang 标注是否双向且完整。 A 頁面指向 B,B 頁面也應当指回 A,指向自身的 x-default 不要遗漏。單向标注等于没有标注。
- 检查 canonical 與 hreflang 是否互相矛盾。 如果 hreflang 声明了多個語言版本,canonical 又把它們全部指向同一個 URL,說明信息本身就冲突。
- 抽查日誌中這些 URL 的抓取频次。 观察是否出現同一内容多入口並行抓取的情况,以及哪種路径被抓得最多。
- 检查語言切換連結的實現方式。 用可以直接抓取的 a 标簽,比依赖脚本或跳轉更稳定。
内鏈與導航的引導方式
語言版本之間的互鏈應当落在正文之外的稳定位置:頁头語言切換、頁脚站点地图、栏目的語言列表。這几個位置的連結通常是全站模板,蜘蛛顺着任意一個頁面都能走到其他語言入口。
需要注意的是,不要把語言切換做成“目前頁 + 後缀”的临时拼接。若某些頁面在某個語言下並不存在,拼接出来的地址會直接落到 404 或软 404,反而制造出無效入口。較稳妥的做法是维護一份語言與 URL 的對應表,切換时按表取地址。
Sitemap 與 URL 發現
多語言站点的 Sitemap 可以有两種處理:合並成一份,用 hreflang 标注在每條 URL 上;或者按語言拆分,每份 Sitemap 内部同样带标注。两種方式都可以,關键是別让同一批 URL 在多份 Sitemap 里重复出現且标注不一致。
另外,Sitemap 只列語言主入口,不列带參數的排序頁、篩選頁。參數入口交给内鏈自然發現即可,不必全部塞進 Sitemap,否則會让入口集合變得臃肿。
收敛後值得观察的指标
- 同一内容的多路径抓取次數是否下降,主入口的回訪是否變得更規律;
- 新頁面在主要語言入口下的首次發現時間是否趋于稳定;
- 日誌里 404、301 的比例是否下降,尤其是語言切換产生的跳轉;
- Sitemap 中 URL 數量與日誌中實际被抓取的 URL 數量是否接近。
入口收敛是一個逐步調整的過程。改動後不要急着下结论,给蜘蛛一到两個抓取周期去反映變化,再對比日誌中的路径分布。
如果站点同时使用蜘蛛池或其他外部入口做牵引,注意外部入口尽量直接指向語言主入口,而不是指向带參數的中間頁或跳轉頁。入口越干净,路径判断越简單。