Sitemap 是给搜尋蜘蛛的 URL 清單,但站点規模一大,單個 Sitemap 很快就装不下:常见的上限是單個文件 5 萬條 URL、未压缩体积 50MB。超過之後,繼續硬塞只會让文件失效或讀取困难。這时候需要用 Sitemap 索引文件(sitemap index)把多個分片组织起来。
索引文件解决的是“清單的清單”
索引文件本身不列 URL,只列分片地址。它让搜尋蜘蛛知道:這個站点有哪些 Sitemap、分別在哪里、大概什么时候更新過。對几十萬、上百萬 URL 的站点来说,索引文件是必要的入口,否則蜘蛛只能逐层爬内鏈,發現效率會明顯下降。
索引文件同样有上限:一般最多 5 萬個分片、未压缩 50MB。對绝大多數站点来说够用,但如果分片切得過碎,索引文件會變得非常長,反而增加解析成本。
分片可以按什么维度切
- 按内容類型:文章、商品、标簽頁、专题頁各自一個分片。這样哪類頁面出問题,排查范围更清楚。
- 按更新時間:把最近更新的 URL 單獨放一個分片,方便蜘蛛優先讀取變化部分。但不要為了“看起来新”而频繁改组,改動本身也會带来维護成本。
- 按目錄或語言:多語言站点可以按語言分片,便于分別提交和观察。
分片维度没有标准答案,關键是稳定。今天按目錄切,明天按類型切,會让蜘蛛反复重新理解清單结构。
分片里不该出現什么
- 已经返回 404 或 410 的 URL,繼續放在清單里只會制造無效抓取。
- 被 robots.txt 屏蔽、或者頁面带 noindex 的 URL。它們不能出現在索引里,放進清單意义不大。
- 需要登入、需要特定 Cookie 才能看到内容的 URL。
- 大量參數化篩選頁、排序頁。除非這些頁面确實有獨立内容,否則應收敛。
- 重定向到別處的舊地址。清單里最好直接寫最终地址。
索引文件本身的几個细节
索引文件里的 loc 必须是分片的完整地址,不能寫相對路径。分片可以放在同一域名下,也可以放在允许的目錄中,但跨域放置需要谨慎,權限驗證失敗會让整份清單失效。
如果分片内容经常變化,lastmod 可以寫,但不要随手寫目前時間。時間戳失去參考價值之後,蜘蛛會逐渐降低對這份清單的信任。分片不更新时,索引文件也不需要每次重新生成。
用日誌和内鏈驗證清單是否真的在用
Sitemap 只是入口之一。要判断分片是否有效,可以對照服務器日誌:分片里的 URL 有没有被訪問、訪問频次怎样、是集中在少數 URL 還是均匀分布。如果某個分片几乎没人来抓,可能是索引文件没被讀取,也可能是分片本身寫得有問题。
同时看内鏈。Sitemap 里的 URL 如果站内完全没有入口,蜘蛛即使抓到一次,後續也很难通過爬行再次發現。Sitemap 和内鏈應该是互补關系,而不是互相替代。
常见誤区
把 Sitemap 当成“提交收錄”的按钮,是很多問题的起点。它不能保證收錄,只能帮助發現。真正决定 URL 是否值得抓取的,還是頁面本身的质量、可訪問性和站内结构。
另一個誤区是分片越细越好。分片過细會让索引文件膨胀,维護成本上升;分片過大則容易触及單文件上限。通常按内容模块和更新频率切成几十到几百個分片,就已经能覆盖大多數站点的需求。
最後,Sitemap 需要和站点實际狀態保持同步。刪除頁面、改版、迁移域名之後,舊分片如果長期不清理,蜘蛛會持續在無效 URL 上消耗抓取预算。定期核對清單,比频繁重新提交更重要。