搜索抓取

软 404 与空壳页:返回 200 的地址在抓取日志里怎么识别

很多地址返回 200,但页面没有实质内容,蜘蛛抓过一次就不再回访。这类软 404 与空壳页不会报错,需要在响应体大小、内容模板与抓取日志里交叉核对。本文给出识别思路与处理顺序,包括模板页、空搜索结果页、参数组合页的取舍,以及源站与 CDN 返回结果不一致时的排查方向。

搜索抓取

软 404 与空壳页:返回 200 的地址在抓取日志里怎么识别

抓取日志里最容易被忽略的一类问题,是状态码正常但内容空洞的地址。它们返回 200,服务器没有报错,蜘蛛也愿意抓,但抓到的页面没有可索引的实质内容。这类地址会持续消耗抓取资源,也会稀释站点的内容质量信号。

软 404 与空壳页的区别

软 404 通常指本该返回 404 的地址,被服务器用 200 加一段“内容不存在”的提示页返回。空壳页则是地址本身有效,但页面内容由模板拼凑,缺少独立信息。两者在日志里的表现接近:都有 200、都有正常的响应头,区别主要在返回内容与页面本身的设计意图。

判断时可以关注三点:

  • 响应体大小是否长期稳定在模板的最小值附近;
  • 页面主体是否存在与 URL 相关的独有信息;
  • 同一批地址是否只在参数或路径末尾不同,内容却高度相似。

常见的空壳页面形态

  • 站内搜索结果页,尤其是无结果或结果很少的关键词;
  • 筛选参数组合后没有匹配内容的列表页;
  • 用户主页、标签页、归档页在数据为空时仍然输出模板;
  • 改版后保留的旧模板页面,只剩导航与页脚;
  • 需要登录或需要交互才显示内容的入口页。

这些地址往往由内链或 Sitemap 主动暴露,蜘蛛顺着入口一路抓下去,最后停在大量无内容页面上。

从抓取日志里识别

日志本身不会标注“这是空壳页”,需要结合几个字段交叉核对:

  1. 响应体大小:把同类 URL 的字节数排序,长期处于最小值区间的一批地址值得单独查看。
  2. 抓取频次变化:正常页面在被抓取几次后会进入相对稳定的回访节奏,空壳页往往抓过一次就不再出现。
  3. 抓取深度分布:如果某一层级的 URL 数量庞大但几乎不产生后续抓取,说明这一层没有可继续延伸的内容。
  4. 抓取时间集中度:大量空壳页集中在同一时间段被抓取,通常意味着它们来自同一个入口。

把这些线索放在一起看,比单看状态码更容易定位问题。

返回码与内容的一致性核对

规范的写法是:地址不存在就返回 404 或 410,不要用 200 加提示文案代替。需要保留的内容页面,则确保返回 200 时有实际内容。以下几类情况需要重点核对:

  • 前端路由站点把所有路径都交给同一个 HTML 模板;
  • 接口出错时返回 200 加错误 JSON,页面再渲染为空;
  • CDN 缓存了错误状态,源站正常但边缘节点返回空内容。

另外要留意响应头里的缓存策略。如果空壳页被缓存了较长时间,蜘蛛在短时间内会反复拿到同一份空内容,抓取节奏被打乱,日志上看起来像是频繁回访,实际并没有新信息可取。

状态码只说明请求是否被正常处理,不说明这个地址是否值得被抓取。这两件事需要分别核对。

处理顺序建议

  1. 先确认这批地址是否应该存在。不该存在的,直接返回 404 或 410,并清理指向它们的入口。
  2. 应该存在但内容为空的,先补内容,再决定是否开放抓取。
  3. 参数组合产生的空页面,用 robots.txt 规则或页面级 noindex 收敛,不要让它继续出现在内链与 Sitemap 中。
  4. 把处理结果与 Sitemap、内链入口同步更新,避免入口仍指向已下线的地址。
  5. 处理完成后观察一段时间的日志,确认抓取集中在有内容的页面上。

服务器稳定性同样会影响判断。返回码抖动、超时与 5xx 会掩盖真实的内容状态,建议在站点响应平稳的时段再做核对,必要时对照源站与 CDN 两边的返回结果,确认蜘蛛拿到的是哪一份内容。