先给结论:200状态码只说明服务器愿意交付内容,不说明这份内容是不是错误页。核对一致性要把“状态码、页面主体、响应头、实际请求路径”四件事放在同一次请求里比对,任何一项对不上,都应当按内容与状态不一致处理,而不是按成功页面处理。下面以一个你已经拿到手的错误页样本为对象,逐步转成可执行方案。
两种情况的处理方向不同,前提条件也不同。若同一路径在带与不带尾部斜杠、带与不带参数时,返回的状态码不同,问题更可能在路由或重写规则;若所有变体都返回200,但页面正文是“未找到”,问题更可能在错误处理模板的输出层。
可区分的证据是:用同一路径分别请求一次正常页面和一次明显不存在的路径,比较两者的响应头与正文。如果两者状态码相同、正文结构相同,只是文案不同,说明错误模板被当成了普通页面输出。这一步的实际动作是保存两次请求的原始响应,下一步的所有判断都以这份原始响应为基准,而不是以浏览器渲染后的画面为准。
不要只看状态码。打开原始响应后,按以下顺序核对,每发现一处不一致就记下来:
这里的实际动作是把不一致项写成一份对照记录。记录本身会决定下一步是改路由、改模板还是改缓存策略,三者不能混在一起改,否则无法判断哪一处改动起了作用。
假设某站点把错误页模板改成了返回404,但线上仍返回200。此时不要立刻怀疑模板没生效,先按下面的顺序排查:
假设三种原因都存在时,只改模板不会改变结果。可执行的做法是先绕开缓存直接请求源站,若源站返回正确状态,问题在缓存;若源站仍返回200,问题在应用层。这个结果直接决定下一步是清理缓存还是修改错误处理逻辑。
状态码改对不等于事情结束。错误页若仍带有可索引的元信息、指向首页的链接或与其他页面重复的标题,仍可能被当作正常内容处理。需要检查的是:错误页是否声明了不应被当作独立内容收录的信号,站内链接是否指向有效路径,以及同一错误模板是否被大量不同路径复用。
这里要说明适用条件:robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。因此不能靠屏蔽抓取来代替状态码修正。实际动作是修正状态码后再观察请求日志与索引状态,若日志中该路径的请求量下降,这只能说明抓取行为变化,不能单独证明处理正确,还要结合响应内容一起判断。
在动手改之前,先保存出问题路径的原始响应,包括状态码、响应头和正文摘要。修改后按完全相同的路径、相同的请求方式复测一次,比较两次结果。若状态码已变为错误码、正文仍保留错误提示、响应头不再声明可缓存,才算内容与状态一致。
若复测时状态码正确但正文变成了空白页,说明错误模板本身有问题,应回到模板层处理,而不是继续调整路由。若状态码仍为200,则回到前面的排查顺序,先确认缓存与兜底路由,再检查应用层输出。
整套核对的价值在于把“看起来是错误页”变成“可复查的一致性证据”,这样后续无论交给谁处理,都能从同一份记录继续,而不是重新猜测问题出在哪一层。