在服务器日志里,经常能看到某个 URL 第一次被抓取的时间,比它上线的时间晚了好几天甚至几周。很多人把这归结为“蜘蛛没发现”,但实际链条更长:链接被发现、URL 进入待抓队列、调度器决定何时抓取,是三个独立的环节。把它们混在一起,排查方向就容易跑偏。
发现、入队、抓取是三件不同的事
发现,只是意味着某个链接被蜘蛛读到,并提取出一个规范化后的 URL。这一步通常很快,只要页面被访问过、链接在 HTML 里可见,就有机会完成。
入队,是把 URL 写进待抓列表。这里会出现两个损耗:一是重复 URL 被合并,同一个页面通过不同参数、不同路径到达,通常只会留下一个代表;二是优先级较低的 URL 被排在后面,队列越长,等待越久。
抓取,才是真正发出请求。它受调度策略影响,与站点历史响应质量、内容更新节奏、入口可信度都有关系。
发现说明 URL 存在,抓取才决定它是否被读取,两者之间隔着队列和调度。
队列里大致发生了什么
待抓队列并不是先到先服务。调度器更在意抓取效率和内容新鲜度,常见的取舍包括:
- 更新频繁、响应稳定的站点,重访间隔更短;
- 响应慢或经常出错的 URL,重访频率会被压低;
- 参数化、内容高度重复的 URL,优先级通常较低;
- 新发现的 URL 往往需要排队,不会立刻被抓。
所以,一个结构清晰、响应稳定的站点,新 URL 的首次抓取通常比结构混乱的站点更快。
怎么观察这三个阶段
用服务器日志看首次抓取
过滤搜索引擎 UA,找出目标 URL 第一次出现的时间,和它实际上线的时间做对比。如果长期没有记录,先确认页面是否存在可被读取的链接入口,再考虑其他原因。
用站点地图和内链交叉验证
如果 URL 只出现在 Sitemap 里,而内链中没有入口,首次抓取时间往往更长。反过来,如果它在导航或正文中被高频引用,被抓到的机会就更大。两条路径的差异,本身就是判断依据。
检查是否存在队列积压
如果某个栏目下有大量低价值页面同时上线,比如筛选结果页、时间归档页,它们会一起进入队列,稀释真正重要页面的抓取机会。这时候观察日志,往往能看到一批相似 URL 轮流被访问,而核心页面迟迟没有动静。
可以做的几件事
- 保证入口可达:链接在返回的 HTML 中直接可见,不依赖鼠标悬停或脚本注入;
- 控制新 URL 的产出节奏:分批上线,避免一次性放出成百上千个页面;
- 收敛重复入口:参数、大小写、尾斜杠统一处理,减少队列中的冗余项;
- 保持服务器稳定:响应时间波动过大,重访间隔会被拉长;
- 给重要页面更多内链:入口越明确,越容易被调度到。
两个常见的误判
把“还没被抓”当成“被拒绝”
更多时候只是还没轮到。可以过一段时间再观察日志,而不是立刻改结构、换入口。
把“抓了没收录”当成抓取问题
抓取和收录是两件事,抓取只是前置条件。如果日志里已经能看到蜘蛛访问,接下来要看的就不是队列,而是页面本身的内容与结构。
排查这类问题,重点始终是时间差:从上线到被读到的间隔是多少,中间哪一环最慢。把发现的路径、队列的拥堵情况和抓取的实际记录放在一起看,比反复猜测有效得多。