直接结论:先不要改任何东西,把同一URL的响应状态、响应正文和页面在浏览器中的最终可见内容分别取样,三者对不上时以正文中的错误信号为准,再决定是修服务端逻辑还是修检测规则。下面用一个假设情境把决策过程走完。
假设某站点在改版时把错误页交给前端路由渲染:访问一个不存在的路径,服务器先返回 200,再由前端脚本显示“页面不存在”。此时用只检查状态码的脚本做网站死链检测,结果会是零死链,但真实情况是大量无效URL被当成正常页。
这里的关键变化不是“多了几个坏链”,而是判定依据本身失效了。变化之前,状态码可以作为主判据;变化之后,状态码只能当参考,必须引入内容层证据。
对同一个可疑URL,分别取三份证据,不要混在一起看。
curl -I 或等效方式只看状态行和 Content-Type,确认返回的是 200、404 还是 410。curl 不带 -I 取完整HTML,搜索错误提示文案、<title>、<meta name="robots"> 等字面量。动作与结果:如果响应头是 200、正文里却出现“页面不存在”且 <title> 也是错误标题,那么可以确定这是软404,而不是误报。下一步应去改服务端,让这类路径返回真实错误状态,而不是继续调检测脚本。
两种不一致指向完全不同的责任方,处理顺序也不同。
把这三类混在一起统计,会得出“死链数量上升”或“死链已清零”这类无法指导动作的结论。
不要只看一个字段,用一组可区分的原因来交叉验证。
<title> 与页面主标题是否一致,是否包含“404”“不存在”“已删除”等词。Content-Length 是否与正常内容页处于同一量级。<meta name="robots" content="noindex">,这能辅助判断意图,但不能替代状态码。需要提醒:robots.txt 的抓取限制不等于可靠的索引移除,站点地图不保证收录。这两点常被拿来当作“已经处理好了”的理由,但它们不能修复状态与内容的不一致。
假设改版前有 500 个失效URL返回 404,改版后这 500 个全部变成 200 + 错误提示内容。抽样 20 个,逐个记录状态码、<title> 和可见文案,会发现状态码全部“正常”,而标题全部异常。
这时如果只看状态码,会得出“死链已修复”;如果只看标题,会得出“死链增加”。正确做法是把两份记录并排,确认状态码与内容意图相反,然后把修复目标定为“让错误页返回真实错误状态”,而不是“删掉检测规则”。修完后再抽同一批URL,确认状态码与内容意图一致,才进入下一步。
数字只用于说明比较方法,不代表任何真实站点的表现。
只有当同一URL满足以下条件时,才认为一致性问题已解决:状态码为 404 或 410,正文为错误提示,且两者在同一份取样记录中同时成立。若只满足其中一项,说明还有一层没改到位,应回到对应环节继续核对,而不是扩大检测范围。
另外,HTTPS 不保证安全无漏洞或排名,它和状态码正确性没有直接关系,不要把它当作判定依据。不同搜索引擎对软404的处理方式存在差异,需要分别核查,不能用一个平台的表现推断全部。