处理301重定向的重复或冲突信号,核心是先把“谁在跳、跳去哪、跳了几次”查清楚,再决定保留哪一条规则。常见冲突是同一URL同时命中两条重定向规则、HTTP与HTTPS各跳一次、带斜杠与不带斜杠互相跳,或者重定向链中间夹着302。不要凭感觉删规则,先收集证据,再验收最终响应。
处理目标不是“让页面能打开”,而是让每个旧URL在一次跳转内到达最终可索引的规范URL。判断标准可以写成三条:
301,且Location指向最终URL,不再经过第二个跳转。200,且页面内的规范链接指向自身。如果中间出现302、跳回原地址、或形成A→B→A的循环,就属于冲突信号,需要继续定位。
先用命令行看单条URL的响应。以下为示例,把域名替换成实际域名:
curl -I http://example.com/old-page
重点看HTTP/1.1状态码和Location字段。如果只看到一次301,再对Location里的地址执行一次curl -I,确认它是否又跳走。连续跟踪可以用:
curl -IL http://example.com/old-page
输出里每一个HTTP块代表一跳。出现两个以上301,说明存在重定向链;出现301后又出现302,说明中间规则没有对齐。
接着查服务器或CDN上的重定向规则来源。可能的位置包括Web服务器配置文件、站点根目录的规则文件、CDN的回源与跳转设置、应用路由层。这里要区分“可能原因”和“已经定位的原因”:看到两跳只能说明链存在,具体是哪条规则产生第一跳,需要逐条规则比对路径匹配条件。
重定向冲突通常来自匹配范围重叠。可以按下面的顺序检查:
判断结果的方式很直接:把命中冲突的那条规则临时停用或改窄匹配条件,再执行一次curl -IL。如果跳转链从两跳变一跳,且最终返回200,就说明冲突来自这条规则。若没有变化,继续检查下一条,不要一次改多条。
改完后按清单验收,每项都要有实际输出作为依据:
curl -IL检查,跳转次数为1,状态码为301,最终为200。需要说明的是,robots.txt的抓取限制不等于可靠的索引移除,站点地图也不保证收录。301能传递规范信号,但不同搜索引擎对跳转链和冲突信号的处理需要分别核查,不能假设所有引擎表现一致。
下一步:挑一个当前返回异常的旧URL,执行curl -IL把完整跳转链贴出来,再对照服务器或CDN规则逐条比对,先定位产生第一跳的那条规则,再决定保留、改窄还是删除。