很多人判断蜘蛛池有没有起作用,第一眼看的都是后台那个“抓取次数”。但那个数字通常经过统计工具过滤和聚合,未必等于搜索蜘蛛真的来过。想确认入口页有没有被爬,最直接的办法还是回到服务器原始日志,一条一条核对。
先分清统计数字和访问日志
统计工具给出的抓取量,往往是按 User-Agent 关键词匹配出来的结果,还可能受到采样、去重、时区对齐的影响。它适合看趋势,不适合当证据。原始访问日志则是服务器直接落盘的记录,时间、IP、路径、状态码都在里面,出错的空间小得多。
如果你用的是 CDN 或反向代理,要注意日志可能只记录了回源请求,真实访客 IP 被藏在 X-Forwarded-For 之类的头里。这种情况下先确认你打开的是哪一层日志,否则很容易把 CDN 节点的 IP 当成搜索蜘蛛。
一条请求记录里要核对的字段
- 时间:用来判断抓取是否集中在某个时段,还是全天零散。
- 远端 IP:配合官方的 IP 段名单核对,这一步比看 UA 更靠得住。
- User-Agent:能反映请求自称是谁,但不能单独作为依据。
- 请求路径:确认命中的是入口页本身,而不是 favicon、robots.txt 或某个静态资源。
- 返回状态码:200、301、304、403、503 的含义完全不同。
- 响应字节数:如果返回 200 但字节数只有几百,多半是被拦截页或空壳页。
三种常见的误判
只认 User-Agent
UA 字符串是可以随便写的。日志里出现大量自称搜索蜘蛛的请求,并不代表它们就是。稳妥的做法是做反向 DNS 校验,或者至少把 IP 和官方公布的网段对一遍。如果两者对不上,这些请求大概率只是采集工具或者扫描器。
把非 200 的请求也算成抓取
入口页返回 304 说明内容没变,蜘蛛只是来确认了一下;返回 301、302 说明发生了跳转,要看它有没有跟下去;返回 403、503 则说明它根本没拿到内容。如果日志里 403 占比很高,优先去查 WAF 或防火墙规则,而不是继续加入口页。
只看入口页,不看目标 URL
入口页被抓到,只能说明门被推开了。目标 URL 有没有在同一时间窗内出现抓取记录,才是判断链接有没有被跟进的依据。如果只有入口页的请求、始终没有目标 URL 的请求,问题通常出在链接形式、状态码或者 robots 规则上,而不是抓取量不够。
把两边日志对照着看
比较实用的做法是取一个时间窗口,把入口页的访问记录和目标 URL 的访问记录并排放。重点看两件事:一是入口页被抓之后,目标 URL 大概多久出现第一次请求;二是这个间隔是否稳定。如果偶尔出现一两次,可能是巧合;如果持续没有,就说明中间某一环断了。
还要留意目标 URL 的请求是不是来自同一个 IP 段。如果入口页是 A 搜索引擎来的,目标 URL 的请求却全是另一个爬虫,那说明你观察的并不是同一条链路。
一个简单的排查顺序
- 确认日志层级,排除 CDN 节点 IP 的干扰。
- 用 IP 段核对 UA,筛掉伪造请求。
- 看入口页的状态码和响应字节数,确认拿到的是完整页面。
- 看入口页抓取的时间分布,判断是稳定来访还是偶然一次。
- 对照目标 URL 是否有对应抓取记录。
- 检查 robots.txt、响应头、页面内的链接写法有没有挡住后续路径。
日志能证明的是“来过”,不能证明“会收录”。抓取和收录是两件事,看到目标 URL 被抓了,不等于它一定会进索引。
与其盯着一个汇总数字,不如把 IP、状态码、目标 URL 这三条线串起来看。多数时候,问题并不是蜘蛛没来,而是它来了之后在路上被拦住了。