先别急着改 robots 文件。把“带参数的 URL”固定成一个最小样本,用同一台机器、同一份 robots.txt、同一组请求头分别请求正常页和异常页,比较返回的 robots 规则命中结果。若异常只在参数页出现,优先怀疑规则路径匹配、参数顺序或抓取工具对通配符的处理差异,而不是整份文件失效。这个动作能帮你把问题从“全站抓取异常”缩小到“某类参数 URL 的规则匹配异常”,下一步才有明确方向。
从你手头已有的资料里选一个正常页和一个异常页,要求它们同属一个目录、同一协议、同一主机名,唯一差别是异常页带了查询参数。例如正常页是 /list/,异常页是 /list/?page=2 或 /list/?sort=new。如果连一个正常页都找不到,说明问题可能不在参数本身,而在更上游的抓取链路,此时应先把范围扩到同目录下所有 URL,而不是继续纠结参数。
固定样本后,记录三项内容:请求的完整 URL、返回的 robots 规则匹配结果、以及该 URL 是否被允许抓取。不要只看“能不能打开”,要看规则是否真的命中了 Disallow 或 Allow。很多“异常”其实是页面能返回 200,但规则把它挡在抓取之外。
把正常页和异常页的 robots 匹配结果并排看,通常只会落到下面三类之一:
Disallow: /*?page= 这类写法。此时问题在规则本身,不在文件是否被读取。这里要强调一个容易误判的点:robots.txt 的抓取限制不等于可靠的索引移除。即使异常页被 Disallow 挡住,它仍可能因外部链接被索引;反过来,放开 Disallow 也不保证它一定被抓取或收录。所以规则命中结果只能解释“抓取许可”,不能单独解释“页面是否出现在结果里”。
同一组参数换顺序、换编码,可能得到不同匹配结果。假设你手头的异常页是 /list/?a=1&b=2,而正常页是 /list/?b=2&a=1,两者内容相同但 URL 不同。如果 robots 规则写死了参数顺序,前者可能被挡、后者放行。这不是假设中的罕见情况,而是缩小复现条件时必须单独验证的一步。
可执行动作:把异常页的 URL 拆成三份副本分别请求——原顺序、交换参数顺序、对参数值做一次百分号编码。比较三者的规则命中结果。如果只有原顺序命中 Disallow,就能把原因锁定在规则对参数顺序的依赖上;如果三者结果一致,参数顺序就不是变量,应回到规则通配符或抓取工具差异上继续查。
这个动作的结果会直接影响下一步:锁定参数顺序后,你只需要调整规则写法;若三者一致,就不该在参数顺序上继续花时间。
没有服务器日志、没有搜索平台后台权限时,不要试图证明“全站影响范围”。你仍可做的最小动作是:用同一份 robots.txt 内容,对正常页和异常页各发起一次请求,只记录规则匹配结果和返回状态。这个动作不能推出抓取量下降、收录变化或排名影响,只能说明“在当前规则下,这两类 URL 的抓取许可是否不同”。
如果连规则匹配工具都拿不到,就退一步:把 robots.txt 里所有含 *、$、? 的行抄出来,逐条对照异常页的路径和参数。这一步不依赖任何平台数据,只依赖文件文本本身。抄完后你会得到一张“可疑规则清单”,它比“全站异常”这种描述更能推动后续处理。
规则命中异常只能说明抓取许可不同,不能推出页面一定不被收录,也不能推出收录异常一定由 robots 引起。站点地图不保证收录,HTTPS 不保证安全无漏洞或排名,这些都与当前问题无关,不应混进判断链。若异常页同时出现在站点地图里,也不能因为“站点地图里有”就认为它应该被抓取——站点地图只是提示,不是许可。
另外,不同搜索引擎对通配符和参数规则的支持情况须分别核查。你在一个引擎上复现出的规则命中差异,不能直接套到另一个引擎。缩小复现条件的意义,是先把变量压到最少,再决定是否需要跨引擎验证,而不是一开始就假设所有引擎行为一致。