事情本身不复杂,线索都在日志里。商品列表的筛选参数可以任意组合,颜色 12 种、尺码 8 种,两两组合就有 40 万条地址。日志里蜘蛛每天七成请求都在抓这些组合页。
第一反应是「组合页内容高度相似,只有商品顺序不同」,验证下来不成立。
这类报错背后常见的原因有几处,逐个排除就行。筛选参数全部可被抓取,没有做 rel=nofollow 或 robots 限制。也可能是每页都输出完整的筛选链接,形成指数级入口。
不容易想到的是,canonical 指向自身,等于告诉引擎这些都是独立页。
上来先统计带参数的抓取占比
awk '{print $7}' access.log | grep -c 'color=.*size='
给筛选链接加 nofollow
curl -s https://www.example.com/list | grep -c 'rel="nofollow"'
组合页统一 canonical 到无参列表
curl -s 'https://www.example.com/list?color=red&size=40' | grep -o 'rel="canonical"[^>]*'
robots 里限制无效参数组合
Disallow: /*?color=*&size=*
恢复的判定其实很直接。筛选组合页的抓取占比从 70% 降到 12%,同一批抓取量下商品详情页的抓取数翻了一倍。
分面导航的入口一定要收敛,能点的参数越少越好,组合页就算要有内容也不能让它们成为主要抓取目标。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
