核对的核心是让状态码与页面内容互相印证:先确认该 URL 是否真的不存在或不可用,再检查服务器返回的 HTTP 状态行与页面正文是否表达同一件事。若正文写着“页面不存在”,响应却是 200,就属于不一致,应优先修正状态码,而不是只改文案。
假设一个情境:某站点把旧产品页批量下线,保留了一个带“该页面已下线”说明的模板,模板由同一套程序渲染,默认输出 200。运维认为“用户能看到解释就够了”,SEO 认为“必须返回 404”。两种做法各有成立条件。
判断的分界不是“页面好不好看”,而是“这个 URL 以后还会不会作为独立内容存在”。会,就保留 200 并补足内容;不会,就让状态码如实表达移除。
不要只看浏览器渲染结果,浏览器会把错误页也画得很正常。用命令行取响应头,再取正文,两者对照:
curl -I https://example.com/old-page 看首行状态码与 Content-Type;curl -s https://example.com/old-page | head -c 500 看正文开头是否出现“不存在”“已下线”等措辞。
如果状态行是 HTTP/1.1 200 OK,正文却写着资源不存在,就确认了不一致。此时的动作是回到应用层,找到渲染该模板的路由或控制器,让它按资源是否存在决定输出 404 还是 200;改完后重跑上面两条命令,确认状态行与正文同时变化。这个动作的结果直接决定下一步:若状态码已改而正文仍显示旧文案,问题在缓存或模板;若两者都未变,问题在路由判断逻辑。
状态码和内容不一致,未必来自源站。常见干扰有三类:
区分方法很简单:对同一 URL 分别请求源站与 CDN 节点,若状态码不同,问题在中间层;若相同,问题在源站应用。这个区分会改变你下一步去改哪一层配置。
多人协作时,口头说“已经改成 404 了”不足以复查。建议每次核对留下三样东西:请求的完整 URL、响应首行状态码、正文中能证明页面性质的一段文字。三者放在同一条记录里,任何人重跑都能得到相同结论。
需要提醒的是,状态码归零或抓取量下降本身不能证明处理正确。它也可能来自抓取预算调整、robots.txt 变更或站点整体流量波动。要确认修复生效,仍应回到状态行与正文的一致性上判断,而不是只看某个统计数字的涨跌。
状态码改对之后,再检查两件事:一是该 URL 是否被站点地图或内部链接继续引用,若仍被引用,应同步移除或改指向替代页;二是 robots.txt 是否屏蔽了该路径,抓取限制并不等于索引移除,被屏蔽的 URL 仍可能因外部链接出现在结果中。这两项都确认后,这次核对才算闭环。