服务器日志是蜘蛛抓取行为最直接的记录。它不像后台报表那样经过汇总,却保留了每一次请求的时间、URL、状态码和来源。很多关于 URL 发现和抓取路径的问题,都能在这里找到线索。
一张日志表里值得看的几列
不同服务器的日志格式略有差异,但核心字段差不多:
- 时间:判断抓取集中在哪个时段,是否与站点自身流量高峰重叠。
- 请求方法与 URL:包含完整路径和参数,能看出蜘蛛在抓哪些形态的地址。
- 状态码:200、301、304、404、429、503 各自说明不同问题。
- 响应字节数与耗时:帮助判断页面大小和服务器处理速度。
- User-Agent:用于初步区分蜘蛛种类,但只能作为参考。
- Referer:蜘蛛是从哪个页面跳到这个 URL 的,这是抓取路径最直接的证据。
Referer 能还原蜘蛛的走法
很多人看日志只看被访问的 URL,忽略了 Referer。对蜘蛛请求来说,Referer 往往就是它上一个抓取的页面。如果某个详情页的 Referer 长期只有首页,说明中间列表页没有起到承接作用;如果某个栏目页从未出现在任何详情页的 Referer 里,那它可能只是被单独抓取,没有被当作入口来用。
把一天内同一蜘蛛的请求按时间排序,再补上 Referer,就能大致画出一条抓取路径:入口 → 列表 → 详情。路径在哪一层断掉,通常就是内链或分页设计的问题。Referer 也可能为空,这表示蜘蛛是从 Sitemap、外部链接或历史记录中直接拿到的 URL,需要结合其他信息再判断。
状态码分布说明什么
- 200:正常抓取。看同一 URL 一天被取几次,过高的重复抓取往往意味着更新信号不够稳定。
- 301/302:跳转本身不致命,但如果跳转链长,或大量入口都指向跳转地址,抓取成本会被白白消耗。
- 304:说明内容没变,蜘蛛通过条件请求省了带宽,属于健康状态。
- 404/410:少量正常,成片出现通常说明内链或 Sitemap 里存在失效地址,需要清理。
- 429/503:站点在主动限速或已经过载,蜘蛛会降低频率,恢复需要时间。
- 5xx:服务器错误。如果集中在某个时段,要检查那段时间的负载、数据库或缓存。
用日志检查抓取深度
把 URL 按目录层级归类,统计每一层被抓取的 URL 数量,可以判断蜘蛛往下走了多远。常见的现象是首页和一级栏目抓取很多,二级列表骤减,详情页几乎没有。这通常不是蜘蛛不愿意走,而是中间层的链接不够明显、分页太浅,或者需要交互才能展开。
这时可以对照 Sitemap 里提交的 URL 数量。如果 Sitemap 提交了大量详情页,而日志里这些 URL 很少被访问,说明清单被读到了,但内链没有把它们变成常规路径。Sitemap 负责让蜘蛛知道有哪些 URL,内链负责让蜘蛛反复走到这些 URL,两条通道都顺,发现和回访才稳定。
几个常见信号与对应动作
- 列表页只有第一页被抓:检查分页链接是否为可点击的 a 标签,是否被懒加载遮挡。
- 带参数的 URL 大量被抓:梳理筛选、排序参数的组合,考虑用 robots.txt 或规范化收敛。
- 详情页被抓一次后不再回访:看页面是否有稳定的更新信号,以及是否在合适的栏目里被链接。
- 某个时间段 5xx 增多:对照服务器监控,确认是否因抓取并发与自身流量叠加导致。
把日志变成每周的固定动作
不需要逐条读完整个日志。可以每周抽一天,按蜘蛛筛选出请求,做三件事:看新增 URL 主要从哪个 Referer 来、看重点栏目的抓取次数有没有明显变化、看 5xx 与超时占比是否异常。坚持几周,就能区分哪些是偶发波动,哪些是结构问题。
日志不会直接告诉你怎么改,但它会告诉你蜘蛛实际走了哪条路、在哪里停下。先看路径,再动结构。