先看现象。为了不让广告落地页被审,给 AdsBot-Google 单独写了一组规则,上线后发现普通蜘蛛开始抓取后台目录,通用分组的 Disallow 像是失效了。
这类报错背后常见的原因有几处,逐个排除就行。同一 UA 匹配到多个分组时只取最具体的一组,其余忽略。还有一种是新分组写在文件开头,解析器认为后面的通用组不完整。
不容易想到的是,分组之间缺少空行,两条 User-agent 被合并成一组。
还有一种情况,AdsBot 分组里没有写 Disallow,等于对它全站放开。
上来先按分组检查规则结构
curl -s https://www.example.com/robots.txt | awk '/User-agent/{print NR": "$0}'
接着确认分组之间是否有空行分隔
curl -s https://www.example.com/robots.txt | cat -A | head -30
然后把通用规则补全到每个分组
User-agent: AdsBot-Google
Disallow: /admin/
User-agent: *
Disallow: /admin/
末了用抓取测试逐组验证
curl -sI -A 'AdsBot-Google' https://www.example.com/admin/ | head -3
改完先别撤,确认这几项。后台目录对所有分组都返回屏蔽状态,日志里 /admin/ 的抓取请求归零,广告落地页审核不受影响。
容易忽略的是,分组是独立作用域,写了专用组就要把通用规则再抄一遍,否则那个 UA 等于没有任何限制。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
