先给结论:入口页正常只能说明首页或栏目页这条响应链是通的,不能证明深层链接的请求也到达了同一处理逻辑。定位断点要先把“入口正常”拆成两个条件分别验证——入口与深层页是否共用同一套路由与重写规则,以及深层页的404是源站返回还是中间层返回。两者答案不同,后续动作完全不同。
如果入口页和深层页走的是同一套重写规则、同一应用实例,那么深层404最可能出在路径或参数的构造环节,而不是服务本身。此时应直接取一条失效的深层URL,与入口页URL做逐段比对:协议、主机名、路径层级、结尾斜杠、查询参数顺序、大小写。很多断点就藏在大小写不一致、多余斜杠或参数被截断上。
实际动作:从访问日志或抓取记录里挑一条返回404的深层URL,复制到命令行用curl -I请求,观察状态码与响应头中的Location或Server字段。如果源站直接返回404,说明请求确实到达了应用但路由未匹配;如果返回的是301或302再落到404,说明断点在跳转目标而不是原始URL。这一步的结果决定下一步是改路径还是改跳转规则,不要跳过。
例外:如果深层链接由前端路由(如单页应用)接管,服务端对任意深层路径都返回200,而404出现在客户端渲染之后,那么用curl看到的200并不能证明链路正常。此时要区分“HTTP层404”和“内容层404”,前者看响应头,后者要看渲染后的实际内容。
当入口页由静态文件或CDN缓存直接响应,而深层页需要回源到应用服务器时,两者的失效原因可能毫无关系。入口正常只是因为静态资源命中缓存,深层404则可能是回源失败、应用路由缺失或上游超时被兜底成404。
判断依据是响应头:源站返回的404通常带有应用框架的特征头,而中间层(CDN、网关、负载均衡)兜底的404往往带有该层自己的标识,且响应体可能是一段通用错误页。把这两类响应头并排看,就能判断断点在源站还是中间层。
实际动作:对同一条失效URL,分别从公网和源站直连两个位置请求,比较状态码与响应头差异。如果公网404而源站200,断点在中间层的缓存或回源配置;如果两处都404,断点在应用路由或数据层。这个对比结果直接决定你去改CDN规则还是改应用代码,方向错了会浪费大量排查时间。
不要只依赖“某条链接打不开”这一个现象。把证据按来源分成三类,能让原因互相排斥:
三类证据指向同一位置时,结论才可靠;只凭其中一类,容易把缓存问题误判成路由问题。
假设某站点入口页返回200,但一批深层详情页返回404。若比对后确认入口与深层共用同一重写规则,且curl显示源站直接404,那么动作是检查应用路由表与URL参数解析,修复后重新请求同一条URL,确认状态码变为200或301。若确认入口走静态缓存、深层需回源,且公网404而源站200,那么动作是检查中间层的回源路径与缓存键规则,修复后从公网重新请求验证。
两种条件下动作不同,验证方式也不同:前者验证应用层,后者验证中间层。修复后如果状态码仍未改变,说明断点不止一处,需要回到证据分类重新缩小范围,而不是重复同一动作。
robots.txt 限制抓取不等于可靠的索引移除,深层页返回404也不代表它一定会从索引中消失;站点地图提交同样不保证收录。这些事实影响的是“修复后如何验证”,而不是“断点在哪里”。定位断点时,先把响应链走通,再考虑索引层面的表现,顺序颠倒会把两件事混在一起。
另外,HTTPS 只保证传输加密,不保证链路无漏洞,也不保证深层页一定可达。若深层404伴随证书或协议错误,应把TLS层与应用层分开排查,不要默认加密正常就等于路由正常。