判断URL重定向是否正常,核心看三点:跳转目标是否指向预期页面、跳转类型是否与规划一致、跳转链路是否只有一跳。三点都符合就是正常重定向;只要有一项偏离,比如跳到无关页面、用错状态码、形成多跳循环,就属于异常。对第一次接触这个问题的人来说,起点是先明确“你期望它跳到哪里、用哪种方式跳”,再拿实际结果去对照,而不是凭感觉判断。
重定向不是一种东西,不同状态码含义不同,判断正常与否必须先分清你本来想要哪一种。
301:永久重定向,表示旧地址不再使用,权重和用户都应转向新地址。适合网址永久迁移。302:临时重定向,表示旧地址以后还会回来。适合短期活动页、临时维护。307:临时重定向,且明确保持原请求方法(如POST仍是POST)。适合需要保留请求方式的临时跳转。308:永久重定向,同样保持原请求方法。如果你规划的是永久迁移,实际却返回302,这就算异常,因为搜索引擎和浏览器会按“临时”处理,旧地址的权重不会按预期转移。
只看浏览器地址栏变化不够,因为浏览器会自动跟随跳转,把中间过程藏起来。要看真实链路,需要观察每一次响应。可以用命令行工具查看响应头:
curl -I https://example.com/old-page
重点看返回的HTTP/1.1状态码和Location字段。正常结果是:状态码是你规划的那一个,Location指向的目标正是预期的新地址。异常常见表现有:
Location指向一个你没预期的页面,可能是配置写错。发现异常时不要急着下结论。同一个现象可能有多种解释,需要逐步排除,而不是断言唯一原因。
比如“访问旧地址没有跳转”,可能原因包括:重定向规则没生效、规则匹配条件写错、服务器缓存了旧配置、前面还有一层CDN或反向代理拦截了请求。只有当你逐项检查、确认某一层确实没有配置或配置错误时,才能说“已经定位到原因”。
判断方法:先绕过缓存直接请求源站,再对比经过CDN后的结果。如果源站正常、经过CDN异常,问题就在CDN这一层;如果源站本身就异常,再去看服务器配置。
一次正常重定向完成后,应该同时满足以下条件:
Location指向的新地址是预期页面,且新地址能正常返回200。如果以上都满足,可以判定为正常。任何一条不满足,就按异常处理,回到对应环节排查。
需要提醒的是,重定向解决的是“地址指向”问题,它和robots.txt限制抓取、站点地图提交、HTTPS配置是不同层面的事。robots.txt的抓取限制不等于可靠的索引移除,站点地图也不保证收录,这些不要和重定向混在一起判断。
下一步:挑一个你确定要迁移的旧地址,用上面的命令实际请求一次,记录状态码和Location,再和你的规划逐条对照。对不上的那一项,就是你要继续排查的起点。