死链检查中识别配置互相冲突,核心方法是把影响同一批URL的规则逐条列出,再对同一URL分别套用每条规则,看结论是否一致。只要两条规则对同一URL给出“允许抓取”和“禁止抓取”两种相反结果,就构成冲突。判断依据不是规则写在哪个文件,而是最终生效的那一条。
死链检查常被忽略的一点是:死链处理不只是返回码问题,还可能被抓取规则、跳转规则、站点地图和页面内链接同时影响。容易互相冲突的配置通常来自这几处:
Disallow规则。<meta name="robots">指令。冲突的前提是“作用对象重叠”。如果一条规则只针对/old/,另一条只针对/new/,即使写法相反也不冲突。所以第一步不是看规则本身,而是先确定同一URL被哪些配置覆盖。
具体做法是选一个待检查URL,把它分别代入每条规则,记录每条规则给出的结论。下面用假设例子说明,不对应任何真实站点。
/old-page,服务器配置返回301到/new-page。Disallow: /old-page。/old-page。/old-page。逐条判断:301表示该地址已迁移;Disallow表示不抓取该地址;站点地图保留表示仍向搜索引擎提交该地址;内链保留表示用户和爬虫仍能到达该地址。这里就出现了冲突:一边用301把它当作已迁移地址,一边又用Disallow阻止抓取,同时站点地图还在提交它。爬虫无法稳定判断这个URL到底应该保留、移除还是跟随跳转。
适用条件是:只有当多条规则确实覆盖同一个URL时,才需要做这种比较。如果URL只出现在一个位置,就不存在互相冲突,只需判断该规则本身是否正确。
发现异常现象时,不要直接断言是某一条配置造成的。同一个现象可能有多种解释,需要逐项排除。
判断方法是:先记录现象,再列出所有可能解释,然后对每个解释找可核对的证据。已经定位的原因应当能通过一次实际请求或一次规则比对复现,而不是靠推测。
处理完冲突后,用以下信号确认是否一致:
Disallow阻止,且站点地图中不再保留旧地址。需要说明的是,robots.txt的抓取限制不等于可靠的索引移除;站点地图不保证收录。不同搜索引擎对规则的支持情况须分别核查,不能用一个平台的结果直接推断另一个平台。
选一个你正在处理的旧URL,按“状态码、robots.txt、meta robots、站点地图、内链”五项逐一记录结论。只要其中两项结论相反,就先处理这一处冲突,再重新检查该URL的最终表现。