Sitemap 用得久了,URL 數量迟早會超過單個文件能承载的范围。這时真正决定蜘蛛能不能稳定拿到清單的,不再是「有没有提交 Sitemap」,而是索引文件和分片组织得是否清楚。
為什么單個 Sitemap 迟早要拆
主流搜尋引擎對單個 Sitemap 文件有明确上限:條目數不超過 5 萬條,未压缩体积不超過 50MB。只要站点在持續增長,這两條线都會碰到。除了硬限制,拆分的實际意义還在于:
- 不同栏目更新频率差別很大,全站挤在一個文件里,每次都要重新生成、重新讀取;
- 單個文件過大时,抓取和传輸本身就會變慢,出错概率随之上升;
- 某一類内容出了問题,只需排查對應分片,不必全站返工。
拆分之後,需要一個 Sitemap 索引文件把各個分片串起来:蜘蛛先讀索引,再按索引里的地址逐個取分片。
索引文件與分片的寫法要点
索引文件只放分片地址
索引文件使用 sitemapindex 结构,每一項是 sitemap 标簽,包含 loc 和可選的 lastmod,指向一個分片文件。常见错誤是把 url 标簽直接寫進索引文件,或者把 sitemapindex 與 urlset 混在同一個文件里,這會让解析直接失敗。
分片文件仍然是普通 Sitemap
每個分片本身是一個完整的 urlset,里面每一條 URL 才是真正要给蜘蛛的地址。分片地址應当是固定、能直接返回 200 的地址,不要带會變化的查询參數,也不要经過重定向。
lastmod 各管一段
分片里的 lastmod 描述的是某條 URL 的更新時間,索引文件里的 lastmod 描述的是這份分片清單本身的更新時間,两者含义不同。不要為了「看起来更新」每次都把全量時間改掉,時間戳長期不准,蜘蛛會逐渐降低對它的信任。
分片按什么维度切更實用
切分维度没有唯一答案,關键是让每一片内部的更新节奏相對一致,既方便维護,也方便蜘蛛按需取用:
- 按内容類型:文章、商品、分類、标簽各成一片,出错时影响面可控;
- 按更新時間:新增或近期改動的 URL 單獨成片,便于重点传递;
- 按語言或地区:多語言站点按目錄切,避免互相干扰;
- 按數量均分:纯按 ID 或時間分段,适合超大規模站点,但每片數量別太悬殊。
單個分片控制在 1 萬到 3 萬條比較稳妥。數量太少會制造大量小文件請求,顶到上限則每次改動都要重寫整個文件。
和 robots.txt、内鏈怎么配合
robots.txt 里用 Sitemap 指令指向索引文件即可,不必把每個分片都列出来,索引文件本身會把分片串起来。同时要记住,Sitemap 是补充手段,不是内鏈的替代品。一個寫在 Sitemap 里、站内却没有任何入口的 URL,往往只能被零星抓取,很难形成稳定的抓取路径。清單和入口两條路都通,URL 才會被持續關注。
上线前的一份自查清單
- 索引文件能被直接訪問,返回 200,Content-Type 為 XML 或纯文本;
- 分片地址未被 robots.txt 屏蔽,也不依赖登入或 Cookie;
- 索引文件里只有 sitemap 标簽,分片里只有 url 标簽;
- 所有 loc 使用完整绝對地址,且與實际可訪問地址完全一致;
- 啟用压缩传輸时,確認服務端正确返回 gzip 编碼,避免解压失敗;
- 抽查若干分片,確認其中 URL 确實返回 200,而不是 404 或跳轉。
索引和分片解决的是「清單怎么交」的問题;抓取顺序和频率,仍然由站点质量、内鏈结构和服務器响應决定。
把 URL 清單拆成结构清晰、各自獨立更新的分片,並保持長期稳定,蜘蛛取用清單的成本會明顯下降。剩下的功夫,還是要花在頁面本身和内鏈上。