做蜘蛛池时,常见的两类数据是面板里的抓取统计和服务器上的访问日志。面板数据直观,但经过聚合与抽样;日志原始,需要自己整理,却更接近事实。想确认蜘蛛到底抓了哪些 URL,日志通常是唯一能逐条核对的来源。
日志里值得看的字段
不同服务器和 CDN 的默认格式有差异,但下面这些字段最好都保留:
- 来源 IP:判断蜘蛛身份的第一依据;
- User-Agent:参考信息,可以伪造;
- 请求时间:用来观察抓取的时间分布;
- 请求方法与完整 URL:包括参数部分;
- 状态码:200、301、404、5xx 各占多少;
- 响应字节数:区分真实返回与空响应。
如果默认日志里缺 UA 或响应时间,在 Nginx 的 log_format 里补上即可,改动很小,但后续排查会轻松不少。日志保留周期建议不少于 30 天,否则很难看出趋势。
不要只看 UA,要配合 IP 段
UA 是最容易被伪造的字段,任何脚本都可以把自己写成 Googlebot。相对靠谱的做法是:先按 UA 粗筛,再用搜索引擎官方公布的 IP 段做二次核对,必要时通过反向 DNS 验证域名后缀是否匹配。两步都过了,再把这些请求当作真实蜘蛛流量来统计。
把 UA 和 IP 段结合起来判断,是日志分析里成本最低、收益最直接的一步。
从日志里能发现的几类问题
抓取集中在少数 URL 上
如果一周的日志里,某个入口页被反复抓取,而其他入口页几乎没有记录,通常说明内链或 sitemap 的权重分配不均。这时优先检查入口页之间的链接数量差异,而不是急着新增页面。
反复抓到参数乱序的版本
同一路径带不同参数顺序、大小写混用、末尾斜杠不一致,都会在日志里表现为多个独立 URL。这类重复抓取会占用本来就不多的抓取配额,需要在服务端做 301 归一。
状态码分布异常
把状态码按天聚合,如果 404、410 或 5xx 的比例突然上升,往往是内容被删、路径改动或后端不稳定。5xx 尤其需要注意,持续返回错误会让蜘蛛降低对该目录的抓取频率。
响应字节数偏小
字节数为 0 或只有几百,可能意味着返回了空页面或纯跳转。入口页如果长期这样,蜘蛛拿不到有效内容,后续的抓取安排也会受影响。
把日志与 sitemap 对照使用
一个很实用的检查方法:导出 sitemap 里的 URL 清单,与日志中出现过的 URL 求交集。差集里那些长期没有抓取记录的入口页,就是需要重点排查的对象——是链接太少、层级太深,还是被 robots.txt 挡住了。
几个容易踩的误区
- 只看抓取总次数,不看具体抓了哪些 URL;
- 把 UA 当成身份证明,不做 IP 核对;
- 日志经过 CDN 或反向代理后来源 IP 变成节点 IP,需要看 X-Forwarded-For 之类的字段;
- 数据量太大就直接抽样,结果漏掉低频但重要的入口页。
落地建议
如果不想每次都手工翻日志,可以写一个简单脚本按小时聚合:先按 IP 段筛出蜘蛛,再按状态码和 URL 分组统计,最后输出一份“本周未被抓取的入口页清单”。这份清单不用天天看,按内容更新节奏每周或每两周核对一次就够了。日志分析不能保证收录,但它能让你在问题积累成灾之前先发现它。