搜索抓取

日志里的抓取覆盖:哪些 URL 被蜘蛛翻过,哪些一直没动静

判断抓取情况不能靠感觉。把站点期望被发现的 URL 整理成清单,再和服务器日志做差集,就能看出哪些页面被蜘蛛翻过、哪些一直没动静。文章讲清清单怎么建、日志看哪几列、漏抓的常见原因,以及补漏的先后顺序。

搜索抓取

日志里的抓取覆盖:哪些 URL 被蜘蛛翻过,哪些一直没动静

很多站点的抓取情况是靠感觉判断的:最近好像抓得挺勤,或者感觉新页面一直没动静。感觉容易骗人。真正能回答“蜘蛛翻过哪些 URL”的,只有服务器访问日志,加上一份你自己维护的 URL 清单。把这两份东西对起来,抓取覆盖才从印象变成可以核对的事实。

先有一份“期望被发现的 URL”清单

没有清单,日志就只是一堆路径。清单的来源可以有几个:Sitemap 里提交的地址、栏目页和列表页能点到的地址、数据库或后台导出的公开内容地址。合并之后做去重和归一化,把大小写、结尾斜杠、常见跟踪参数统一成一种写法,否则同一页会以多个样子出现,差集算不准。

清单里要先剔除本来就不该被抓的:后台、登录、购物车、批量导出、测试目录、纯参数筛选页。这些抓不到是正常的,混在清单里只会制造假问题。

日志里需要看哪几列

至少保留时间、请求路径、状态码、UA、IP、响应字节数和 Referer。只看总量没有意义,一天十万次请求,可能九万次都落在几个列表页和参数页上,真正的新内容一次没碰。

  • 时间:看新页面发布之后多久出现第一次抓取,而不是看全天总量。
  • 路径:确认被抓的是内容页,还是被筛选参数、分页、站内搜索占满了。
  • 状态码:200 是正常,3xx 看跳转链,4xx 和 5xx 要单独拉出来。
  • 响应字节数:明显偏小的 200 往往是空壳页或错误页。
  • Referer:能大致看出蜘蛛是从哪个入口页走过来的,对判断内链路径有帮助。

UA 只能作为初筛,不能当唯一依据。伪造 UA 的情况不少,结合 IP 段、抓取行为和官方验证方式一起看更稳妥,这一步不必在本文展开。

做一次差集,看漏掉的 URL 长什么样

把清单里的 URL 和日志中真实出现过的路径对齐,剩下的就是没有被抓到的部分。这部分通常不是铁板一块,可以分成几类:

  • 完全没出现:大概率是没有入口,或者入口藏得太深。
  • 只出现一次就再没来过:可能是首轮抓取失败,或者页面被判定价值不高。
  • 出现过但状态码不对:5xx、403、软 404 都会让这一趟白跑。
  • 只抓到了参数变体:同一页有多个地址写法,被抓的是不是你希望的那个。

漏抓的常见原因

按经验,原因往往集中在下面几处,而不是“蜘蛛不喜欢这个站”这种说法。

  • 内链没有指向,Sitemap 里也漏了,页面等于没有对外通道。
  • 链接由脚本渲染后才出现,首轮取到的 HTML 里根本没有这个地址。
  • 层级太深,要经过四五层列表才点得到。
  • robots.txt、noindex、canonical 设置时误伤了自己的正常页面。
  • 服务器不稳定,抓几次超时或 5xx 之后,抓取节奏明显放慢。
  • 参数页太多,把抓取额度大量消耗在低价值地址上。

补漏的先后顺序

补漏不建议从“再多提交几次”开始,先处理会反复制造问题的环节。

  1. 把服务器和响应状态稳定下来,5xx、超时、连接重置先解决。
  2. 检查 robots 和页面级指令,确认没有误拦正常内容。
  3. 给缺入口的页面补内链,从相关栏目页或正文里自然指向。
  4. 更新 Sitemap,让清单和站点实际结构保持一致。
  5. 收敛低价值 URL,减少无效抓取对正常页面的挤占。

这几步做完再观察日志,通常能看到原先“完全没出现”的路径开始出现。出现之后还要继续看第二趟、第三趟,确认不是抓一次就走。

多久核对一次比较合适

内容更新频繁的站点,半个月到一个月核对一次就够,重点是看趋势而不是单次快照。更新慢的站点可以拉长到季度。每次记录三类数字:清单总量、日志中出现过的比例、状态码异常的比例。连续几次对比,比一次性的结论可靠得多。

抓取覆盖不是一次性验收,而是持续维护的事。清单、日志、内链、Sitemap 四样东西保持同步,蜘蛛的访问记录才有参考价值。