搜尋抓取

Sitemap 索引與分片:清單太大时怎么组织才不拖累抓取

当站点 URL 規模上千,單個 Sitemap 會變得难以维護。本文說明 Sitemap 索引與分片的作用、拆分思路、常见错誤,以及如何和内鏈、robots 配合,让清單稳定可维護、便于蜘蛛持續發現和抓取。

搜尋抓取

Sitemap 索引與分片:清單太大时怎么组织才不拖累抓取

站点 URL 從几百涨到几萬之後,一個 Sitemap 文件往往就不好维護了:生成時間長、内容混杂、改一次要全量重出。這时候通常需要引入索引文件,把清單拆成多個分片分別管理。做得好不好,會直接影响蜘蛛對這些 URL 的發現效率。

單個 Sitemap 的硬性限制

按通行约定,單個 Sitemap 文件不超過 50000 個 URL,未压缩体积不超過 50MB。超出就需要拆分,並用一個索引文件把各分片串起来。

索引文件本身也是 XML,但它只列各分片的位置和最後更新時間,不直接列具体頁面 URL。蜘蛛讀到索引後,會按其中的地址逐個取分片,再解析里面的頁面連結。也就是说,分片多一层,就多一层被發現和被請求的机會,這层结构本身要尽量简單、稳定。

分片可以怎么切

按栏目或业務线

最常见也最好理解的做法:文章列表一個分片,商品一個分片,帮助中心一個分片。某個板块出問题或需要暫停提交时,單獨調整即可,不會牵连全站。

按内容類型

把頁面分成詳情頁、列表頁、标簽或聚合頁几類。聚合頁數量容易膨胀、质量參差不齐,單獨成片便于控制,也方便日後收紧或放開。

按更新時間

适用于更新频繁的站点:一個全量分片加若干增量分片,按時間段切分。這样每次只需要重新生成發生變動的部分,其他分片保持原样,维護成本低很多,也减少了因為重复生成引入错誤的概率。

  • 每個分片控制在几千到几萬條,不要紧贴 5 萬上限,留出余量
  • 分片文件名保持稳定,不要每次生成随机名,否則等于換了一批新地址
  • 所有分片地址必须可訪問,返回正常的成功狀態,不要中途跳轉到別處

索引文件最容易踩的坑

  • 索引里還寫着已经下线的分片,取回是 404 或 410,蜘蛛會反复来试
  • 生成了分片却忘了寫進索引文件,等于没有提交
  • 同一批 URL 同时出現在多個分片,造成重复發現和抓取浪費
  • 每個分片都把更新時間寫成当天,這個字段就失去了參考價值
Sitemap 是 URL 發現通道,不是收錄保證。它只是告诉蜘蛛這里存在一個地址,至于抓不抓、抓多少、什么时候抓,仍由蜘蛛自己判断。

和内鏈、robots 怎么配合

在 robots.txt 里声明 Sitemap 位置對部分蜘蛛有效,但更關键的是站内連結是否可達。一個只出現在清單里、站内没有任何連結指向的 URL,長期看被抓取的意愿偏低。清單應当是對已有内鏈结构的补充,而不是替代品。

分片文件建议開啟压缩,减少传輸体积。压缩後的分片同样能被正常解析,對带宽和抓取耗时的压力都更小。

分片太多带来的隐性成本

分片越多,需要维護的對象就越多,任何一個失效都會让一批 URL 長期停在未被發現的狀態。建议定期做一次對帳:抓取日誌里出現過哪些分片請求、返回什么狀態,索引文件里列了哪些分片,两邊的條目是否對得上。對不上的部分,往往就是長期没被處理的遗留問题。

一份可执行的检查清單

  1. 索引文件本身能正常訪問,XML 格式合法
  2. 每個分片都能打開,條目數量與预估規模相符
  3. 分片内的 URL 與頁面上的規范地址一致,不混入參數垃圾和已重定向的舊地址
  4. 更新時間取自頁面真實變動時間,而不是每次生成时的系統時間
  5. 日誌中能看到蜘蛛按索引依次訪問各分片,而不是只反复取索引文件

不必追求把全站 URL 一口气全部塞進清單。可维護、能持續更新、结构清晰,比單纯堆數量更有意义。清單稳定下来之後,URL 發現這件事才有可预期的节奏。