死链处理:参数组合无限增长时怎样定义有效地址集合

📍 WDQWDWQD987AAAAA:216.73.216.251
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /c8b023388137.html
📄

死链处理:参数组合无限增长时怎样定义有效地址集合

先把结论说清楚:参数组合无限增长时,有效地址集合不能靠“把所有出现过的URL都当成有效地址”来定义,而要先按参数在页面里的实际作用分层,再为每层规定可枚举的地址形态。对绝大多数站点,有效集合是“路径决定资源、少量参数决定视图、其余参数一律不进入规范地址”这三条规则的交集,而不是URL字符串的全集。

下面用一个明确假设的情境串起来。假设某电商站有一个筛选页 /list?cat=1&color=red&size=m&sort=price&page=3,上线后爬虫和用户都能拼出几乎无穷的排列组合,站内报告里出现大量返回200的地址,站长已经做过一轮全站重定向和一次死链扫描,问题依旧。这个情境只用于说明决策方法,不代表任何真实站点数据。

先区分“资源地址”和“视图地址”

参数无限增长之所以难处理,是因为它把两类东西混在了一个URL里。路径部分通常指向一个真实资源,比如商品、分类、文章;参数部分往往只是对同一资源的筛选、排序、分页或跟踪。前者是有限的,后者在组合下会爆炸。

判断某个参数属于哪一类,可以看一个动作:把该参数删掉后,页面主体内容是否还成立。删掉 cat 后列表没有主题,说明它接近资源定义;删掉 sort 后内容集合不变、只是顺序变了,说明它只是视图;删掉 utm_source 后页面完全一样,说明它只是跟踪。这个动作的结果直接决定下一步:资源类参数进入有效集合,视图类参数只保留一个默认值,跟踪类参数一律不进入。

有效地址集合的三个判定条件

把上面的动作固化成可执行的规则,有效地址需要同时满足三点。

只有这三条同时成立,集合才是有限的。任何一条缺失,参数就会重新长回无限。

用规范标签和状态码把集合收口

定义完集合,还要让站点对外表达这个集合。对视图类参数,在页面里输出指向默认视图的规范地址,让带参数的版本归并到同一个规范URL。对确实不存在的资源,返回404或410,而不是重定向到首页或列表页——把死链全部301到首页,会让搜索引擎把首页当成这些地址的替代内容,反而模糊了有效集合的边界。

这里有一个容易被忽略的条件:robots.txt 的抓取限制不等于可靠的索引移除。屏蔽参数抓取可以减少爬虫消耗,但已经被收录的地址不会因此自动消失,所以它只能作为收口后的辅助手段,不能替代规范标签和状态码。

假设情境里的决策顺序

回到开头那个筛选页。假设第一轮处理是把所有带参数的地址301到无参数列表页,结果是无参数列表页承担了所有筛选意图,用户点进去看到的不是自己选的条件,体验和转化都受影响,同时报告里仍不断出现新的参数组合。

按前面的规则重做,顺序应该是:

  1. 先列出所有参数,逐个做“删除后内容是否成立”的判断,分成资源、视图、跟踪三类。
  2. 为视图类参数规定允许值和默认值,只保留默认值的地址进入有效集合。
  3. 给非默认视图地址输出规范标签,指向默认视图;跟踪参数不参与规范地址。
  4. 对资源类参数中确实不存在的值,返回404或410,而不是重定向。
  5. 收口完成后再看报告,确认新增参数组合是否停止增长。

这个顺序里,第2步的动作会直接影响第5步的判断:如果允许值没有封死,报告里的地址数量就不会稳定,此时看到“新增归零”也不能证明处理正确,它可能只是爬虫暂时没抓到,或者扫描工具换了采样方式。请求量或抓取量下降同样有多种解释,需要结合状态码分布和规范标签覆盖一起看。

收口之后还要复核的两件事

第一,站点地图不保证收录。把有效集合写进站点地图只是声明,不等于这些地址会被抓取或索引,所以不能用站点地图代替集合定义。第二,不同搜索引擎对参数和规范标签的支持情况需要分别核查,不能因为一个来源的表现就推断另一个来源同样处理。

判断收口是否成立,可以看一个可验证的信号:在固定时间窗内,新出现的、能返回200的地址是否只落在预先定义的允许值范围内。如果仍有范围外的组合稳定返回200,说明有效集合的定义还有遗漏条件,需要回到参数分类那一步重新判断,而不是继续加屏蔽规则。

图1 图2

nginx