在蜘蛛池或任何以入口页带动 URL 发现的玩法里,最常见的期待是:入口页被搜索蜘蛛抓了,目标 URL 就会跟上。但实际操作中更常见的情况是,目标 URL 在抓取统计或日志里长期停在“已发现,尚未抓取”这一层,既没有抓取记录,也没有明确的报错。这篇文章拆解这一步到底卡在哪里,以及怎么用日志和数据做排查。
“已发现但未抓取”到底代表什么
它至少说明两件事:搜索蜘蛛已经从某个入口页或其他来源解析出了这个 URL,并把它放进了待抓取队列;但它还没有真正发起对目标 URL 的请求。也就是说,发现环节已经完成,卡住的是抓取环节。把这两件事混在一起,会导致排查方向完全跑偏——继续加入口页、继续堆链接,通常不会让这个状态发生变化。
常见的几类卡点
1. 站点整体抓取配额被占满
搜索引擎给每个站点分配的抓取能力是有限的,取决于站点规模、响应速度、历史更新频率和内容质量。如果同一时间有大量低价值 URL 在排队,比如参数页、重复列表页、批量生成的入口页,目标 URL 就会被排到很后面。这时候入口页再多,也只是往队列里塞更多待办。
2. 入口页本身的可信度不足
从入口页解析出的链接,其优先级很大程度上取决于入口页自身。一个刚上线、没有任何外链、内容稀薄的入口页,它给出的链接在抓取调度里优先级很低。入口页被爬过,不代表入口页输出的链接会被同等对待。
3. 目标页响应或结构存在问题
目标 URL 如果响应时间长、返回大量重定向链、或者首屏依赖脚本渲染,抓取调度通常会降低它的优先级。另外,同一内容对应多个 URL,比如带不同参数、不同大小写、重复路径,会让搜索引擎难以判断该抓哪一个,进一步拖延抓取。
4. 目标 URL 与入口页主题跨度太大
入口页讲 A,链接指向完全不相关的 B,这种链接在语义上很弱,被发现之后也容易被判定为低价值。
建议的排查顺序
- 先确认目标 URL 确实处于“已发现”状态,而不是被 robots.txt、noindex 或登录墙挡在了发现环节之外。
- 在服务器日志里搜目标 URL,确认是否真的没有任何搜索蜘蛛请求,区分“没抓”和“抓了但没记录”。
- 检查目标 URL 的响应时间、状态码、重定向链长度,尽量做到一次请求返回 200。
- 检查是否存在内容重复的多个 URL 变体,用 canonical 或 301 收敛到一个主 URL。
- 回看入口页质量:是否有实质内容、链接数量是否合理、链接是否真实存在于 HTML 中。
- 观察站点整体抓取曲线,判断是不是整体配额不足,而不是单个 URL 的问题。
可以尝试的调整
- 减少无效入口页:与其扩量,不如先保证少数入口页能被稳定抓取,并保持内容更新。
- 缩短链接路径:让重要目标 URL 距离首页或入口页的点击深度更浅。
- 用 sitemap 做补充:sitemap 的作用是提示发现,不能保证抓取,但能减少完全没被发现的情况。
- 控制新 URL 的产生速度:一次放出几百上千个新 URL,抓取队列消化不完,状态会长期停在“已发现”。
- 提升目标页响应:稳定、快速、可缓存的页面更容易被优先抓取。
需要明确的是:把 URL 放进蜘蛛池入口页,只是提高被发现的概率,抓取时机和最终收录由搜索引擎的调度策略决定,任何手法都不能承诺结果。
用日志验证抓取路径
最直接的验证方式还是看日志:按时间排序,看搜索蜘蛛是否访问了入口页,之后是否出现过目标 URL 的请求。如果入口页有记录、目标 URL 长期没有,那问题在抓取调度或目标页本身;如果两者都没有,那问题还在发现环节,应该回到入口页的链接形式、robots 设置和是否被拦截上。
整体思路是把发现和抓取拆开看,先定位到底卡在哪一步,再针对那一步做调整,而不是持续堆入口页和链接数量。