搜索抓取

Sitemap 索引与分片:URL 清单太多时怎么交得清楚

URL 数量上万之后,单个 Sitemap 文件容易撞上条数与体积上限。本文说明索引文件的作用、分片可以怎么切、常见的解析故障,以及如何用服务器日志检查分片是否被正常读取,帮站点把 URL 清单交得更清楚。

搜索抓取

Sitemap 索引与分片:URL 清单太多时怎么交得清楚

Sitemap 是站点主动把 URL 清单交到蜘蛛面前的一条通道。页面数量少的时候,一个 XML 文件就够了;当 URL 涨到几万、几十万条,单个文件容易撞上体积和条数上限,读取中断、只读到一部分的情况也会变多。这个阶段通常要把清单拆成多个分片,再用一个索引文件把它们串起来。

为什么需要索引文件

常见的约定是:单个 Sitemap 文件最多 5 万条 URL,未压缩时不超过 50MB。把十几万条 URL 塞进一个文件,既可能超出限制,也会让蜘蛛一次读取的负担变重。索引文件本身不列具体 URL,只列各个分片的位置,蜘蛛顺着索引逐个取分片,某一片出错也不会连带整份清单。

索引文件的基本写法

索引文件的根节点是 sitemapindex,里面每个 sitemap 节点包含一条 loc,指向一个分片文件的绝对地址,另外可以带 lastmod。

  • loc 要用完整 URL,包含协议和域名,相对路径容易解析失败。
  • lastmod 写分片内容真正更新的时间,不要每次生成都刷新成当前时间。
  • 分片文件的地址尽量稳定,不要带随机参数或时间戳目录。
  • 索引文件本身也要能被访问到,并在 robots.txt 里声明它的位置。

分片怎么切更省事

切分方式没有唯一答案,但一旦选定就尽量别频繁改动,否则蜘蛛刚记住一批地址,下一轮又全变了。

  1. 按内容类型切:文章、商品、栏目页各自成片,出问题时容易定位。
  2. 按更新时间切:新内容单独一片,老内容归档成片,方便观察新鲜内容的发现速度。
  3. 按目录或频道切:和站内结构对应,分片命名一看就懂。
  4. 控制单片规模:不必卡到 5 万上限,留出余量,单文件体积小一些读取更稳。

分片常见的几个坑

  • 返回 200 但内容是错误页或登录页,蜘蛛拿到的是无效 XML。
  • 分片地址改版后返回 404,索引里还留着旧地址,形成死链。
  • gzip 压缩了文件,但响应头没标清楚,解析端可能直接报错。
  • URL 中含未转义的连接符,或中文未编码,导致 XML 解析失败。
  • 索引文件只声明了部分分片,遗漏的目录就少了这条发现通道。
  • 同一批 URL 同时出现在多个分片里,浪费抓取又增加重复判断。

和站内链接、日志一起看

Sitemap 解决的是清单问题,不解决可达性问题。蜘蛛拿到 URL 之后,还是要靠站内链接判断这个页面在站里的位置和重要程度。所以分片做得再整齐,也不能替代正常的栏目页、列表页和正文互链。

排查时可以拿服务器日志和分片清单对照:哪些分片被反复读取,哪些从没出现过,哪些分片里的 URL 长期没有抓取记录。这些差异比单看一份报表更有信息量。

Sitemap 是一份清单,不是排名工具。它能让蜘蛛更省力地知道有哪些 URL,但要不要抓、什么时候抓,仍由蜘蛛自己判断。

一个可以照着做的检查顺序

  1. 打开索引文件,确认每个分片地址都能正常返回 XML。
  2. 抽几个分片,检查条数、体积是否在合理范围。
  3. 核对 lastmod,是否和实际更新时间一致。
  4. 在 robots.txt 中确认 Sitemap 声明指向索引文件。
  5. 隔一段时间看日志中分片的读取情况,是否有长期未被访问的分片。

把这些固定成上线前的检查项,分片数量增长时也不容易乱。清单交得清楚,蜘蛛的发现环节就少一个不确定因素,后面的抓取和索引才有讨论的基础。