站点还小的时候,一个 Sitemap 文件就能装下所有 URL。但当文章、商品或标签页累积到几万、几十万条时,继续把所有地址塞进同一个文件,蜘蛛读取和调度的效率都会下降。Sitemap 索引与分片,解决的就是“地址太多之后怎么让蜘蛛按顺序抓”的问题。
为什么需要 Sitemap 索引
Sitemap 协议本身对单个文件有体积和条数限制,超过之后蜘蛛可能只读取一部分,甚至直接忽略。索引文件不直接放页面 URL,而是指向多个子 Sitemap。这样蜘蛛可以先读取索引,再按分片逐个抓取,站点也能按栏目、内容类型或更新时间拆开管理。
索引文件适合放在站点根目录附近,并在 robots.txt 里声明。声明之后,蜘蛛会优先按索引结构去发现分片,而不是只依赖内链慢慢爬。
分片的基本规则
- 单个 Sitemap 文件建议控制在 5 万条 URL 以内,未压缩体积不超过 50MB。
- 分片文件本身也要有稳定的 URL,不要频繁改名或换目录。
- 索引文件只包含子 Sitemap 地址和可选更新时间,不要混入页面 URL。
- 如果使用 gzip 压缩,保持同一分片的压缩格式稳定,避免蜘蛛反复解压失败。
这些数字不是绝对红线,但越接近上限,蜘蛛处理单个文件的时间越长,出错概率也越高。留出余量比卡着上限更稳妥。
分片怎么组织更利于抓取
常见的分法有三种:按栏目、按内容类型、按更新时间。按栏目分片,适合频道结构清晰的站点;按内容类型分片,适合文章、商品、问答混排的站点;按更新时间分片,适合新闻或频繁更新的内容。
如果站点同时有重要页面和长尾页面,可以把重要栏目单独分片,把低频内容放在另一组分片。蜘蛛在抓取预算有限时,更容易先走到重要分片。但不要为了“看起来重要”而把大量普通页面塞进核心分片,否则分片本身会失去区分度。
与内链、robots 的配合
Sitemap 不是内链的替代品。蜘蛛仍然需要通过站内链接判断页面之间的关系和权重。分片里的 URL 如果在内链中完全没有入口,蜘蛛抓取之后也可能不知道它属于哪个栏目,回访频率会偏低。
robots.txt 中声明 Sitemap 索引地址即可,不要用 robots 规则去屏蔽分片文件本身。如果分片被屏蔽,蜘蛛可能连索引都读不到完整内容。另外,分片里的 URL 应与 canonical、内链指向的地址保持一致,避免同一页面在分片里出现多个版本。
常见错误
- 索引文件里写的是页面 URL,而不是子 Sitemap 地址。
- 分片更新后,索引里的更新时间没有同步变化。
- 把已下线、重定向或参数重复的 URL 继续留在分片里。
- 分片数量过多,每个文件只有几十条 URL,反而增加蜘蛛的调度负担。
- 只在提交时更新一次,之后长期不维护,导致分片内容与站点实际结构脱节。
分片的目标不是把地址藏起来,而是让蜘蛛用更少的请求、更清晰的顺序,找到当前最值得抓的页面。
监控与调整
分片上线后,可以通过蜘蛛日志观察几个信号:索引文件是否被频繁读取,各分片的抓取量是否差异过大,分片里的 URL 是否出现大量 404 或 301。如果某个分片长期没有抓取,先检查它是否在索引中可达,再检查分片内容是否与站点更新节奏匹配。
站点结构变化时,分片也要跟着调整。栏目合并、URL 规则变更、内容大批量下线,都应在分片和索引中同步反映。保持分片有序,本质上是在给蜘蛛一条可预测的抓取路径,而不是一次性提交任务。