验证修复后的301重定向响应,核心是确认三件事:原URL返回的是301而不是302或200,跳转链只有一跳且中间没有多余节点,最终落地页返回200并与预期目标完全一致。只看到浏览器地址栏变了并不算验证通过,必须拿到每次跳转的状态码、Location头和最终响应头作为证据。
当站点做过URL结构调整、更换域名、合并重复页面或修正错误跳转后,需要确认修复是否真正生效。适用对象包括:单个页面的重定向规则、批量规则、服务器配置层面的跳转、以及CMS或插件生成的重定向。不适用的情况是:原URL本就该返回404或410,此时不应强行加301。
验证前要先确认修复的目标:原URL应该永久指向哪个新URL,这个新URL必须可访问且内容相关。如果目标页本身返回404或500,那么即使301响应正确,整条链路仍然是失败的。
最直接的方法是请求原URL并只看响应头,不跟随跳转。以curl为例,可以执行:
curl -I http://example.com/old-page
重点看三项:第一行状态码应为301;响应头中应有Location字段,其值就是目标URL;如果同时出现301和200两段响应,说明工具默认跟随了跳转,需要加-I并配合不跟随参数重新抓取,或直接查看第一段响应。
判断结果:状态码是301且Location指向预期目标,这一跳通过;状态码是302、307或200,说明修复未生效或规则被覆盖;没有Location头,说明301配置不完整。
301修复常见的问题是跳转链过长,例如A→B→C,甚至A→B→A形成循环。验证时要逐跳抓取,而不是只看最终页面。
可以按顺序请求:先请求原URL拿到Location,再请求该Location拿到下一个响应,直到返回200。记录每一跳的状态码和地址。验收信号是:从原URL到最终200页面之间,只允许一次301跳转。如果出现两次以上301,应把中间跳转合并为直接指向最终目标。
如果发现循环,例如A的Location是B,B的Location又是A,说明规则互相冲突,需要回到配置中定位哪条规则优先匹配。这类问题通常出现在同时存在服务器配置、CMS插件和CDN边缘规则的情况下。
301的终点必须是200页面,且内容与用户预期匹配。验证时对最终URL执行:
curl -I https://example.com/new-page
确认状态码为200,没有再次跳转。然后检查三件事:目标页是否可正常渲染、页面主题是否与原页面相关、页面上的规范链接是否指向自身而非旧URL。如果目标页返回404、410或500,说明跳转目标选错了,需要重新指定。
另外要区分协议和主机名的一致性。如果原URL是http,目标URL是https,或者带www与不带www混用,跳转链中可能多出一跳。验收时应确认从原URL直接跳到最终协议和主机名,不经过中间协议切换。
建议对每个待验证URL记录以下字段:原URL、第一跳状态码、第一跳Location、跳转次数、最终URL、最终状态码、验证时间。这样在批量修复后可以快速比对哪些通过、哪些仍需处理。
检查项清单:状态码是否为301;Location是否指向预期目标;跳转次数是否为1;最终页是否返回200;最终页是否可访问且内容相关;是否存在http与https、www与非www之间的多余跳转。任何一项不符合,都应回到配置中修正后重新抓取,而不是仅凭浏览器访问结果判断。
下一步:选取修复清单中的第一个URL,用不跟随跳转的方式抓取响应头,按上面的字段记录结果,再决定是继续验证下一个还是先修正当前规则。