判断爬虫日志里的异常属于哪一层,关键是看请求是否到达服务器、服务器返回了什么、返回内容是否值得抓取。把日志中的状态码、请求路径、User-Agent、响应大小和抓取频次放在一起,就能把问题归入访问层、抓取层、索引层或内容层,而不是把所有异常都当成同一个原因处理。
如果日志中完全没有某个目录或某类页面的请求记录,问题通常不在页面内容,而在更前面的访问层。常见原因包括:robots.txt 中写了限制规则、页面只通过 JavaScript 链接暴露、站内链接结构太深、服务器防火墙或 CDN 规则拦截了爬虫。
判断方法是先确认日志覆盖的时间段和爬虫类型,再对比站点地图、内部链接和实际日志中的路径。如果站点地图里有某个 URL,但日志中从未出现对应请求,说明爬虫没有走到这一步,应优先检查抓取限制和链接可达性,而不是修改页面正文。
这里要区分“可能原因”和“已经定位的原因”。日志中没有请求,可能是 robots.txt 拦截,也可能是链接没有被发现,还可能是日志本身没有覆盖到该爬虫。只有把这几项分别核对后,才能确定是哪一种。
请求已经到达服务器,但返回状态码异常,问题属于抓取层。常见的判断依据是:
4xx:页面不存在、权限不足或链接写错。需要检查该 URL 是否应该存在,以及是否被错误删除。5xx:服务器错误、超时或后端不稳定。需要结合同一时间段的服务器监控判断是偶发还是持续。3xx:重定向链路过长或指向错误。需要检查最终落点是否是可抓取页面。200:请求成功,但还要继续看返回内容是否有价值,不能只凭状态码判断没问题。如果大量请求集中在少数参数组合或重复路径上,可能是爬虫在消耗抓取预算。此时要比较这些 URL 是否真的需要被抓取,再决定是合并、屏蔽还是保留。
状态码正常,但页面返回的是空壳、登录页、验证页或与主题无关的内容,问题属于内容层或渲染层。判断方法是查看日志中的响应大小和抓取频次:响应大小长期很小,可能说明返回的是模板页或错误占位;同一页面被反复抓取但内容没有变化,可能说明页面质量或更新信号不足。
如果页面依赖 JavaScript 渲染,还要区分“服务器返回了 HTML”和“爬虫是否执行了脚本”。日志只能证明请求发生过,不能直接证明渲染后的内容被读取。需要结合渲染测试或服务端日志进一步确认。
把日志现象按下面四层归类,可以减少误判:
robots.txt、防火墙、链接入口。这里的“索引层”需要单独说明:robots.txt 的抓取限制不等于可靠的索引移除;站点地图不保证收录;HTTPS 不保证安全无漏洞或排名。不同搜索引擎对同一规则的支持情况须分别核查,不能用一个平台的表现推断另一个平台。
假设某目录在日志中请求量很低,但站点地图中收录了大量该目录 URL。此时先不要直接改写正文,而应检查这些 URL 是否被 robots.txt 限制、是否缺少内部链接、是否返回了 4xx 或 5xx。只有排除访问层和抓取层后,才进入内容层判断。这个顺序能避免把服务器问题误当成内容问题,也能避免把内容问题误当成抓取限制。
下一步可以选一个具体目录,导出最近一段时间的日志,按状态码和请求路径做一次分组统计,再与站点地图和内部链接逐项对照,先确定问题层级,再决定修改动作。