搜索抓取

robots.txt 与 Sitemap 的先后:蜘蛛进站前先读哪份文件

蜘蛛进入一个站点前,通常会先请求 robots.txt,再根据其中的声明和 Sitemap 地址去发现 URL。本文梳理这两份文件在抓取路径里的分工、常见写法与自查点,帮助站点把入口信息交代清楚,减少蜘蛛在无效路径上的停留。

搜索抓取

robots.txt 与 Sitemap 的先后:蜘蛛进站前先读哪份文件

蜘蛛进入一个站点时,并不是随机挑一个页面开始。多数情况下,它会先请求根目录下的 robots.txt,读取抓取规则和其中声明的 Sitemap 地址;随后再根据 Sitemap、内链或其他外链线索去发现具体 URL。这两份文件一个管“能不能抓”,一个管“有哪些 URL”,顺序和作用并不相同。

robots.txt:抓取前的规则文件

robots.txt 放在域名根目录下,蜘蛛请求它时并不需要先抓取首页。它的主要作用是告诉蜘蛛哪些路径可以抓、哪些路径不建议抓。常见写法包括:

  • User-agent:指定规则对哪些蜘蛛生效,例如针对全部蜘蛛用星号。
  • Disallow:不希望被请求的路径。注意它只是建议,不是强制屏障。
  • Allow:在整体禁止的目录里开放个别路径。
  • Sitemap:声明 Sitemap 的完整地址,可以是 XML 文件,也可以是索引文件。

如果 robots.txt 写错,影响往往不是单页,而是整条抓取路径。比如误把整站设为 Disallow,蜘蛛可能连首页都不再请求;或者把 Sitemap 地址写成了相对路径,蜘蛛无法定位。自查时可以用浏览器直接访问域名下的 robots.txt,确认返回 200、内容可读、没有多余跳转。

Sitemap:给蜘蛛的 URL 清单

Sitemap 不是抓取指令,更像一份候选 URL 清单。它把站点希望被发现的页面集中列出,并可以附带最后修改时间。对蜘蛛来说,Sitemap 的价值在于减少“猜 URL”的成本,尤其是新页面、深层页面和站内链接较少的页面。

常见组织方式有两种:小站直接输出一个 XML 文件;大站用索引文件把多个分片 Sitemap 串起来。无论哪种,都要保证:

  1. 列出的 URL 返回 200,不是 404、301 或 5xx。
  2. 只放规范 URL,不把带跟踪参数、排序参数或重复入口的地址混进去。
  3. 更新时间真实,不要每次请求都改,否则蜘蛛会反复回访同一批页面。
  4. Sitemap 地址在 robots.txt 中声明,或通过搜索资源平台主动提交。

两者在抓取路径里的先后关系

从服务器日志看,一个此前未接触过的站点,蜘蛛常见的请求顺序是:先请求 /robots.txt,再请求 Sitemap,然后才开始抓取具体页面。如果 robots.txt 里没有声明 Sitemap,蜘蛛也可能通过首页内链、外链或历史记录去发现 URL,只是路径会更长、更依赖站内结构。

robots.txt 决定蜘蛛“能走哪条路”,Sitemap 决定蜘蛛“知道有哪些目的地”,内链决定蜘蛛“在路上会不会真的走过去”。三者缺一,抓取覆盖都可能变窄。

有些站点把 Sitemap 当成提交收录的保证,这是误解。Sitemap 只提供发现线索,是否抓取、何时抓取、是否收录,仍取决于蜘蛛对页面质量、站点稳定性和抓取配额的综合判断。蜘蛛池或外部链接可以增加入口,但入口多了以后,如果 robots.txt 和 Sitemap 没有把规范路径讲清楚,反而容易让蜘蛛在重复 URL 之间打转。

服务器稳定性与路径连续性

蜘蛛请求 robots.txt 和 Sitemap 时,同样会遇到服务器状态。如果这两个文件频繁超时或返回 5xx,蜘蛛可能推迟后续抓取;如果 robots.txt 返回 404,蜘蛛通常会按“没有限制”处理,但这不代表可以放任不管,因为一旦后来补上规则,行为会发生变化。

建议把 robots.txt 和 Sitemap 放在稳定的静态路径上,避免经过复杂的动态路由、登录校验或频繁变动的 CDN 规则。文件体积也不要过大,Sitemap 单文件通常控制在 5 万条 URL、未压缩 50MB 以内,超出就分片。

一份基础自查清单

  • robots.txt 可公开访问,返回 200,没有跳转链。
  • User-agent 分组清晰,没有误封整站或关键目录。
  • Sitemap 地址写的是完整 URL,且能正常打开。
  • Sitemap 内只保留规范、可抓取的页面地址。
  • 首页、导航和正文内链能覆盖重要栏目,不单靠 Sitemap。
  • 服务器对 robots.txt 和 Sitemap 的响应稳定,少有超时。

把这两份文件写好,不是为了让蜘蛛“一定抓什么”,而是减少它在入口处的犹豫和绕路。站点运营里很多抓取问题,回头检查 robots.txt 与 Sitemap 的声明,往往能找到最早的那一处卡点。