判断采集是否遗漏,核心不是看“收录了多少”,而是拿一份可核对的页面清单与采集结果做比对:清单里有、采集结果里没有的,就是遗漏候选。第一次处理这个问题,起点是建立页面清单,下一步是逐项比对并定位遗漏发生在哪一环。
搜索引擎优化分析里说的采集,可能指三种不同对象:搜索引擎抓取(爬虫是否来过)、站内日志记录的抓取请求、以及你自己用工具或脚本抓取页面做分析。三者的遗漏判断方法不同。本文按“搜索引擎抓取遗漏”为主线,因为这是最常被问到、也最影响后续分析的一层。如果你用的是自建抓取脚本,判断逻辑相同,只是把“爬虫请求”换成“脚本请求记录”。
要查什么:站点当前真实存在、且希望被抓取的URL全集。 怎么查:从站点地图文件、站内链接结构、数据库或内容管理系统的已发布列表三处分别导出URL,合并去重。 结果说明什么:如果三份清单本身就互相矛盾,说明问题出在链接结构或发布流程,而不是采集遗漏。先对齐清单,再谈遗漏。
要查什么:服务器访问日志中,来自搜索引擎爬虫的请求记录。 怎么查:按爬虫标识(如User-Agent中的爬虫名称)过滤日志,提取被请求的URL与状态码。 结果说明什么:日志里出现过的URL,说明爬虫至少访问过;没出现过的,是抓取遗漏的候选。注意日志只覆盖你保留的时间段,时间窗口太短会误判。
要查什么:基准清单减去日志中成功抓取的URL。 怎么查:把两份URL列表规范化(统一协议、去掉末尾斜杠差异、统一大小写、去掉跟踪参数)后求差集。 结果说明什么:差集里的URL就是遗漏候选。先别急着下结论,下一步要区分“没被抓取”和“被抓取但没被记录或没被索引”。
要查什么:每个遗漏候选为什么没被访问。 怎么查:对每个URL依次检查:是否被robots规则阻止、是否在页面中有可点击的链接指向它、是否返回了非200状态码、是否需要登录或依赖脚本才能到达。 结果说明什么:被robots阻止属于主动限制,不算意外遗漏;没有任何站内链接指向的孤立页面,属于链接结构导致的遗漏;返回错误码的页面,抓取失败是结果而非原因。
要查什么:页面被抓取了,但搜索结果中查不到。 怎么查:用站内搜索或搜索引擎提供的查询指令核对具体URL是否出现在结果中,同时对照日志确认该URL是否被请求过。 结果说明什么:日志有记录、结果无该页,属于索引层面的问题,不是采集遗漏。这两类问题的处理方向不同,混在一起会误判。
假设某站点地图列出100个URL(此为假设示例,非真实项目数据)。日志过滤后得到85个被爬虫请求的URL,规范化比对后差集为15个。逐一检查发现:其中6个被robots规则阻止,4个只存在于站点地图而没有任何站内链接指向,3个返回404,2个需要登录。结论是:真正因链接结构导致的采集遗漏是4个,其余属于主动限制、错误页面或访问权限问题。这个例子说明,差集数量不等于遗漏数量,必须逐项归因。
下一步:先导出站点地图与站内链接两份URL清单,合并去重得到基准清单,再取最近一段完整周期的服务器日志做差集比对。拿到差集后,从“是否被robots阻止”和“是否有站内链接指向”这两项开始逐条归因,就能把真正的采集遗漏从其他问题中分离出来。