有效地址集合不是“所有可能被拼出来的URL”,而是你愿意让爬虫抓取、且能够被同一套规则一致处理的那部分地址。当参数组合趋近无限时,正确做法是先按参数的功能分组,再为每组指定一个唯一的规范形态,最后用规则只放行规范形态。下面用一个假设情境把决策过程走完。
假设一个旧电商站准备退出旧合作关系,商品页遗留了color、size、sort、page、ref五类参数。它们性质完全不同:
如果把这五类参数一视同仁地全禁或全放,都会出问题:全禁会挡掉分页的真实内容,全放则等于承认无限集合都有效。分组是定义有效地址集合的第一步。
有效地址集合的定义方式,是让每组参数只保留一个可抓取形态,其余形态一律视为重复。仍用上面的假设:
这样定义后,有效地址集合从“参数笛卡尔积”收缩为“商品主体 × 有限分页”,规模可控且可验证。
参数无限增长时,逐条写 Disallow 会永远写不完,而且新参数一出现就漏。更稳的做法是反过来:默认不允许带参数的地址,只显式放行规范形态。假设站点选择用查询串模式匹配:
? 的地址。?page= 的规范形态,并配合站内链接只指向规范形态。这里的关键动作是:把“允许”写成白名单,而不是把“禁止”写成黑名单。结果如何影响下一步——如果白名单生效后,抓取日志里带 color、size 的请求明显减少,说明规则方向正确;如果仍大量出现,要先确认是不是站内链接还在生成这些地址,而不是继续加规则。
请求量下降有多种合理解释:爬虫本来就在降低抓取频率、页面被其他规则挡住、或者站点整体流量变化。它不能单独证明有效地址集合定义正确。更可靠的验证顺序是:
需要提醒的是,robots.txt 的抓取限制不等于可靠的索引移除。被挡的地址仍可能以其他方式出现在结果里,若目标是彻底退出旧合作关系遗留的地址,还需要配合页面级处理,而不是只改这一份文件。站点地图也不保证收录,把规范形态写进站点地图只是声明,不是承诺。
回到那个假设的旧合作关系退出场景,最终决策是:跟踪参数全部排除,筛选与排序参数不进入有效集合,分页保留有限上限,站内链接统一指向规范形态。这个决策同时满足两个条件——保留仍然有价值的分页内容,又让参数组合不再无限扩张。如果后续发现某类筛选页有独立搜索需求,再单独把它提升为规范形态,而不是放开整组参数。不同搜索引擎对通配与模式的支持情况需要分别核查,规则写法应以各自文档为准,不能假定完全一致。