搜索抓取

用服务器日志复盘蜘蛛抓取:先看哪几个字段,异常怎么定位

服务器日志是复盘蜘蛛抓取最直接的材料。本文说明日志里该记录哪些字段、如何把搜索蜘蛛的请求单独切出来,以及状态码、抓取频次、响应时间这些分布该怎么读。同时给出三种典型日志形态的判断方式和对应的站内处理动作,适合在抓取量异常时按顺序排查。

搜索抓取

用服务器日志复盘蜘蛛抓取:先看哪几个字段,异常怎么定位

搜索引擎蜘蛛每天来几次、抓了哪些 URL、哪些请求是白跑一趟,答案通常就躺在服务器的访问日志里。相比在站长平台看汇总数据,日志能落到具体的 URL 和具体的时间点,排查问题时更直接。这篇文章讲的是怎么把日志读成一份能用的抓取报告。

日志里必须先记全的字段

不少服务器的默认日志格式只保留 IP、时间、方法、URL、状态码这五项,用来复盘抓取是不够的。建议至少补齐下面这些:

  • User-Agent,用来切分来源
  • 响应时间
  • 返回字节数
  • Referer,多数蜘蛛请求为空,可作为辅助判断
  • 如果有 CDN,把边缘处理时间和回源时间分开记录

响应时间和字节数决定了你能不能看出“这个页面被抓了但没有内容”或者“服务器是从哪一刻开始变慢的”。缺了这两项,很多结论只能靠猜。

把搜索蜘蛛的请求单独切出来

第一步是按 UA 过滤,把常见的搜索蜘蛛单独导成一份。要注意 UA 是可以伪造的,如果要做严谨判断,还得拿 IP 段和反向 DNS 做交叉核对。这一步可以定期做一次,不必每次分析都重跑。

过滤之后,手上就有一份只有蜘蛛的请求列表了。接下来关注的是分布,而不是总数。

五个值得看的分布

  1. 状态码分布:200、304、301/302、404、5xx 各占多少。5xx 一旦抬头,通常意味着服务器在抓取时段扛不住。
  2. 抓取频次的时间分布:蜘蛛的活动时段相对固定,如果某天开始明显偏移,往往是抓取队列调整,或者站点响应变慢导致的。
  3. URL 目录分布:抓取量集中在哪些路径,深层目录是不是长期为零。
  4. 按小时统计的平均响应时间:超过某个阈值之后,抓取量一般会跟着往下走。
  5. 重复抓取的 URL:同一个地址在短时间内被反复请求,常见原因是内容频繁变动、重定向或者参数带来的多地址问题。

三种典型的日志形态

状态码 200,但字节数很小

这多半是空列表、占位页,或者模板渲染失败后返回了一个空壳。蜘蛛认为抓到了内容,实际上没有可用的东西。找到那几个 URL 对照一下,判断是分页取空、接口超时,还是渲染组件没加载出来。

大量 404 集中在同一个模板

如果 404 的 URL 有共同的前缀或者参数结构,通常是链接生成逻辑出了问题,比如列表里输出了已经下线的 ID。修复之后 404 会在几天内回落,但要留意蜘蛛不会立刻停止访问老地址,短期内看到残留是正常的。

5xx 突发,随后抓取量下降

顺序一般是:服务器先报错,蜘蛛识别到错误后降低抓取频率,之后一段时间抓取量都偏低,即使服务恢复了也要等一等才回到原来的水平。所以发现 5xx 的第一件事是止血,先把错误返回压下去,而不是接着观察曲线。

从日志回到站内动作

日志本身不解决问题,它只是把问题指出来。常见的对应动作可以这样排:

  1. 目录长期零抓取:检查内链是否可达、Sitemap 是否覆盖、有没有 noindex 或 robots 拦截。
  2. 抓取量只集中在浅层:检查分页的下一页是否可点,深层内容有没有别的入口。
  3. 响应时间上升:分辨是数据库查询、图片资源还是第三方脚本,优先处理拖慢首字节的部分。
  4. 重复抓取:确认是否存在参数造成的多个地址指向同一内容,用 canonical 归一。
  5. 状态码异常:先修服务端返回,再考虑重定向和清理死链。
日志的价值在于把“蜘蛛抓得不理想”这种模糊感受,变成一个能定位到 URL 和时间的具体问题。建议保留至少 30 天的原始日志,并在每次改动上线后,对比前后两周的抓取分布,看看改动到底带来了什么变化。