搜索抓取

Sitemap 索引与分段:大站怎么分批把 URL 交给蜘蛛

当站点 URL 数量变多,单个 Sitemap 往往不够用。本文说明 Sitemap 索引文件的作用、分段思路、常见限制,以及如何与内链和抓取日志配合,让蜘蛛更顺畅地发现有效页面。

搜索抓取

Sitemap 索引与分段:大站怎么分批把 URL 交给蜘蛛

为什么要把 Sitemap 拆开

单个 Sitemap 文件能放多少 URL,协议里有上限。多数搜索引擎对单个文件的数量和体积都有限制,超过之后可能只读取前面一部分,后面的 URL 就不一定进入抓取队列。对大站来说,最稳妥的做法不是把所有链接塞进一个文件,而是用 Sitemap 索引文件把多个子 Sitemap 组织起来,让蜘蛛按文件分批读取。

索引文件本身不包含页面 URL,只列出子 Sitemap 的地址和可选更新时间。它像一个目录,告诉蜘蛛“这个站点的 URL 分成了哪几批,分别在哪里”。这样做的好处是,某一批更新时,只需要让对应子 Sitemap 变化,不必让整个站点地图都重新抓取。

分段时按什么维度拆

分段没有唯一标准,但最好让每个文件内部有相对一致的逻辑,方便后续观察和维护。

  • 按内容类型:文章、商品、分类、标签页分开。不同类型页面的更新频率和抓取价值不同,分开后更容易判断哪一批被读取。
  • 按目录或频道:适合内容量大、目录结构清晰的站点。比如 /news/、/product/、/help/ 各自一个文件。
  • 按更新时间:把近期更新的 URL 放在一个文件里,历史内容放在另一个文件。这样蜘蛛优先读取活跃文件时,能更快看到新内容。
  • 按语言或地区:多语言站点可以按语言拆分,减少无关 URL 混在一起。

拆得太碎也不见得好。文件数量过多,索引文件会变长,蜘蛛需要额外跳转获取。通常先按主要类型或目录分成几十个以内,再根据抓取日志调整。

URL 放进 Sitemap 之前要确认的事

Sitemap 只负责“告知”,不保证一定被抓取。放进去的 URL 如果本身有问题,反而会浪费蜘蛛的读取次数。

  1. URL 必须返回正常状态码。把 404、410、需要登录、跳转到其他地址的 URL 放进去,意义不大。
  2. 尽量使用规范地址。带跟踪参数、大小写不一致、重复路径的 URL,最好先收敛到 canonical 地址。
  3. 只放可索引页面。列表页的筛选结果、站内搜索结果、用户个人页,如果不希望被索引,不要写进 Sitemap。
  4. 不要依赖 Sitemap 替代内链。Sitemap 是补充入口,内链才是蜘蛛持续发现页面的主要路径。

索引文件怎么写,放在哪里

索引文件通常放在站点根目录,命名常见为 sitemap_index.xml,也可以在 robots.txt 中声明。子 Sitemap 的地址建议使用绝对 URL,并保持稳定;如果地址频繁变化,蜘蛛需要重新识别入口。

如果站点有多个域名或子域,可以在索引文件中统一列出,但要注意每个子 Sitemap 内的 URL 必须属于同一个主机名,不要把多个域名的 URL 混在一个文件里。

索引文件不是越大越好。它的作用是让蜘蛛找到子文件,而不是代替子文件承载 URL 列表。

和抓取路径、日志配合观察

提交之后,不要只看“是否成功提交”。更实际的做法是翻服务器日志,看蜘蛛有没有请求 Sitemap 索引、请求了哪些子文件、请求后是否继续抓取里面的 URL。

  • 如果索引被读取,但子文件很少被请求,可能是索引中文件太多,或者子文件地址不可访问。
  • 如果子文件被读取,但其中 URL 没被抓取,检查这些 URL 是否被 robots.txt 拦截、是否有 noindex、是否返回异常状态。
  • 如果某批 URL 长期不被读取,可以调整分段,把更重要的内容单独放一个文件,并确保该文件在索引中靠前出现。

另外,服务器稳定性会影响 Sitemap 的读取。如果子文件在高峰期频繁超时,蜘蛛可能降低读取频率。把 Sitemap 文件做成静态资源,或者放在不容易被动态逻辑拖慢的位置,会更容易保持稳定。

一个可执行的检查顺序

  1. 确认单个 Sitemap 文件没有超过数量和体积上限。
  2. 按内容类型或目录分成若干子文件,并生成索引文件。
  3. 清理其中的非规范 URL、死链和不可索引页面。
  4. 在 robots.txt 或搜索资源平台提交索引文件地址。
  5. 观察日志:索引是否被读、子文件是否被读、URL 是否被继续抓取。
  6. 根据抓取结果调整分段,不要频繁改动文件地址。

Sitemap 索引与分段不是一次配置就结束的事。它更像给蜘蛛画了一张分批读取的地图:地图清楚,蜘蛛少走弯路;地图混乱,提交了也未必有好的抓取表现。把结构、状态码和内链一起看,才能判断问题出在哪一层。