很多人把“URL 被发现”和“URL 被抓取”当成同一件事,其实中间还隔着一层调度。搜索蜘蛛在入口页看到链接,只是把这个 URL 放进待抓取队列,什么时候真正来抓,取决于它分给这个站点的抓取预算、目标地址的响应情况,以及整个队列的轻重缓急。所以“发现很久了还没抓”是很常见的现象,并不一定代表入口页失效。
先分清两件事:发现和抓取
发现,指的是搜索蜘蛛在某个页面上解析到了目标 URL;抓取,指的是它真的向目标站的服务器发起请求并读取内容。前者主要由入口页决定,后者主要由目标站自身的状态决定。入口页做得再规范,也只能提高进入队列的机会,不能替目标站决定抓取顺序。
入口页这一侧可能的原因
- 入口页本身抓取频次偏低。入口页如果很少被抓,新加的链接自然要等更久,这和入口页的可访问性、更新频率、站点整体表现都有关系。
- 链接形式不容易被解析。链接如果依赖客户端渲染,或藏在折叠层、弹窗、需要交互才展开的区域里,被识别到的概率会下降,蜘蛛可能只看到入口页的静态部分。
- 链接数量短期暴增。一次加上大量新链接,容易触发抓取节流,蜘蛛会分批处理,而不是一次性全部入队。
- 入口页与目标 URL 主题跨度大。蜘蛛会参考链接上下文是否合理,跨度太大时,部分链接可能只被记录、不被优先安排。
目标站这一侧更常见的原因
- 目标站整体抓取预算有限。新站或内容量小、更新慢的站点,分配到的抓取次数本身就少,队列里排在后面的 URL 会等很久。
- 服务器响应慢或频繁超时。抓取时如果经常遇到 5xx、连接超时,蜘蛛会主动降低对整站的抓取频率。
- 目标路径被 robots.txt 拦截。入口页允许抓取,但目标路径被屏蔽时,蜘蛛即使发现了地址,也不会去读取内容。
- 目标页返回状态有问题。软 404、跳转到登录页、正文几乎为空,都可能让这次抓取被判定为低价值,后续排期继续延后。
- 目标 URL 集中在同一域名或同一 IP。抓取调度会做合并与限速,看起来就像“一个都没动”。
用服务器日志做一次自查
- 先看入口页的访问日志,确认搜索蜘蛛是否真的抓到过入口页,以及大致抓取频率。
- 再看这些抓取是否发生在链接更新之后。如果链接加完之后入口页压根没有新的抓取,问题更可能出在入口页的可见性上。
- 接着看目标站的访问日志,检查有没有搜索蜘蛛的请求。有请求但状态码异常,问题在目标页本身;完全没有请求,说明还停留在队列阶段。
- 对比入口页抓取时间和目标站首次抓取时间,间隔过长通常说明抓取预算不足或遇到限速。
可以做的调整
- 先把目标站的响应速度和稳定性处理好,这一步的收益通常比反复调整入口页更明显。
- 入口页保持稳定更新,链接以常规的可抓取形式呈现,避免藏在必须交互才能展开的位置。
- 新增链接分批添加,不要一次性堆入大量 URL。
- 检查目标路径是否被 robots.txt、防火墙或访问限制挡在门外。
- 配合站点自己的 sitemap 提交,让入口页和站点原有入口两条路径互相印证。
发现只是入场券,抓取排期由很多因素共同决定。能把控的是目标站的稳定性和入口页的可见性,不能把控的是蜘蛛什么时候来,这一点需要提前有预期。
如果排查之后入口页和目标站都没有明显问题,那多半只是时间问题。与其频繁改动入口页结构,不如先观察一两周的日志,看抓取趋势是在缓慢变好还是完全停滞,再决定下一步动作。