URL 數量上到几萬條之後,單個 Sitemap 文件通常就不够用了,需要用一個索引文件把多個分片串起来。拆文件本身不难,麻烦的是拆分依據、命名方式和後續核對——分片一旦混乱,日誌里就看不出蜘蛛究竟讀到了哪一部分。
先確認上限,再决定要不要拆
- 單個 Sitemap 在未压缩狀態下不超過 50MB,URL 條數不超過 50,000。
- 索引文件同样不超過 50,000 個分片、50MB;压缩後的大小不計入這個上限,但解压後仍需合規。
- 超過上限就要拆分,並用一個索引文件列出所有分片。分片單獨提交也可以,但索引更利于统一管理。
按什么维度拆分更實用
常见有三種拆法,各有适用场景:
- 按内容類型:文章、商品、标簽頁、作者頁各成一组。好處是不同模板的抓取情况可以分開看,出問题时能直接定位到具体類型。
- 按更新時間:近期更新的 URL 放一片,歷史内容放另一片。适合更新频繁的站点,便于高频回讀新片。
- 按語言或分站:多語言、多域名站点按站点维度拆,避免不同站点的抓取資料混在一起。
實际操作中,先按内容類型拆,再在類型内部按体量分序号,是比較省事也容易维護的做法。
索引文件里放什么
索引文件只承担目錄职责,每個條目指向一個分片文件的绝對地址,可以附带该分片的最後修改時間;分片文件里才寫具体頁面 URL。索引不要再嵌套索引,层級過深只會增加回讀成本。索引一般放在站点根目錄,方便在 robots.txt 中声明。
索引文件是目錄,分片文件才是清單。把頁面 URL 直接寫進索引是常见错誤,蜘蛛讀到一份没有可抓頁面的目錄,只會白白多一次回讀。
命名要能一眼看懂
分片命名建议带上類型和序号,例如 sitemap-article-001.xml 這样的形式,不要用随机哈希值,也尽量不要在分片路径上带查询參數。命名規整的好處在于:日誌里出現某個分片路径时,你立刻知道它對應哪類 URL,核對覆盖率时可以直接按分片分组統計,而不必一條條比對。
分片與抓取路径不是一回事
Sitemap 只是清單,蜘蛛讀完清單仍要逐個抓取頁面。分片里塞進大量内鏈找不到的 URL,确實能提高被發現的速度,但收錄與否仍取决于服務器响應、頁面质量與重复程度。把 Sitemap 当成内鏈的替代品,往往只會得到一批「已發現未抓取」的记錄。
日常核對清單
- 在日誌中篩選 Sitemap 路径,確認蜘蛛是否定期回讀索引與各分片,而不是只讀一次就再也不来。
- 統計每個分片的實际輸出條數與预期條數是否一致,模板循环漏掉最後一條的情况並不少见。
- 抽查分片内 URL 的响應狀態與 canonical 指向,確認没有混入 404、重定向或 noindex 地址。
- 頁面下线後同步從分片移除,避免同一批死鏈被反复提交。
- 观察索引文件的最後回讀時間,長期不更新时先排查 robots.txt 與服務器响應,再考虑重新提交。
容易被忽略的几個坑
- 分片内容更新了,lastmod 却没變,抓取端可能按缓存判断為無需重讀。
- 压缩分片没有正确声明内容類型,導致解压失敗。
- 索引與分片使用了不同的域名形態,http 與 https、带 www 與不带 www 混用。
- 分片數量只增不减,舊片長期留存,清單越来越难维護。
小结
Sitemap 分片是一種清單结构,不是收錄手段。把上限規則、拆分维度、命名约定和核對清單固定下来,URL 發現的過程才可控;剩下的,仍然交给内鏈、响應速度和内容本身。