curl -sI https://example.com/deleted-post | head -1 # 必须看到 404 而不是 200 # 状态码要在输出正文之前设置
文章删掉之后地址还能正常打开,页面显示没找到内容,HTTP 状态码却还是 200,收录一直挂着几个月都掉不下来。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,模板先输出页头再去判断内容在不在,状态码在渲染之前就已经发出去了,后面想改也改不回来,这是软 404 问题最常见的来源。
「软 404 返回 200」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
处理上按这个顺序:在查询阶段就判断文章到底存不存在,别等到模板渲染;确认不存在时,在输出任何内容之前就把 404 状态码设置好;确认响应头里没有提前刷出去的内容,连空白行也要检查。
改完只确认一件事:被删掉的地址返回 404,收录里对应的那些条目会开始逐步减少。
