先给结论:当错误页面返回 200 时,核对的重点不是“它有没有被抓到”,而是“响应状态、页面正文、站点意图”三者是否指向同一件事。做法是把状态码、正文特征、内部链接意图分别取样,再判断这种不一致是配置事故还是业务设计,然后决定是修状态码、修内容,还是保留 200 但换掉页面含义。
下面用一个明确标为假设的情境串联判断过程,避免把结论套到你的站点上。
假设某电商站把一批下架商品页保留为“已下架”提示页,模板层仍输出 200,正文里却写着“该商品不存在”。此时三种信号互相冲突:状态码说“正常”,正文说“不存在”,站内搜索和分类页又不再链接它。
这类页面的麻烦不在于用户看到什么,而在于后续判断会被带偏。若只看抓取日志发现请求正常、返回 200,很容易得出“页面健康”的结论;若只看正文,又会以为它已经被当成错误页处理。两个观察都对,但合起来才是问题本身。
不要用浏览器地址栏的显示结果代替响应核对。地址栏可能展示缓存内容,也可能在你看到页面后再发生跳转。更可靠的方式是直接看响应头里的状态行,并同时保存正文首屏文本。
取样时至少覆盖三类 URL:
把三组结果并排看,才能分清“200 是模板默认行为”还是“只有个别页面异常”。如果只有下架页返回 200,而正常商品页也返回 200,那说明状态码没有承担区分职责;如果正常页也出现正文与状态不符,问题就在更上层的模板或路由。
实际动作:先固定一次取样口径,例如同一时间段、同一 User-Agent、同一路径集合,记录状态码和正文中的关键短语。这个动作的结果决定下一步:若异常只集中在某一类模板,优先改模板;若分散在多个路由,先查统一的状态码输出逻辑。
错误页面返回 200,常见原因并不相同,对应的处理也不同。
区分这三类,靠的是正文之外的信息:页面是否还被内部链接引用、是否有 canonical 指向别处、是否出现在站点地图里。若一个“不存在”页面仍被站点地图收录,说明站点意图本身没有统一;此时只改状态码,站点地图仍会继续送出冲突信号。站点地图不保证收录,但它能暴露站点对页面的态度。
单页状态正确,不等于整站意图一致。需要把几个信号放在一起看:内部链接是否还指向该 URL、站点地图是否还列出它、canonical 指向哪里、robots.txt 是否允许抓取。
这里有一个容易误判的点:robots.txt 的抓取限制不等于可靠的索引移除。如果错误页面返回 200,又用 robots.txt 挡住抓取,抓取工具可能无法读到正文里的“不存在”提示,却仍保留对 URL 的既有认知。抓取量下降或该路径请求归零,不能单独证明处理正确,也可能是抓取被限制、链接被撤下或站点整体抓取预算变化造成的。
同样,HTTPS 只说明传输层配置,不保证页面状态与内容一致,也不保证排名。把安全协议当成状态码问题的解释,会掩盖真正的模板分支错误。
实际动作:列出该 URL 当前收到的所有信号,逐项标注“指向存在”还是“指向不存在”。若多数信号指向不存在、只有状态码指向存在,优先修正状态码;若多数信号仍指向存在,先决定业务上是否真的要下架,再动技术配置。
关键前提变化会改变结论。以下条件可作为分界:
不同搜索引擎对状态码和软 404 的处理并不完全一致,支持情况须分别核查,不能用一个平台的表现推断另一个平台。核对时保留原始响应和正文样本,后续复查才有可比口径。
回到假设情境:如果这批下架页属于永久下架且无替代,正确顺序是先撤下内部链接和站点地图条目,再让状态码返回 404 或 410;如果只是临时缺货,则保留 200,但把正文、结构化数据和链接意图统一成“暂时无货”。两种选择成立的条件不同,不能只凭“页面还能打开”就决定保留 200。