什么时候该把 Sitemap 拆開
單個 Sitemap 文件有容量上限,常见约束是 5 萬條 URL 和 50MB(未压缩)這两條线,任一條先到就要考虑拆。實际動手的时机往往比這個更早:当站点已经有几萬條需要被蜘蛛發現的地址,或者不同栏目之間的更新节奏差异很大时,把所有 URL 塞進一個文件里,每次有新内容就得重寫整份清單。蜘蛛每次拉到的都是一份几乎全新的文件,反而不好判断哪一段才是新出現的部分。
拆分的本质,是给蜘蛛一份分段清單,让它按需抓取其中一段,而不是每次全量拉取。
几種常见的分片维度
- 按栏目:商品、文章、問答、标簽頁各一個文件,栏目更新频率不同,互不干扰。
- 按時間:按月或按季度切片,老文件基本冻结,新文件滚動生成。
- 按語言或地区:多語言站点按語言目錄拆,可以配合 hreflang 一起维護。
- 按頁面類型:詳情頁、列表頁、聚合頁分開,方便單獨排查某一類 URL 的發現情况。
维度不必贪多,選一到两個稳定不變的切法即可。切分维度频繁變化,等于每次都在给蜘蛛換一套清單结构。
索引文件的寫法要点
- 索引文件里只放 Sitemap 的地址,不要再混入普通頁面 URL。
- 索引文件一般不再嵌套索引,一层就够用。
- 每個子 Sitemap 的地址都必须是能正常打開、返回 200 的地址。
- 子文件里的 lastmod 尽量反映真實更新時間,不要全站统一寫同一时刻。
- 索引自身的 lastmod 也值得维護,新增分片时更新它才更有參考價值。
容易踩的几個坑
- 空文件:文件存在但没有任何 URL,或者内容被模板填充成占位符。
- 幽灵地址:清單里包含已经 404、301 到別處,或者被 robots.txt 屏蔽的 URL。
- 不做压缩:几萬條 URL 的纯文本体积不小,支持 gzip 时压缩一下能省下带宽和抓取耗时。
- 域名寫错:尤其是 www 與非 www、http 與 https 混用时,子文件里的地址容易對不上。
- 參數地址全量寫入:篩選、排序生成的地址一股脑塞進清單,文件迅速膨胀,真正重要的頁面反而被淹没。
提交與更新节奏
索引文件建好後,一般在 robots.txt 里声明地址,再在站長平台提交一次即可,不需要每天重复提交。子分片的更新可以跟着内容實际产出的节奏走:日更栏目每天重建對應分片,老分片保持不動。频繁重寫而内容没變,會让 lastmod 這個信号慢慢失去參考價值。
清單只是告诉蜘蛛這里有一批地址,它不保證被抓取,更不保證被收錄。發現和抓取之間,還隔着優先級判断。
Sitemap 與内鏈的分工
Sitemap 解决的是存在性,内鏈解决的是可達性。一個 URL 只出現在清單里、站内没有任何連結指向它,蜘蛛即便從清單里看到它,也缺少再次訪問和评估上下文的理由。反過来,内鏈结构清晰但 URL 數量极大时,Sitemap 能补上清單式的覆盖。
比較稳妥的组合是:重要栏目和詳情頁靠内鏈保證可達,Sitemap 负责补齐數量庞大、位置較深的那部分地址,两邊指向的 URL 集合尽量一致。如果差异長期存在,先查清是哪一邊漏了,而不是直接删掉一邊。
一份自查清單
- 單個文件是否還在 5 萬條、50MB 的邊界内。
- 索引文件里是否只包含 Sitemap 地址。
- 每個子文件是否能直接打開並返回 200。
- 清單里的 URL 是否都是可索引的規范地址。
- lastmod 是否反映真實更新時間。
- Sitemap 里的 URL 集合與内鏈可達的 URL 集合差多少。