检查移动端与桌面端的重定向差异,核心是分别用移动端 User-Agent 和桌面端 User-Agent 请求同一批 URL,对比返回的状态码、Location 响应头和最终落地页是否一致。最容易出问题的一步是:不要只看浏览器地址栏最终显示的页面,而要用能显示完整跳转链的工具,逐跳记录每一端的响应。因为地址栏只呈现终点,中间某一跳在移动端被改写或循环,往往看不出来。
多人协作时,返工通常来自“两端测的不是同一件事”。准备阶段需要把以下条件写进交付说明:
GET,注意 HEAD 有时不返回与 GET 完全一致的响应头。把清单和 UA 写进同一份表格,两端结果填在同一行,后续验证和回归都基于这份表格,避免口头描述。
用命令行工具可以清楚看到跳转链。下面用 curl 举例,分别模拟两端:
curl -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 Mobile/15E148 Safari/604.1" -I -L https://example.com/old-page
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0 Safari/537.36" -I -L https://example.com/old-page
把 -I 换成 -i 可以连同响应体一起看。重点记录:
301、302、307 还是 308。Location 头的目标地址两端是否相同。如果一端返回 200 而另一端返回 301,说明服务端可能按 UA 做了分流或做了移动端适配重定向。这不一定算错误,但必须确认它是否符合预期,并写进交付记录。
拿到两端数据后,按下面几项逐条判断,而不是凭感觉认定“差不多”:
m. 子域或独立移动路径时,要确认该目标可访问且不是临时页。200,出现循环即为问题。? 参数的旧链接,重定向后参数是否丢失,影响落地页判断。假设一个例子:某旧链接在桌面端返回 301 指向新页,移动端返回 302 指向一个临时活动页。前者是永久迁移,后者是临时跳转,两者对缓存和后续维护的含义不同,需要确认移动端是否本来就该走临时页。这里的关键不是哪个状态码“更好”,而是两端行为是否符合业务预期。
验证通过后,把两端 UA、请求命令、预期状态码和目标 URL 固化成一份检查脚本或表格。每次改版、换 CDN、调整移动端适配规则后重跑同一份清单,对比新旧结果。若某条从一致变为不一致,先定位是配置改动还是 UA 判断逻辑变化,再决定是否修复。
需要提醒的是,重定向配置正确并不等于页面会被收录,robots.txt 的抓取限制也不等于可靠的索引移除。这些属于另外的核查范围,不应和本次两端差异检查混在一起下结论。
下一步:挑出清单中两端结果不一致的 URL,逐跳打印响应头,确认差异出现在哪一跳,再把该跳的配置和预期写进交付记录。