搜索抓取

站点地图分片与索引文件:大批量 URL 投递的实操细节

单个站点地图文件有条数与体积上限,大批量 URL 需要靠索引文件拆成分片投递。本文说明分片该按什么维度切、索引文件承担什么角色,以及分片内 URL 状态、文件访问稳定性和 lastmod 更新上容易踩的坑。

搜索抓取

站点地图分片与索引文件:大批量 URL 投递的实操细节

为什么要把站点地图拆开

站点地图不是越大越好。单个 sitemap 文件有硬性上限:最多 5 万条 URL,未压缩体积不超过 50MB。超过之后,文件会被截断或直接判定无效,后半部分的 URL 相当于白写。分片加索引文件,本质上是把一次投递改成分批投递。

索引文件承担什么角色

sitemap index 本身不列具体 URL,只列出各个子 sitemap 的地址。搜索蜘蛛先读索引,再按需进入分片。因此索引文件要保持轻量、路径稳定,不要频繁改文件名或换目录,否则每次变动都等于重新介绍一遍自己。

分片怎么切比较合理

  • 按内容类型切:文章、商品、标签页各自成片,便于单独观察抓取情况。
  • 按更新时间切:新内容单独一片,老内容归档到另一片,避免每次更新都动整个大文件。
  • 按语言或地区切:多语言站点各片独立,减少互相干扰。
  • 单个分片留出余量:不要顶到 5 万条上限,控制在两万到三万条,后续增删更灵活。

几个容易被忽略的细节

  1. 分片里的 URL 要返回 200,页面本身不能是 noindex,否则等于把地址送到门口又被挡回去。
  2. 不要放重定向地址,sitemap 里应该是最终地址。
  3. 文件访问要稳定:sitemap 自己返回 500、超时或走多次跳转,都可能让这一批 URL 卡在发现阶段。
  4. lastmod 只在内容真正变化时更新,批量刷时间戳会让该字段的可信度下降。
  5. 在 robots.txt 里声明索引文件地址,比分散声明多个分片更清晰。

分片与内链是两套系统

sitemap 解决的是地址被知道,内链解决的是地址被走通、被抓取路径覆盖到。只靠分片投递、页面之间没有链接的 URL,通常发现得慢、抓得也浅。比较稳的做法是:分片保覆盖率,内链保优先级。

怎么确认分片真的被读了

不要只看提交成功。对照服务器日志,看搜索蜘蛛是否访问了索引文件、访问了哪些分片、哪些分片里的 URL 迟迟没有请求记录。差异明显的分片,往往是文件过大、更新过频,或者返回状态不稳定。

分片不是为了让提交数字好看,而是让每一批 URL 都有被稳定发现的机会。

节奏比数量更重要

结构简单、更新频率稳定、每片体量适中,通常比一次性塞进几百万条 URL 更有效。分片文件本身也是页面,它既要被读到,也要被稳定地读到。