直接回答:不要试图穷举所有参数组合,而是先定义一组“有效地址”的判定规则——能返回有意义内容、且符合当前业务意图的URL才纳入检查集合,其余一律归入“不检查”或“仅抽样”的桶。这个集合的边界由你手工声明,而不是由爬虫发现。
假设某站有一个商品筛选页 /list?color=&size=&sort=&page=,四个参数各自可取多个值,且可任意组合、任意排序。爬虫每遇到一个新组合就当作新地址,队列迅速膨胀。此时如果继续做全量死链检查,你会发现绝大部分“新地址”都返回200,却没有任何独立内容。问题不是死链变多,而是有效地址集合没有定义。
缺少完整日志或后台权限时,你依然可以执行一个最小动作:手动构造5到10个代表性组合,观察它们的响应状态、页面标题和主要正文是否随参数变化。如果标题与正文完全不变,只有URL不同,那么这些组合在内容意义上属于同一个地址。这个观察结果直接决定下一步:是把该参数整体排除出检查范围,还是保留其中少数几个做抽样。
把“有效”拆成可分别验证的条件,比笼统说“重要页面”更有用:
三个条件同时成立,才纳入全量检查;只满足内容条件但不满足意图条件的,降级为抽样;完全不满足的,直接从集合中剔除。用这个规则,参数组合从“无限”收缩为“有限且可解释”。
把参数组合排除出检查集合后,容易产生两个过度推断:
同样,请求量或抓取量下降不能单独证明你的集合定义正确——也可能只是爬虫预算变化、站点整体更新频率下降,或外部链接减少。需要结合抽样地址的实际响应内容来判断。
假设你声明“sort 参数不产生独立内容,整体排除”。验证动作是:取 /list?sort=price 与 /list?sort=new 两个地址,分别记录页面标题、首屏商品顺序和 canonical 标签。如果两者标题相同、canonical 都指向无参数版本,那么排除规则成立,下一步可以把该参数加入爬虫忽略列表。如果两者标题不同且 canonical 各自独立,则规则不成立,需要把 sort 重新纳入有效集合,并进一步区分哪些取值组合真正产生差异。
这个动作的结果会直接改变下一步:规则成立时,检查范围缩小,你可以把精力放在分页和筛选组合上;规则不成立时,说明参数确实承载内容差异,此时应改为限制组合数量,而不是整体排除。
没有服务器日志、没有后台参数配置权限时,仍可做三件事:手工构造代表性URL并记录响应状态与页面差异;用站点地图和站内链接反推哪些地址被主动暴露;对疑似重复的参数组合做小样本抽样,而不是全量爬取。这些动作能帮你定义集合边界,但不能推出收录结果、排名变化或抓取预算分配。HTTPS 不保证安全无漏洞或排名,不同搜索引擎对参数处理的支持情况须分别核查,因此集合定义应视为内部检查规则,而非对搜索引擎行为的承诺。
最终,有效地址集合是一份你主动维护的清单:它声明哪些参数组合值得检查、哪些只做抽样、哪些直接忽略,并随页面结构变化而更新。