站点只有几百个 URL 的时候,一个 sitemap.xml 写完就结束。等到商品、文章、栏目、标签加在一起上万条,单个文件会变得难维护:生成慢、体积涨、一处出错整份重来。这时更稳妥的做法是拆成 sitemap 索引加若干分片,把 URL 清单分批交出去。
索引文件在链路里的位置
索引文件本身不列 URL,它只列出各个分片文件的位置。蜘蛛拿到索引后读取分片,再从中取 URL。它的价值在于三点:单文件体积可控、出错时只需重新生成对应分片、不同类型的页面分开放,便于分别观察抓取情况。
分片时绕不开的几条边界
- 单个 sitemap 文件通常不超过 5 万条 URL,未压缩体积不超过 50MB;
- 索引文件自身同样受体积与条目数限制,子文件数量有上限;
- 分片文件必须与索引里写的地址完全一致,包括协议、域名、路径和大小写;
- 压缩交给服务器处理更省事,压缩后的文件名要与索引里的地址对得上。
按什么维度切分
切分方式没有标准答案,但要选一个长期稳定的维度,否则每次生成都会全盘变化。
- 按内容类型:商品、文章、栏目各一个分片,问题定位最快;
- 按目录或分区:适合多语言、多地区站点;
- 按更新时间:适合日更量大的站点,老页面沉到历史分片,不必频繁重抓;
- 不建议按抓取频率或页面权重切分,这类指标不稳定,分片会天天变动。
怎么把它交给蜘蛛
索引文件放在根目录后,至少用一条路径明确声明。常见做法是在 robots.txt 里写一行 Sitemap 指令指向索引地址,同时在站长平台手动提交一次,方便尽早发现。如果站点有多个域名或子域,每个域名单独声明自己的索引。
需要留意的是,声明只是提供线索,不代表蜘蛛会把所有分片读完。分片数量越多,越需要靠站内链接把重要页面再兜一层。
更新节奏与几个常见坑
- 子分片被删除或改了地址,索引还指向旧路径,蜘蛛读到的是一串 404;
- 把 noindex、需要登录、参数重复的页面写进清单,白白消耗抓取次数;
- 清单地址与线上实际地址不一致,多一个斜杠或大小写不同都会被当成另一个 URL;
- 每次生成都改动全部 lastmod,会让更新信号失去参考价值;
- 分片拆得太细,几千个文件反而增加读取成本。
清单之外,还是要有路
Sitemap 更像一份补充清单,它告诉蜘蛛存在哪些地址,但页面之间怎么连、哪些更要紧,仍然由内链结构表达。清单里出现一个地址,而站内没有任何链接指向它,这个页面在抓取和评估上都会偏弱。
把 sitemap 当发现渠道,把内链当路径;两者对不上时,蜘蛛更愿意沿着有链接的路走。
什么时候该回头检查
抓取量突然下降、某个分片的抓取数长期为零、索引里的条目比实际页面多出很多,都是值得回头核对的信号。先把清单和线上页面做一次比对,确认地址、状态码和数量对得上,再考虑分片维度是否需要调整。站点结构变化不大的时候,保持这套东西稳定,比频繁改来改去更有用。