如果同一批URL在百度收录批量查询中结果时好时坏,先别急着判定“收录掉了”。更常见的原因是:你这次请求带上了登录态、特定User-Agent或地域出口,服务端返回了与百度爬虫不同的版本;而查询工具拿到的只是其中一个版本。要对照,必须先把“谁在什么条件下看到什么”固定下来,否则批量结果只是噪声。
同一地址返回不同内容,通常分两类,处理方式完全不同。
区分方法很直接:用curl不带Cookie抓一次,再带Cookie抓一次,对比返回的HTML长度和正文文本。如果两次HTML基本一致,差异来自渲染;如果HTML本身就不同,属于服务端分流。这一步决定了后面是用“统一抓取身份”还是“检查渲染依赖”。
如果确认登录后才有正文,而匿名请求只有提示或空容器,那么批量查询应以匿名身份为准,因为百度爬虫默认不带你的账号Cookie。此时要做的是:
动作的结果会直接影响下一步:如果匿名版已经包含主要内容,差异只是增强信息,那么批量收录查询的波动可以按正常索引延迟解释;如果匿名版几乎是空的,那问题不在收录,而在于爬虫根本拿不到可索引正文,此时应该先解决可见内容,而不是反复查询收录数量。
有些站点对移动端和桌面端返回不同模板,甚至移动端把正文放在异步接口里。这种情况下,批量查询结果不一致往往是因为不同工具用了不同UA。
选择依据是:你的目标受众主要在哪个端消费内容。如果目标页是移动优先的内容页,就以移动UA为基准;如果是面向桌面用户的工具页,就以桌面UA为基准。选定后,所有批量查询和后续复查都必须用同一个UA,并在记录里写明。
实施动作:在抓取脚本里显式设置User-Agent,禁用自动跳转,分别保存移动版和桌面版的初始HTML。结果如何影响下一步:如果两个版本正文都完整,说明分流不影响索引,查询波动可以忽略;如果只有一个版本完整,另一个是空壳,那么空壳版本对应的端就是需要修复的对象,而不是继续扩大批量查询范围。
如果差异只在特定地域出口出现,或者服务端在做A/B实验,那么单次匿名对照可能刚好抽到对照组。此时需要:
注意,robots.txt限制抓取不等于可靠的索引移除,站点地图也不保证收录。如果差异版本被robots.txt挡住,不要据此认为该版本已从索引消失;它可能仍以其他方式被引用。反过来,抓取量或查询结果归零也不能单独证明处理正确,还可能是查询工具本身换了出口或UA。
无论采用哪种条件,最终都要落到一份可复查的对照表:URL、抓取时间、身份(匿名/登录、UA、出口地域)、HTML哈希、正文是否完整。这样下次百度收录批量查询出现波动时,你能快速判断是索引变化,还是又一次抓取条件漂移。假设某批100个URL中,匿名抓取有30个正文为空,登录抓取全部完整,那么优先修复的是这30个页面的匿名可见内容,而不是继续用登录态查询它们的收录状态。这个判断只依赖你实际抓到的对照结果,不需要额外假设。