搜索抓取

Sitemap 分片与索引文件:大站交给蜘蛛的 URL 清单怎么组织

Sitemap 分片和索引文件是大站把 URL 清单交给搜索引擎的常见方式。本文说明单个文件的上限、分片的几种切法、lastmod 与 URL 写法的注意事项,以及如何从服务器日志判断分片有没有被顺利读取,并解释分片与内链各自的角色。

搜索抓取

Sitemap 分片与索引文件:大站交给蜘蛛的 URL 清单怎么组织

站点刚上线时,一个 Sitemap 文件就能放下所有 URL。等栏目、商品、文章累积到几万条,文件体积和单个文件上限就会成为问题。这时候通常会用 Sitemap 索引文件,把 URL 清单拆成若干分片,再交给搜索引擎。

为什么需要索引文件

主流搜索引擎对单个 Sitemap 有数量与体积的限制,常见是 5 万条 URL、50MB 未压缩。超过之后,文件可能被截断,或者只读取到一部分。索引文件本身只列分片地址,不列具体页面,这样可以把几万、几十万条 URL 分散到多个文件里。索引文件还可以嵌套,但层级越多,抓取时需要的跳转也越多。对大多数站点来说,一层索引加若干分片就够了。

分片怎么切更实用

切分方式没有唯一答案,但可以按站点实际的更新节奏来定:

  • 按栏目或内容类型:新闻、商品、帮助文档分开。某一类出问题时,影响范围可控。
  • 按更新时间:把最近更新的页面放在一个分片里,历史页面放另一个。蜘蛛回访时能优先看到变化。
  • 按 URL 状态:只放返回 200 且可被抓取的地址,重定向、noindex、参数页不要混进去。

分片数量不必追求整齐。关键是每个分片里的 URL 都能独立被抓取,不会因为一个文件太大而拖慢整体读取。

写分片时容易忽略的细节

  1. URL 用绝对地址,包含协议和域名,不要写相对路径。
  2. lastmod 尽量反映真实修改时间,不要每次生成都刷新成当天。
  3. 分片里的页面如果设置了 noindex,等于把矛盾信号一起交出去。
  4. 不要放需要登录、需要 POST、带会话 ID 的地址。
  5. 分片文件本身要能稳定返回,不要用动态脚本临时拼装,避免超时。

索引文件与内链的分工

Sitemap 解决的是“告诉蜘蛛有哪些 URL”,内链解决的是“这些 URL 在站内处于什么位置”。只靠清单提交、站内没有任何入口的页面,即使被抓到,也比较难持续获得回访。比较稳妥的做法是:重要页面既有内链入口,也出现在 Sitemap 分片里;次要但需要被发现的页面,至少保证一个入口。

如果 Sitemap 里的地址和内链指向的地址写法不一致,比如带不带斜杠、大小写不同,蜘蛛会把它当成两个入口处理,抓取路径也会分散。生成分片前,先确认站内链接和 canonical 的写法已经统一。

从日志里看分片有没有被走通

Sitemap 提交之后,不能只看“已提交”状态。可以看服务器日志里索引文件和分片文件的请求次数、返回码,以及分片里的 URL 随后有没有被抓取。如果索引文件经常返回 5xx 或超时,分片自然不会被继续读取。如果分片被读取,但里面的 URL 长时间没有抓取记录,就要回到内链和页面状态上找原因。

分片只是把 URL 清单交出去的方式,它不改变页面本身是否值得抓取。清单交得再整齐,页面返回异常或没有入口,路径还是走不下去。

最后提醒一点:分片数量增加后,维护成本也会上升。生成逻辑要能自动排除已下线、已合并、已跳转的地址,否则清单会越滚越大,真正需要抓取的 URL 反而被稀释。