事情本身不复杂,线索都在日志里。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 只做前缀匹配,写路径时把大小写和常见后缀都考虑进去,否则规则很容易被一个参数绕过。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
