当筛选参数可以任意组合、地址数量趋于无限时,robots文件设置无法靠逐条列举来覆盖有效页面。可行做法是先把地址按“参数语义”分组,再对每组分别选择保留、改写或退出,并用一份可复核的判定规则代替穷举清单。下面给出这套取舍的具体条件与动作。
假设一个列表页有颜色、尺码、排序、页码四类参数,每类取值若干,组合数会迅速膨胀到远超实际内容量。此时若在robots.txt里逐条写Disallow,规则数量会随参数取值增长,维护成本高于收益,而且新参数上线后旧规则不会自动覆盖。
更关键的是,robots.txt的匹配基于路径前缀与通配符,它不理解“这个参数组合是否对应真实存在的商品集合”。因此问题不是“怎么写更多规则”,而是“哪些地址算有效内容,哪些只是同一内容的另一种到达方式”。
需要先明确一点:robots.txt的抓取限制不等于可靠的索引移除。被禁止抓取的地址仍可能因外部链接出现在结果中,只是缺少可抓取内容。所以定义有效地址集合时,不能把“屏蔽抓取”当成“清理索引”的替代。
把参数分成三类,是控制组合爆炸的起点:
分组完成后,对每组做保留、改写或退出的取舍:
一个可执行的动作是:先导出近期被抓取的带参数地址样本,按上述三类打标,统计每类占比。如果视图修饰型占多数,说明退出策略收益较大;如果内容决定型占多数,说明问题不在robots.txt,而在地址规范与内部链接。
当参数顺序不固定时,单条前缀规则往往覆盖不全。例如排序参数可能出现在路径中间,也可能在末尾。此时用通配符可以表达“包含某参数即退出”,但它同时会误伤那些把该参数作为内容标识的地址。
假设一个站点用?sort=表示排序,同时用?id=表示内容。若写成退出所有含sort的地址,通常成立;但若某类内容恰好也把sort作为业务字段,规则就会连带屏蔽有效页面。这个例子说明:通配符规则的有效性取决于参数命名是否稳定、是否与内容标识冲突。
因此在使用通配符前,应先确认两件事:参数名是否专属于视图修饰;是否存在同一参数在不同路径下语义不同的情况。只要存在语义冲突,就不宜用一条全局规则覆盖,而应把规则限定在特定路径前缀内。
定义有效地址集合后,站点地图应只包含你希望被抓取和展示的地址。如果站点地图里仍混有已退出的参数组合,会向抓取方传递矛盾信号。
但要注意:站点地图不保证收录。把有效地址放进站点地图,只是表明它们是候选,最终是否被抓取、是否被展示,还取决于其他因素。同样,robots.txt里允许抓取也不代表页面会被收录。两套机制各管一段,不能用其中一个的结果去推断另一个是否生效。
一个可复核的动作是:在规则上线后,抽取若干已退出和已保留的地址,分别检查它们是否仍出现在站点地图、内部链接和外部链接中。如果已退出的地址仍被大量内部链接指向,说明链接层没有同步调整,下一步应优先改链接,而不是继续加robots规则。
样本阶段成立的规则,在规模化后可能因为新参数、新路径或业务改版而失效。判断是否需要回退,可以看三类证据:
其中抓取量下降不能单独证明规则有误,它也可能来自站点整体抓取预算变化、外部链接减少或服务端响应变慢。因此回退前应至少排除这些替代解释。
回退时优先改的是规则粒度,而不是整体删除。把全局通配符收窄到具体路径,通常比直接放开所有参数更可控。回退后继续观察同一组抽样地址,确认有效地址恢复抓取、无效地址仍未扩散,再决定是否进入下一轮调整。
如果业务本身无法稳定区分参数语义,那么更现实的选择是接受部分无效地址被抓取,转而用规范标签和内部链接控制展示,而不是追求一份完美的robots.txt。这个取舍的前提是:你更在意有效内容的稳定可达,而不是地址集合的绝对干净。