检查301跳转设置的前后环节依赖,核心是沿着“旧URL被访问→服务器返回301→新URL可正常访问→搜索引擎抓到新URL”这条链路逐段验证,而不是只看跳转代码本身。只测旧地址能不能跳、不测落地页,或只改规则不看服务器配置,都是常见断点。
一次完整的301跳转,依赖四个环节依次成立:
301状态码,并带正确的Location响应头。200,没有被robots.txt屏蔽,也没有再跳向第三个地址。任何一环断了,后面的环节都不会按预期发生。所以检查顺序应该从最靠近请求的一端开始,而不是从搜索结果反推。
假设某站点把一批产品页从/old-product-a迁到/new-product-a,时间和人手有限,只能先排查最可能出问题的地方。可以按下面的顺序执行:
curl -I请求旧URL,看返回的是不是301,以及Location是否指向预期的新URL。Location里的地址再请求一次,确认它返回200,而不是又跳到别处或落到404。Disallow规则挡住。抓取限制不等于索引移除,但会妨碍搜索引擎及时抓取新地址。常见错误是只做了第1步就认为完成。旧URL返回301只能说明跳转动作存在,不能说明落地页可用,也不能说明搜索引擎最终会采用新URL。
依赖检查主要看状态码和关键响应头,可以按结果判断:
200:跳转规则没生效,问题在服务器或应用配置层。302:临时跳转,语义上不传递改版信号,需要改成301。404或410:旧地址已被移除,跳转规则没有覆盖到它。301但Location指向错误:规则匹配条件写错,通常是正则或路径拼接问题。301或302:出现链式跳转,应尽量收敛到一跳直达。404:落地页不存在,前面跳得再对也没有意义。如果旧URL和新URL互相指向,就形成循环跳转,浏览器和爬虫都会报错。这类问题只能通过逐条请求、记录每一跳的Location来定位。
服务器侧全部通过后,还要确认搜索引擎这一环。它依赖两件事:旧URL仍可被抓取,新URL允许被抓取。
可以在robots.txt中核对是否误屏蔽了旧路径或新路径。需要分清:robots.txt的抓取限制不等于可靠的索引移除,被屏蔽的URL仍可能因外部链接出现在结果中,但爬虫无法读取页面内容,跳转和更新也就难以被及时处理。
站点地图可以帮助发现新URL,但不保证收录。把新URL放入站点地图只是提供线索,不等于搜索引擎一定会抓取或替换旧结果。不同搜索引擎对跳转的处理节奏和支持情况需要分别核查,不能用一个平台的表现推断另一个。
如果只能先做一部分,按依赖顺序排:先修旧URL的状态码和Location,再修新URL的可访问性,最后处理robots.txt和站点地图。原因是前两环是后两环的前提,落地页不可用时,任何抓取引导都没有意义。
可以先用一小批代表性URL跑完整个链路,确认规则正确后再批量应用。短例子:假设只取5条旧URL,逐条记录状态码、Location、落地页状态码,若5条全部通过,再扩大到全量;若其中1条出现链式跳转,先修规则再继续。
下一步建议:挑出访问量或外链最多的旧URL,按上面的四环顺序逐条验证,把不通过的那一环记下来,优先修它。