事情本身不复杂,线索都在日志里。robots.txt 里加了 Disallow: /cart,日志里购物车页每天仍被抓两百多次,路径是 /cart?step=2 和 /cart/index 两种形式。

第一反应是「购物车链接带了跟踪参数,路径部分被反向代理重写过」,验证下来不成立。

把日志和配置对完,能解释这个现象的基本就这几处。Disallow 按前缀匹配,/cart 本身能挡住但大小写不同的变体不算。另一种情况是规则写在某个 UA 分组里,百度蜘蛛走的是另一组。

还有一种情况,CDN 缓存了被屏蔽前的页面,蜘蛛取到的是缓存副本。

第一件事是统计被屏蔽路径的实际请求形式

awk '$7 ~ /cart/{print $7}' access.log | sort | uniq -c | sort -rn | head

然后把规则改成忽略大小写并覆盖子路径

location ~* ^/cart { return 403; }

给购物车页补 noindex 作为第二道保险

add_header X-Robots-Tag 'noindex, nofollow' always;

怎么算真的好了,看的是同一批现象。规则改成忽略大小写加子路径后,购物车请求降到每天个位数,索引里残留的页面也在一个月内清空。

robots 只做前缀匹配,写路径时把大小写和常见后缀都考虑进去,否则规则很容易被一个参数绕过。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189