蜘蛛池知识

蜘蛛池里的 sitemap:URL 发现通道,不是收录开关

sitemap 是蜘蛛发现 URL 最省力的通道之一,但它只负责发现,不保证抓取和收录。本文讲清一份能被顺利读取的 sitemap 该怎么写、lastmod 为什么不能乱刷、sitemap 与内链如何分工,以及上线后该看哪些日志信号。

蜘蛛池知识

蜘蛛池里的 sitemap:URL 发现通道,不是收录开关

在蜘蛛池的运行链路里,sitemap 常常被当成一个提交完就不管的动作。实际上它是蜘蛛发现 URL 最省力的通道之一:不用沿着一层层链接爬行,蜘蛛可以直接拿到一份清单。用得好,入口页能更快进入抓取队列;用得随意,它反而会消耗蜘蛛对站点的信任。

sitemap 解决的是发现,不是收录

先把边界说清楚。sitemap 只负责告诉蜘蛛这里有这些 URL,它不保证抓取,更不保证收录。把 sitemap 当成收录开关,是最常见的期待错位。判断它是否起作用,应该看蜘蛛的发现量和抓取转化有没有变化,而不是盯着索引量。索引结果由页面质量、站点整体环境、竞争情况共同决定,单一入口文件改变不了这些。

一份能被顺利读取的 sitemap

  • 只放返回 200 的规范 URL,重定向、404、410 以及各种参数变体都不要写进去
  • URL 使用绝对地址,包含协议和域名,不要写相对路径
  • 数量超过单文件上限就拆成多个 sitemap,再用 sitemap index 汇总
  • 文件体积过大时启用 gzip,减少蜘蛛的下载开销
  • 在 robots.txt 里用 Sitemap 指令声明地址,文件尽量放在根目录方便定位
  • 编码统一为 UTF-8,特殊字符按 XML 规则转义

这些细节看起来琐碎,但直接决定蜘蛛能否把清单完整读下来。一份解析失败或者半途中断的 sitemap,比没有 sitemap 更糟。

lastmod 要诚实

lastmod 是最容易被滥用的字段。每次生成 sitemap 就把全部 URL 的 lastmod 刷成当前时间,表面上看站点很活跃,实际会让蜘蛛在多次比对之后降低对这个字段的信任,后续即使真有更新也可能被忽略。比较稳妥的做法是:只在页面内容确实发生实质变化时,更新对应 URL 的 lastmod,其余保持原值。changefreq 和 priority 目前更多是提示性字段,写与不写影响有限,不必花太多精力维护。

sitemap 不能替代内链

有些做法是入口页只放少量导航,其余 URL 全部塞进 sitemap,指望蜘蛛顺着清单爬完。这会让蜘蛛拿到 URL 却没有合理的爬行路径,目标页之间缺少互链支撑,即使被发现了也难以获得持续回访。合理的分工是:sitemap 负责新增页面和边缘页面的发现,内链负责爬行深度控制和链接关系传递。两者互补,不是替代。

几个常见误区

  1. 把站内全部 URL 一次性倾倒进去,包括标签页、分页和各种筛选参数
  2. sitemap 长期不更新,新增入口页却指望蜘蛛自己找到
  3. 用 sitemap 批量提交低质页面,拉低整体抓取效率
  4. 每个子域或每套入口程序各提交一份内容重复的 sitemap

上线后观察什么

  • 发现量:日志里蜘蛛请求 sitemap 的频率,以及随之带来的抓取量变化
  • 抓取转化:从 sitemap 拿到的 URL 里,有多少真正进入了抓取
  • 状态码:被写进 sitemap 的 URL 是否出现 404 或 5xx 增多
  • 时间间隔:新入口页从提交到首次被抓,周期是否缩短
sitemap 是发现通道,不是收录保证。先保证清单干净、lastmod 真实,再谈规模。

还有一点需要耐心:sitemap 的效果通常要几周才能从日志里看出趋势,短期内频繁改动只会让数据更难判断。设定一个固定的生成周期,定期清理失效 URL,比反复调整字段更有价值。