搜尋抓取

Sitemap 索引與分片:大站 URL 清單的拆分、命名與核對

当站点 URL 上到几萬條,單個 Sitemap 往往放不下。本文讲清分片的數量與体积上限、按類型或時間拆分的思路、索引文件的寫法與命名约定,並给出一份可执行的核對清單,帮你在抓取日誌里看清蜘蛛讀到了哪一片、漏掉了哪一類。

搜尋抓取

Sitemap 索引與分片:大站 URL 清單的拆分、命名與核對

URL 數量上到几萬條之後,單個 Sitemap 文件通常就不够用了,需要用一個索引文件把多個分片串起来。拆文件本身不难,麻烦的是拆分依據、命名方式和後續核對——分片一旦混乱,日誌里就看不出蜘蛛究竟讀到了哪一部分。

先確認上限,再决定要不要拆

  • 單個 Sitemap 在未压缩狀態下不超過 50MB,URL 條數不超過 50,000。
  • 索引文件同样不超過 50,000 個分片、50MB;压缩後的大小不計入這個上限,但解压後仍需合規。
  • 超過上限就要拆分,並用一個索引文件列出所有分片。分片單獨提交也可以,但索引更利于统一管理。

按什么维度拆分更實用

常见有三種拆法,各有适用场景:

  • 按内容類型:文章、商品、标簽頁、作者頁各成一组。好處是不同模板的抓取情况可以分開看,出問题时能直接定位到具体類型。
  • 按更新時間:近期更新的 URL 放一片,歷史内容放另一片。适合更新频繁的站点,便于高频回讀新片。
  • 按語言或分站:多語言、多域名站点按站点维度拆,避免不同站点的抓取資料混在一起。

實际操作中,先按内容類型拆,再在類型内部按体量分序号,是比較省事也容易维護的做法。

索引文件里放什么

索引文件只承担目錄职责,每個條目指向一個分片文件的绝對地址,可以附带该分片的最後修改時間;分片文件里才寫具体頁面 URL。索引不要再嵌套索引,层級過深只會增加回讀成本。索引一般放在站点根目錄,方便在 robots.txt 中声明。

索引文件是目錄,分片文件才是清單。把頁面 URL 直接寫進索引是常见错誤,蜘蛛讀到一份没有可抓頁面的目錄,只會白白多一次回讀。

命名要能一眼看懂

分片命名建议带上類型和序号,例如 sitemap-article-001.xml 這样的形式,不要用随机哈希值,也尽量不要在分片路径上带查询參數。命名規整的好處在于:日誌里出現某個分片路径时,你立刻知道它對應哪類 URL,核對覆盖率时可以直接按分片分组統計,而不必一條條比對。

分片與抓取路径不是一回事

Sitemap 只是清單,蜘蛛讀完清單仍要逐個抓取頁面。分片里塞進大量内鏈找不到的 URL,确實能提高被發現的速度,但收錄與否仍取决于服務器响應、頁面质量與重复程度。把 Sitemap 当成内鏈的替代品,往往只會得到一批「已發現未抓取」的记錄。

日常核對清單

  1. 在日誌中篩選 Sitemap 路径,確認蜘蛛是否定期回讀索引與各分片,而不是只讀一次就再也不来。
  2. 統計每個分片的實际輸出條數與预期條數是否一致,模板循环漏掉最後一條的情况並不少见。
  3. 抽查分片内 URL 的响應狀態與 canonical 指向,確認没有混入 404、重定向或 noindex 地址。
  4. 頁面下线後同步從分片移除,避免同一批死鏈被反复提交。
  5. 观察索引文件的最後回讀時間,長期不更新时先排查 robots.txt 與服務器响應,再考虑重新提交。

容易被忽略的几個坑

  • 分片内容更新了,lastmod 却没變,抓取端可能按缓存判断為無需重讀。
  • 压缩分片没有正确声明内容類型,導致解压失敗。
  • 索引與分片使用了不同的域名形態,http 與 https、带 www 與不带 www 混用。
  • 分片數量只增不减,舊片長期留存,清單越来越难维護。

小结

Sitemap 分片是一種清單结构,不是收錄手段。把上限規則、拆分维度、命名约定和核對清單固定下来,URL 發現的過程才可控;剩下的,仍然交给内鏈、响應速度和内容本身。