常见问题

目标URL一直没被抓取,先查入口页还是先查目标站?

用蜘蛛池做URL发现时,目标URL始终没出现在抓取记录里是常见卡点。本文把链路拆成入口页被访问、链接被解析、目标URL被访问三段,给出逐段确认的方法和排查顺序,帮你判断问题出在入口页还是目标站本身,避免盲目加量。

常见问题

目标URL一直没被抓取,先查入口页还是先查目标站?

用蜘蛛池做 URL 发现,最常见的一种卡壳是:入口页看着有抓取日志,目标 URL 却始终没有出现在抓取记录里。这时候很多人会继续加入口页、加链接,但如果问题出在目标站本身,加再多入口页也不会有变化。所以排查的第一步不是加量,而是分清这一环到底卡在哪一段。

先把链路拆成三段来看

从搜索蜘蛛到目标 URL,中间其实有三段:入口页被访问、入口页上的链接被解析、目标 URL 被访问。这三段任何一段断了,结果都是目标 URL 没被抓。日志只能告诉你结果,不能直接告诉你断点,需要自己逐段确认。

  • 第一段:入口页有没有被搜索蜘蛛真实抓取
  • 第二段:入口页返回的 HTML 里,目标链接是否可被解析
  • 第三段:目标 URL 自身的响应是否允许被抓取

第一段:入口页是否真的被抓

别只看总访问量,要看 UA 和 IP 归属,确认是搜索蜘蛛而不是扫描器或采集程序。同时看返回状态码,如果入口页对搜索蜘蛛返回 403、429 或 5xx,说明抓取请求来过但没拿到内容,链接自然不会进入解析环节。

另一个容易被忽略的点是:入口页被抓取,不代表里面的链接会被继续处理。搜索蜘蛛可能只取了部分内容,或者在解析前就因为页面体积、渲染方式等问题停下。可以把入口页用不带 JS 的方式抓一遍,看目标链接是否直接存在于源码中。

第二段:链接是否真的能被解析

  • 链接是不是通过 JS 动态插入的,源码里没有 href
  • 链接是否被 nofollow、onclick 等方式拦截
  • 链接是否放在需要交互才展开的区域里
  • 一个入口页上堆了过多链接,靠后的部分容易被忽略

这几项都可以用看源码的方式快速验证:关掉 JS,直接看返回的 HTML,数一数能找到多少条可点链接。

第三段:目标站自身是否劝退了抓取

这是最容易被忽略的一段。入口页做得再规范,如果目标 URL 返回软 404、要求登录、跳转到验证页,或者服务器对搜索蜘蛛频繁返回 5xx,抓取同样不会落地。

  • robots.txt 是否屏蔽了搜索蜘蛛
  • 页面是否设置了 noindex,或者 canonical 指向了别的 URL
  • 是否因为地区、UA、频控而返回了不同内容
  • 服务器响应时间是否过长,导致请求被提前中断

验证方式并不复杂:用和搜索蜘蛛接近的 UA、不带 Cookie 请求一次目标 URL,看状态码、看最终落地页面、看响应时间。如果这一步就已经异常,那问题不在蜘蛛池。

一个可执行的排查顺序

  1. 确认入口页被搜索蜘蛛抓取过,且返回状态码正常
  2. 关闭 JS 查看入口页源码,确认目标链接直接可见
  3. 检查链接是否带 nofollow 或依赖跳转脚本
  4. 用近似搜索蜘蛛的 UA 请求目标 URL,看状态码与内容
  5. 检查目标站的 robots.txt、noindex、canonical 等设置
  6. 对比入口页日志与目标站日志,看请求是否真的到达过目标站
如果目标站日志里从来没出现过搜索蜘蛛的请求,问题多半在入口页到链接这一段;如果目标站日志里出现过请求但状态码异常,问题就在目标站本身。

容易走偏的两种做法

第一种是不看日志就不断加入口页,把量不够当成唯一解释;第二种是看到目标 URL 没被抓取,就去改目标站的内容。两种做法都在没有定位断点的情况下动手,改动越多,越难判断哪一步起了作用。

更稳妥的做法是先固定一个入口页、一个目标 URL 做小范围验证,确认链路能通,再考虑扩量。这样即使后面效果不理想,也知道该往哪一段继续查。