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