检查301跳转设置在移动端与桌面端的差异,核心是分别用移动端和桌面端的User-Agent请求同一个URL,对比返回的状态码、Location目标地址和最终落地页。如果两端拿到不同的跳转目标或不同的状态码,说明跳转规则里存在按设备分流的逻辑,需要逐条核对。下面按准备、实施、验证、维护四步说明具体做法。
两端对比的前提是只改变设备标识这一个变量,其余条件保持一致。建议准备以下内容:
curl,或浏览器开发者工具的Network面板。这里的关键是不要让Cookie、登录状态、地区参数混进来。如果站点会根据登录态或地理位置再跳一次,先把这些变量排除,否则测出的差异无法判断是不是设备分流造成的。
以命令行方式为例,桌面端请求可以写成:
curl -I -A "桌面端UA字符串" https://example.com/old-page
移动端请求把UA换成移动端字符串,其余不变:
curl -I -A "移动端UA字符串" https://example.com/old-page
如果只关心状态码和Location,-I只发HEAD请求就够了。但有些服务器对HEAD和GET处理不一致,遇到可疑情况改用-i发GET请求再对比。要跟踪整条跳转链,加-L并配合-v查看每一跳。
浏览器侧的操作是:打开开发者工具,切到Network面板,勾选Preserve log,然后在地址栏访问目标URL,查看第一条请求的Status和Response Headers里的Location。移动端可以用设备模拟模式切换UA,但要注意模拟模式只改UA,不改其他特征,适合做初步对比,不能完全替代真实设备。
拿到两组结果后,按以下顺序比对:
https://example.com/new-page,移动端跳到https://m.example.com/new-page。两者都算301,但目标不同,需要确认这是有意设计还是配置遗留。差异的可能原因有几种:服务器配置里写了基于UA的条件跳转;CDN或反向代理层做了设备识别;前端JS在页面加载后又执行了一次跳转。前两种在响应头里就能看到,第三种在curl结果里看不到,需要看浏览器Network面板中是否有第二条文档请求。不要看到差异就断定是某一种原因,先确认差异出现在哪一层。
判断结果时可以参考这个标准:两端状态码和Location完全一致,视为无设备差异;状态码一致但Location不同,视为按设备分流,需要确认移动端目标是否有效且内容对应;状态码不同,视为跳转规则存在设备条件分支,优先排查服务器和CDN配置。
301跳转不是设完就不用管。改版、换CDN、调整移动站结构都可能改变某一端的跳转行为。建议在以下时机重新跑一遍上面的对比:
把每次的对比结果存档,下次出现问题时可以直接对照,判断是新增差异还是历史遗留。对于确认有意的设备分流,在配置注释里写清楚,避免后续维护者误删。
下一步:从你的URL清单里挑出流量最高的三个旧链接,用桌面端和移动端UA各请求一次,把状态码和Location填进记录表,先确认这两端是否存在跳转目标不一致的情况。