搜尋抓取

Sitemap 分片與索引文件:URL 數量上来之後怎么交给蜘蛛

当站点 URL 從几千涨到几萬,單個 Sitemap 往往會碰到 5 萬條和 50MB 的上限。這时候需要拆成分片,再用索引文件把它們串起来。分片怎么切、索引怎么寫、lastmod 怎么给、哪些 URL 不该放進去,都會影响蜘蛛顺着這份清單走得多顺。

搜尋抓取

Sitemap 分片與索引文件:URL 數量上来之後怎么交给蜘蛛

站点小的时候,一個 Sitemap 就够了。等 URL 涨到几萬條,往往會撞上一個硬邊界:單個 Sitemap 文件最多 5 萬條 URL、未压缩体积不超過 50MB。超出的部分不會被讀取,于是多出来的頁面等于没交出去。這时候要做两件事:把 URL 拆成分片,再用索引文件把分片串起来。

分片和索引各管什么

分片文件(子 Sitemap)里放的是頁面 URL 本身,一條一條列。索引文件(sitemap index)里放的是分片文件的地址,不出現任何頁面 URL。蜘蛛先讀索引,再按索引里的地址逐個去讀分片。层級只有這两层,索引下面不能再套索引。

怎么切分片

  • 按目錄切:/product/、/article/、/tag/ 各一個文件,出错时容易定位。
  • 按内容類型切:文章、商品、問答各一份,更新频率不同,lastmod 也更好给。
  • 按更新時間切:新闻類站点可以按月或按周切,老内容分片基本不變。
  • 每片控制條數:不必都塞到 5 萬條。几千到一两萬條一片,讀取失敗时影响面更小。

拆分本身不影响抓取,但切得清楚,後面排查問题时省事。

索引文件里最容易寫错的几處

  • 把頁面 URL 混進索引。索引里只認分片地址,混入頁面地址等于白寫。
  • 协议或域名不统一。索引里寫 https,分片里寫 http,或者 www 與非 www 混用,蜘蛛會当成两套地址。
  • gzip 分片没标對。压缩後的文件一般以 .xml.gz 结尾,同时要让服務器正确返回该文件的類型,否則可能被当成下载内容。
  • 分片地址返回 404 或 301。索引指向的地址應当是可直接訪問的最终地址,不要让它再跳一次。
  • lastmod 全站同一個時間。所有分片都标同一個時間戳,參考價值會打折;分批给、和實际更新對齐更實在。

哪些 URL 不该出現在分片里

分片是一份希望被看到的清單,不是全站地址導出。以下几類放進去意义不大,還會稀释清單本身的信号:

  1. 返回 301/302 的舊地址,最终地址另有一份。
  2. 已经 404、410 的死鏈。
  3. 带 noindex 的頁面,或 robots.txt 里被拦住的路径。
  4. 大量參數组合、篩選结果頁,除非這些頁面确實需要被單獨抓取。
  5. 同一内容的不同 URL 變体,除非你能确定哪一個是規范版本。

分片之外,蜘蛛還得有路可走

提交分片只是把地址递過去,不等于蜘蛛會挨個訪問,也不等于頁面會被收錄。分片解决的是你知不知道這些 URL,内鏈解决的是這些 URL 在站内處于什么位置。一個頁面在分片里、在站内却没有任何入口,長期看仍然容易被冷落。

分片是清單,内鏈是路径。清單可以很長,路径必须真實存在。

交付之後怎么確認有没有被讀到

  • 在服務器日誌里筛分片文件的訪問记錄,看蜘蛛是否按索引顺序讀過。
  • 观察分片是否被频繁重复讀取;如果某個分片長期無人訪問,检查它是否還在索引里、地址是否可達。
  • 分片更新後不必立刻重寫全部文件,只改變動的部分,减少無意义的重复讀取。
  • 索引文件本身保持稳定地址,不要每次改動都換路径。

站点規模再大,Sitemap 也只是一條辅助發現路径。它的價值在于把散落的 URL 集中起来,让蜘蛛少走弯路;至于抓不抓、抓多少,仍然取决于站点结构、响應速度和内容更新节奏。分片做得規范,至少能让這份清單不被浪費。