网站后台的访问统计通常只保留一部分样本,而且经过聚合处理,很多细节已经看不到了。服务器日志不一样,它是原始记录:搜索蜘蛛每一次请求都会留下时间、URL、状态码、响应大小和 User-Agent。把日志按蜘蛛筛选出来看一遍,抓取上的问题往往不需要猜,直接就能对上位置。
日志里先看哪些字段
不同服务器的日志格式略有差别,但下面这些字段基本都有,而且足够支撑大部分排查:
- 时间戳:判断抓取集中在白天还是凌晨,是否与站点负载高峰重叠。
- 请求方法:GET 占绝大多数,出现大量 HEAD 请求时值得留意。
- 完整 URL:包含参数,用来判断蜘蛛是否在抓筛选页、跟踪参数页。
- HTTP 状态码:200、301、404、500 的分布是最直接的线索。
- 响应体大小:状态码 200 但字节数长期很小,可能是空壳或占位页面。
- User-Agent:用来区分不同搜索引擎的蜘蛛,以及被伪装的采集请求。
先把蜘蛛请求单独筛出来
用 User-Agent 关键字过滤一次,把正常用户访问和蜘蛛访问分开。这样做的意义在于,两类流量的问题往往不是一回事:用户访问少但蜘蛛访问多的页面,通常是列表页或聚合页;蜘蛛访问少但用户访问多的页面,可能是入口藏得太深。
筛选时不要只看单一关键字,把主流搜索引擎的 UA 都列进来,同时留意同一 IP 段高频请求却带着蜘蛛 UA 的记录——这类请求不会遵守抓取规则,处理方式应该和真正的蜘蛛区分开。
状态码分布能说明什么
把日志按状态码分组统计,通常会看到几种典型情况。
5xx 集中出现
如果 500、502、503 集中在一个时间段,先查那段时间的服务器状态:是不是发布导致进程重启、数据库连接被占满、或者是某个接口超时拖垮了响应。蜘蛛连续拿到几次 5xx 之后,往往会降低抓取频率,恢复需要时间。
404 堆积在某个目录
零散的 404 很正常,但如果某个目录下的 404 数量明显突出,通常意味着站内还有旧链接指向已被删除的地址,或者 sitemap 里残留了失效 URL。这两个来源都要回去检查,而不是只盯着日志。
重定向被反复请求
301 出现次数多不一定是坏事,说明旧地址在被逐步替换。但如果同一个旧 URL 长期反复出现 301,说明内链里还在用它,应该把链接直接改成最终地址。
抓取频次与目录分布
把日志里蜘蛛请求的 URL 按一级目录归并,统计每类目录占了多少请求,再对照站点的真实重点。常见的情况是:内容页被访问的次数,远少于筛选页、标签页、分页列表和站内搜索结果页。这些地址由系统自动生成,数量可以无限扩张,很容易占掉大部分抓取请求。
处理思路是先看这些页面有没有独立价值,没有的做合并或屏蔽入口,有价值的补上 canonical 指向主地址,同时把内链从这些页面引回真正需要被看到的内容。
几个常见现象与处理方向
- 某个页面被抓了上千次:一般是列表页每有新内容就更新一次,先确认是否真的需要这么高的更新频率。
- 响应大小长期为 0:检查是否返回了空模板,或者内容由脚本加载,首次响应几乎没有正文。
- 抓取集中在深夜而白天几乎不来:可能是白天响应慢,或者有临时性的屏蔽规则在起作用。
- 重要栏目几乎没有抓取记录:多半是没有内链入口,先把它接回导航或相关推荐里。
日志要按时间留存
单次分析只能看到一个切面。建议按月保留原始日志文件,至少保留半年,这样改版、调整结构、上线新栏目之后,可以拿前后两段时间做对比,看抓取结构有没有朝预期的方向变化。对比的重点不是请求总量的涨跌,而是目录占比、状态码分布和核心页面的抓取次数。
日志分析的价值在于定位问题,不在于追求某个数字好看。抓住关键页面的抓取是否稳定、异常状态码是否在减少,比盯着访问总量更有意义。
养成定期看日志的习惯,把它和站点结构、栏目规划放在一起考虑,很多抓取上的疑问会在记录里找到答案。