搜索抓取

Sitemap 索引与分片:URL 清单上万条之后怎么分批交给蜘蛛

当站点 URL 数量上万,单个 sitemap 会变得难以维护:生成慢、体积大、出错要整份重来。本文讲清索引文件与分片各自的作用、切分维度怎么选、交给蜘蛛的几种声明方式,以及子文件 404、清单与线上地址不一致、lastmod 滥用等常见问题,帮你把 URL 清单管得稳定、可核对。

搜索抓取

Sitemap 索引与分片:URL 清单上万条之后怎么分批交给蜘蛛

站点只有几百个 URL 的时候,一个 sitemap.xml 写完就结束。等到商品、文章、栏目、标签加在一起上万条,单个文件会变得难维护:生成慢、体积涨、一处出错整份重来。这时更稳妥的做法是拆成 sitemap 索引加若干分片,把 URL 清单分批交出去。

索引文件在链路里的位置

索引文件本身不列 URL,它只列出各个分片文件的位置。蜘蛛拿到索引后读取分片,再从中取 URL。它的价值在于三点:单文件体积可控、出错时只需重新生成对应分片、不同类型的页面分开放,便于分别观察抓取情况。

分片时绕不开的几条边界

  • 单个 sitemap 文件通常不超过 5 万条 URL,未压缩体积不超过 50MB;
  • 索引文件自身同样受体积与条目数限制,子文件数量有上限;
  • 分片文件必须与索引里写的地址完全一致,包括协议、域名、路径和大小写;
  • 压缩交给服务器处理更省事,压缩后的文件名要与索引里的地址对得上。

按什么维度切分

切分方式没有标准答案,但要选一个长期稳定的维度,否则每次生成都会全盘变化。

  • 按内容类型:商品、文章、栏目各一个分片,问题定位最快;
  • 按目录或分区:适合多语言、多地区站点;
  • 按更新时间:适合日更量大的站点,老页面沉到历史分片,不必频繁重抓;
  • 不建议按抓取频率或页面权重切分,这类指标不稳定,分片会天天变动。

怎么把它交给蜘蛛

索引文件放在根目录后,至少用一条路径明确声明。常见做法是在 robots.txt 里写一行 Sitemap 指令指向索引地址,同时在站长平台手动提交一次,方便尽早发现。如果站点有多个域名或子域,每个域名单独声明自己的索引。

需要留意的是,声明只是提供线索,不代表蜘蛛会把所有分片读完。分片数量越多,越需要靠站内链接把重要页面再兜一层。

更新节奏与几个常见坑

  1. 子分片被删除或改了地址,索引还指向旧路径,蜘蛛读到的是一串 404;
  2. 把 noindex、需要登录、参数重复的页面写进清单,白白消耗抓取次数;
  3. 清单地址与线上实际地址不一致,多一个斜杠或大小写不同都会被当成另一个 URL;
  4. 每次生成都改动全部 lastmod,会让更新信号失去参考价值;
  5. 分片拆得太细,几千个文件反而增加读取成本。

清单之外,还是要有路

Sitemap 更像一份补充清单,它告诉蜘蛛存在哪些地址,但页面之间怎么连、哪些更要紧,仍然由内链结构表达。清单里出现一个地址,而站内没有任何链接指向它,这个页面在抓取和评估上都会偏弱。

把 sitemap 当发现渠道,把内链当路径;两者对不上时,蜘蛛更愿意沿着有链接的路走。

什么时候该回头检查

抓取量突然下降、某个分片的抓取数长期为零、索引里的条目比实际页面多出很多,都是值得回头核对的信号。先把清单和线上页面做一次比对,确认地址、状态码和数量对得上,再考虑分片维度是否需要调整。站点结构变化不大的时候,保持这套东西稳定,比频繁改来改去更有用。