常见问题

服务器日志里怎么确认入口页真的被搜索蜘蛛抓过

看后台抓取次数容易误判,真正可靠的依据是服务器原始日志。本文说明一条请求记录里要核对的字段、三种常见的误判情况,以及如何把入口页和目标 URL 的日志对照起来判断搜索蜘蛛是否真的跟进了链接。

常见问题

服务器日志里怎么确认入口页真的被搜索蜘蛛抓过

很多人判断蜘蛛池有没有起作用,第一眼看的都是后台那个“抓取次数”。但那个数字通常经过统计工具过滤和聚合,未必等于搜索蜘蛛真的来过。想确认入口页有没有被爬,最直接的办法还是回到服务器原始日志,一条一条核对。

先分清统计数字和访问日志

统计工具给出的抓取量,往往是按 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 的请求却全是另一个爬虫,那说明你观察的并不是同一条链路。

一个简单的排查顺序

  1. 确认日志层级,排除 CDN 节点 IP 的干扰。
  2. 用 IP 段核对 UA,筛掉伪造请求。
  3. 看入口页的状态码和响应字节数,确认拿到的是完整页面。
  4. 看入口页抓取的时间分布,判断是稳定来访还是偶然一次。
  5. 对照目标 URL 是否有对应抓取记录。
  6. 检查 robots.txt、响应头、页面内的链接写法有没有挡住后续路径。
日志能证明的是“来过”,不能证明“会收录”。抓取和收录是两件事,看到目标 URL 被抓了,不等于它一定会进索引。

与其盯着一个汇总数字,不如把 IP、状态码、目标 URL 这三条线串起来看。多数时候,问题并不是蜘蛛没来,而是它来了之后在路上被拦住了。