搜尋抓取

Sitemap 分片與索引文件:大型站点怎么把 URL 清單讲清楚

当站点 URL 數量到几萬甚至更多时,單個 Sitemap 很快就撑不住了。本文從分片维度、索引文件寫法、分片里不该出現的 URL,以及如何用日誌核對清單有效性几個方面,說明大型站点如何组织 Sitemap,让搜尋蜘蛛更顺畅地發現 URL。

搜尋抓取

Sitemap 分片與索引文件:大型站点怎么把 URL 清單讲清楚

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 上消耗抓取预算。定期核對清單,比频繁重新提交更重要。