robots.txt抓取规则模拟器

本地处理
  • 打赏支持
  • 分享链接
  • 反馈建议
robots.txt 的匹配不是「先写先赢」,而是最长模式优先(模式越长越具体);长度相同时 Allow 优先于 Disallow。这个顺序踩过一次坑就会记一辈子。
-
规则组数
-
生效组规则数
-
匹配规则数
-
判定结果
规则类型所属组是否匹配
匹配规则:把模式中的 * 视为通配符、结尾 $ 视为锚点,其余字符按字面量前缀匹配。在所有命中的规则中取模式最长的一条;若长度相同则 Allow 胜出。没有任何规则命中时默认允许抓取。

robots.txt 的判定规则

很多人以为 robots.txt 是从上往下第一条命中就生效。实际上主流搜索引擎(以 Google 为准)遵循两条更精确的规则:

  1. 最长匹配优先:在全部命中的规则中,选模式字符串最长的那条。越长代表越具体。
  2. 同级 Allow 优先:长度相同时,Allow 覆盖 Disallow。

正是第 2 条让下面这种写法能够生效——先禁整个目录,再单独放行其中一个子目录:

User-agent: *
Disallow: /admin/
Allow: /admin/public/

访问 /admin/secret 会命中 /admin/(禁止),而 /admin/public/doc.html 同时命中 /admin/ 和 /admin/public/——后者更长,所以允许。如果换成先写 Allow 再写 Disallow,结果完全一样,因为顺序不影响判定。

User-Agent 组怎么选

robots.txt 可以按爬虫分组。判定时先找与访问者 UA 最匹配的组:

  • 有专门针对该爬虫的组(如 User-agent: Googlebot),就用这个组,完全忽略 * 组。
  • 没有专门匹配的组,才回落到 User-agent: * 组。
  • 两个组都不存在时,默认允许抓取全部内容。

这是第二个常见坑:给某个爬虫单独写了组,就等于把它从 * 组里摘了出去。如果不小心写了一个空的 User-agent: Googlebot 组,Googlebot 反而会变得「什么都能抓」。

通配符与锚点

写法含义示例
*匹配任意字符序列Disallow: /*.pdf$
$锚定结尾Disallow: /*.json$ 只禁以 .json 结尾的
/根路径,等于禁止整站Disallow: /
空值表示不做任何限制Disallow:

另外请注意:robots.txt 是君子协定,只约束守规矩的爬虫,无法阻止恶意抓取。需要真正防护的页面,请用登录鉴权或服务端访问控制;robots.txt 的作用是防止正常搜索引擎误抓,同时避免无意义的抓取浪费带宽。

你可能还想问

规则匹配是怎么判定的?

按代理标识分组匹配,路径前缀越长越具体、优先级越高;通配与结尾符的语义要按规范理解,不同爬虫实现略有差异。

屏蔽了为什么还会被抓?

该文件只是约定、不具强制力;恶意爬虫会无视它,真正限制访问要靠服务端鉴权、限流与来源策略。

怎么写更稳妥?

只屏蔽必要路径、给出明确的站点地图地址、测试无误再上线;大范围屏蔽容易误伤,导致重要页面不被收录。