先别把它当成“整站抓取故障”。更常见的判断是:带某个参数的 URL 在部分样本上能被正常请求,但在更大范围或换一个参数组合后出现异常。此时最有效的动作不是继续扩大抓取,而是把“正常样本”和“异常样本”放在同一组条件下做差分,找出第一个让结果翻转的变量。这个变量可能是参数名、参数值格式、参数数量、参数顺序,也可能是服务端对不同参数的处理分支。
缩小复现条件的第一步,不是看百度蜘蛛的频次,而是看这个参数在业务上是否应该改变页面。这里会出现两条完全不同的处理路径。
条件一:参数会改变页面主体内容。例如分页、筛选、排序、地区切换等,不同参数值对应不同可见内容。此时不能简单把这些 URL 全部屏蔽或统一跳转,否则可能把有价值的变体一起处理掉。应该先确认哪些参数组合能生成稳定、可访问、与用户直接相关的页面,再决定哪些允许被抓取。
条件二:参数不影响页面主体内容。例如仅用于来源标记、展示偏好、会话跟踪的参数。这类参数通常不应该产生大量可抓取变体。可以考虑用规范链接指向无参数版本,并在服务端对无关参数做一致化处理。但要注意,robots.txt 的抓取限制不等于可靠的索引移除;如果页面已经被收录,限制抓取并不能保证它从索引中消失。
选择依据很实际:如果参数决定用户看到的内容,优先修可访问性和内容一致性;如果参数不决定内容,优先减少重复入口。两种条件下后续动作不同,不能混成一套规则。
假设你手头有一批日志或抓取记录,显示带 ?a=1 的页面大多正常,但带 ?a=1&b=2 的页面部分异常。不要直接认定是“参数 b 有问题”,因为差异可能来自参数数量、参数顺序、值长度、编码方式,甚至请求时携带的 Cookie 或 UA 差异。
可以按下面的顺序做最小差分。每一步只改变一个条件,并记录结果:
?a=1&b=2 与 ?b=2&a=1,看异常是否跟随顺序变化。这个动作的结果会直接影响下一步:如果异常只跟随某个参数值出现,排查应转向服务端对该值的解析、数据库查询或缓存键生成;如果异常跟随参数数量出现,排查应转向 URL 长度、网关规则或应用层参数上限;如果重放后无法复现,就不宜继续围绕参数下结论,应先检查缓存、CDN、负载均衡和日志采样偏差。
百度蜘蛛对某类参数 URL 的请求量减少,可能有多种解释:这些 URL 本来就不该被大量发现、站点地图没有包含它们、内链没有指向它们、服务端返回了不一致的状态码,或者抓取预算被其他更重要的页面占用。请求量、抓取量或某项统计归零,不能单独证明你的参数处理是正确的,也不能单独证明百度蜘蛛已经放弃这些页面。
更有区分度的证据是同一路径下正常样本与异常样本的对照:
这些差异能帮你判断问题是在内容生成、链接发现、服务端响应,还是索引选择层。站点地图不保证收录,所以“已提交站点地图但异常参数页没被抓取”不能直接推出参数页被惩罚;HTTPS 也不保证安全无漏洞或排名,所以“已经是 HTTPS”不能排除参数处理问题。
假设某站点有 /item?id=100 和 /item?id=100&from=list 两种 URL。日志显示前者大多正常,后者约一半样本返回空主体。此时不要直接屏蔽 from 参数,因为它在业务上可能用于区分入口来源,屏蔽后可能影响统计或跳转逻辑。
可以先做一次最小差分:固定 id=100,只改变 from 的值,例如 list、search、empty。如果只有 from=empty 或空值时异常,问题更可能在服务端对该值的处理;如果所有 from 值都异常,但去掉 from 后正常,问题更可能在参数组合的解析或缓存键。根据这个结果,下一步要么修参数校验,要么修缓存键生成,而不是先动 robots.txt。
这个例子的边界是:它只说明如何缩小复现条件,不说明百度蜘蛛一定会如何处理这些 URL,也不说明修完就一定会被抓取或收录。实际处理时,还要分别核查不同搜索引擎对参数和规范链接的支持情况,不能把一套规则直接套到所有引擎。
缩小复现条件的终点,不是得到一个“疑似原因”,而是得到一张可复查的条件表:哪些参数组合正常、哪些异常、在什么请求环境下翻转、修掉哪个变量后结果改变。只有这张表稳定,后续修复才有依据。
如果条件表显示异常只出现在特定参数值或特定组合上,优先修服务端处理逻辑;如果异常只出现在参数数量多、URL 过长或编码复杂时,优先检查网关和 URL 解析;如果正常样本与异常样本在重放后无法区分,先回到日志采样和缓存层核对,不要急着改页面规则。这样做的结果是,你能把“部分页面正常而特定参数异常”从模糊现象变成可验证的复现条件,再决定是否值得扩大处理范围。