搜索抓取

robots.txt 里的 Sitemap 声明:给蜘蛛留一个稳定的 URL 发现入口

很多站点只把 robots.txt 当拦截工具,却忽略了它还是蜘蛛每次来访的第一个检查点。本文讲清 robots.txt 的读取顺序、Sitemap 声明的正确写法、容易被误伤的入口路径,以及声明之后该如何用日志核验抓取情况。

搜索抓取

robots.txt 里的 Sitemap 声明:给蜘蛛留一个稳定的 URL 发现入口

很多人把 robots.txt 当成一道门:写上 Disallow,把不想被抓的目录关掉,任务就算完成。但从抓取流程看,它还有第二重身份——蜘蛛每次访问站点前,几乎都会先来取一次这个文件,而这里恰好是声明 Sitemap 位置的固定入口。

蜘蛛为什么每次都先看 robots.txt

抓取调度在进入一个新站点,或访问一个长时间没有接触的站点时,会先请求根目录下的 /robots.txt,读取里面的规则,再决定后续怎么走。这个文件本身也有可用性要求:

  • 返回 200 且内容正常,规则被读取;
  • 返回 404,通常视为不限制抓取,但 Sitemap 声明也就随之丢失;
  • 返回 5xx 或超时,抓取可能被整体暂缓,等下一次探测再恢复。

所以 robots.txt 不只是规则文件,也是抓取通路上的第一个检查点。让它保持稳定、体积小、响应快,往往比写一堆复杂规则更有价值。

Sitemap 声明放在哪一行

在 robots.txt 中声明 Sitemap,是让蜘蛛在不依赖内链的情况下找到 URL 入口的一种方式。写法本身很简单,但有几个细节容易被忽略:

  • 必须写完整地址,包含协议和域名,例如 Sitemap: https://www.example.com/sitemap.xml;
  • 字段名按惯例写作 Sitemap,路径与文件名要和实际文件一致;
  • 可以声明多条,比如分片索引、不同子域或不同内容类型的站点地图;
  • 不要把它写在 Disallow 覆盖的路径下,否则声明与规则会互相打架。

如果站点已经有 sitemap 索引文件,优先声明索引,而不是把几十个分片全部罗列进来。索引文件本身就是为“入口唯一、分片清晰”准备的。

别把入口挡在门外

常见的误配是规则范围过大。比如先写了 Disallow: / 做临时维护,之后只放行了首页,却忘了站点地图文件和静态资源目录;又比如用通配符把所有 .xml 一并挡掉。结果蜘蛛读到了 Sitemap 声明,却取不到对应的文件。

还有一种情况是 robots.txt 把自己也挡住了:规则命中了 /robots.txt 本身,抓取端既拿不到规则,也无法确认站点地图在哪。

声明只是入口,抓取还要看别的

把 Sitemap 写进 robots.txt,解决的是“告诉蜘蛛去哪儿找 URL”,并不解决“蜘蛛愿不愿意抓这些 URL”。真正影响抓取分配的仍然是:

  • 内链是否把这些 URL 接进主结构;
  • 页面响应是否稳定,服务器是否频繁超时;
  • URL 是否重复、参数是否泛滥;
  • 站点地图里是否混入了大量低价值或已失效的地址。

一个实用做法是定期从服务器日志里筛出蜘蛛对 sitemap 中 URL 的访问记录,和站点地图条数做对比,看哪些入口被长期忽略。忽略比例高的部分,通常需要回头检查内容质量和内链结构,而不是反复修改声明。

一份简单的检查清单

  1. robots.txt 能正常返回 200,且不带多余的重定向跳转;
  2. Sitemap 声明使用绝对地址,条数与实际分片一致;
  3. Disallow 规则没有误伤 sitemap、robots.txt 和必要的静态资源;
  4. 站点地图本身不超过单文件限制,超出时用索引拆分;
  5. 改版或迁移后,及时更新声明里的域名与路径。
robots.txt 的价值在于稳定地说明规则和入口,而不在于规则写得多复杂。语法越简单、越容易被解析,抓取端出错的概率就越低。

最后要提醒的是:Sitemap 声明只是一种发现路径的补充,不是收录保证。把它放对位置、保持可访问,再配合清晰的内链和稳定的服务器,URL 被发现并进入抓取队列的机会才会更顺畅。