搜索抓取

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