检查 404 not found 在移动端与桌面端的差异,核心是分别用两类设备的真实请求做对照:同一 URL 在桌面端返回 404,在移动端却可能返回 200 或跳转,原因通常在于服务端对 User-Agent、Accept 头或重定向规则做了不同处理。判断方法不是看页面长得像不像,而是看 HTTP 状态码、响应头和最终落地 URL 是否一致。
两端检查 404 时,至少要记录三样东西:
Content-Type、Location、Vary 是否不同。只有三项都一致,才能说两端对同一 URL 的处理相同。若状态码不同,说明服务端在入口层就分流了;若状态码相同但最终 URL 不同,说明重定向规则按设备做了区分。
404 表现不一致,可能的原因包括:
m. 子域或独立路径,而该路径未配置对应规则。这些是可能原因,不等于已经定位。要确认是哪一项,需要逐层排除,而不是看到差异就归因于某一处。
按下面顺序操作,能较快缩小范围:
Location 与 Vary。curl -I -A "Mozilla/5.0 (iPhone...)" https://example.com/xxx,对比返回码。适用条件:这套步骤适合自有站点或可控制请求头的环境。若无法修改请求头,只能依赖浏览器模拟,结论会弱一些。判断结果:两端状态码和最终 URL 一致,才算处理一致;只要有一项不同,就存在设备分流。
面对两端不一致,通常有两种处理方向:
选择依据是:如果该 URL 确实已不存在且无等价内容,用 404 更合适;如果有明确替代页面且长期有效,用 301 更合适。不要一端 404、另一端 301,这会让抓取和监控结果互相矛盾。
移动端与桌面端的差异,有时不在状态码,而在响应头。例如 Vary: User-Agent 缺失时,CDN 可能把桌面端缓存返回给移动端,造成看似随机的 404。另一个细节是软 404:页面返回 200,但内容显示“未找到”。这种页面在两端都可能出现,需要单独用状态码工具确认,不能只看页面文字。
robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。检查 404 差异时,应把抓取、索引和状态码分开看,避免把不同层面的问题混在一起。
下一步:挑一个两端表现不同的 404 URL,按上面的步骤记录状态码、最终 URL 和响应头,再决定是统一为 404 还是统一为 301。