站点运营

站点运营:状态码自查,别让 200 兜底把失效页面藏起来

状态码是服务器给爬虫的第一句话,比页面内容更早被读到。本文梳理常见的 200 兜底、软 404、错误重定向写法,并给出抽样核验、日志统计、自定义错误页检查的自查步骤,帮你在失效地址上少浪费抓取和时间。

站点运营

站点运营:状态码自查,别让 200 兜底把失效页面藏起来

状态码是服务器给爬虫和浏览器最直接的一句话:这个地址是活着、搬走了,还是根本不存在。它比页面上写什么更早被读到,也更容易被忽略。很多站点的问题不是内容差,而是状态码给得含糊,导致蜘蛛在一个已经不存在的地址上反复来回,或者把一个真实的错误页当成正常内容收下。

一、常见的含糊写法

下面这些情况,本质都是让状态码和页面实际状态对不上:

  • 全站兜底:任何找不到的地址都返回 200,页面里再写一句「内容不存在」。
  • 软 404:URL 已经不在了,服务器还是回 200,加一段提示文字了事。
  • 重定向用错:永久迁移只给了 302,蜘蛛就一直按临时处理。
  • 错误页配置失误:自定义 404 页面做得很漂亮,但服务器把它当 200 返回。
  • 前端路由接管:找不到的路径在客户端渲染出 404 样子,HTTP 状态却是 200。
  • 异常被吞:后端报错时直接返回 200 加一片空白,5xx 从此在日志里消失。

二、自查可以这样做

  1. 抽样核验:从服务器日志或站点地图里,挑出正常页、已删除页、已改址页各几个,用 curl -I 或浏览器开发者工具的 Network 面板看返回的状态码。
  2. 统计日志:按状态码分组看分布,重点找那些返回 200 但内容为空、体积异常小的路径。如果某个路径长期被访问却总是空页面,基本就是兜底逻辑在起作用。
  3. 检查自定义错误页:确认访问一个明显不存在的地址时,状态码确实是 404 或 410,而不是 200。
  4. 检查重定向:永久改址用 301,一次到位;临时调整才用 302 或 307。顺手看看有没有绕成三跳的链。
  5. 盯住 5xx:服务器错误应当是告警指标,不要因为挂了好看的错误页就把 500 改写成 200。

三、给对状态码的几个原则

  • 内容确实不存在、也不会再回来:给 404;已经明确下线删除的,可以给 410。
  • 地址永久变化:301,并且直接指向最终地址。
  • 临时维护或活动期间:用 302,或者 503 配合 Retry-After 告诉对方稍后再来,别用 200 假装一切正常。
  • 权限相关的页面:老老实实返回 401 或 403,不要用 200 的登录提示页代替。
  • 不要用 meta refresh 或 JS 跳转替代服务端 301,这类跳转在状态码层面等于没有表态。
  • 单页应用或前端路由站点,需要在服务端或边缘层根据路由给出正确状态码,不能全部落到 200。
返回 200,但内容是「页面不存在」,等于告诉蜘蛛这里有一篇正常内容,它下次可能还会再来。

四、几个容易漏掉的位置

  • CDN 或反向代理可能统一改写状态码,配置改动后要重新验证一遍。
  • 多语言、多地区分站配置出错时,可能出现某个语言版本整体 200 空页。
  • 分页越界页、标签空结果页、站内搜索无结果页,如果都返回 200,会慢慢堆出一批空地址。
  • 表单提交后的结果页,不适合用 GET 方式生成可长期访问的地址。

五、把它变成日常动作

状态码检查不需要复杂工具,一条 curl 命令加一次日志统计就够,关键是放进上线清单和定期巡检里。日志中 5xx 比例抬头、404 在某个目录集中爆发、200 空页数量变多,都值得当天看一眼。早点把状态码理清楚,后面排查抓取异常、内容对不上号时,会省下不少来回确认的时间。