发现只是第一步
当我们说“蜘蛛发现了这个 URL”,通常只是指它拿到了这个地址,把它记了下来。真正决定这个页面什么时候被请求的,是后面的排队环节。很多站长把“发现”和“抓取”当成一件事,于是 sitemap 提交之后没看到抓取记录,就以为提交失败,其实地址可能已经进了队列,只是还没轮到。
URL 一般从哪些地方进入队列
- 页面上的可抓取链接:正文内链、导航、面包屑、列表页,这是最常见的来源。
- Sitemap:提交后相当于一次批量地址登记,比较适合老页面和深层页面。
- 外部链接:别人站点指向你的链接,蜘蛛在别处抓取时顺手记下。
- 重定向:301 或 302 的目标地址会被当作新的候选 URL。
- 各类订阅源与结构化数据:RSS、Atom,以及部分站点地图扩展。
来源不同,地址进入队列的批次也不同,后续被调度的节奏往往会有差别。
队列里的 URL 会经历几种状态
可以粗略理解为:已发现、待抓取、已抓取、暂缓。已发现只是登记;待抓取表示排进了等待列表;抓取之后会根据返回码、内容质量、是否重复等,决定是保留还是降权处理;暂缓则常见于服务器持续报错、页面内容高度重复、参数组合近乎无限的情况。
一个 URL 长期停留在“已发现”状态,往往不是它本身有问题,而是队列前面有更值得先抓的东西,或者整个站点让蜘蛛不太敢提高频率。
排队顺序受什么影响
- 站点整体的抓取表现:响应时间稳定、错误率低的站点,通常能拿到更宽松的抓取节奏。
- 页面的重要程度:被内链大量指向、层级较浅、更新频繁的页面,一般更容易排到前面。
- 重复与无效比例:站内大量相似页面会稀释整个队列的效率。
- 历史信号:页面过去的更新频率、被抓取后的表现,会影响下一次调度。
队列积压时常见的样子
如果发现新发布的内容迟迟没有抓取记录,可以先看几个方向:服务器是否在蜘蛛来访时返回 5xx 或超时;是否存在参数组合造成的抓取浪费;sitemap 里是否混入了大量 404、被 robots 屏蔽或需要登录的地址;内链是否把权重都导向了少数几个页面。
这些情况叠加起来,效果不是“某个页面不被抓”,而是整个站点的队列效率下降:新地址排不进去,老地址也反复被浪费。
可以做的几件小事
- 让服务器对蜘蛛的请求保持稳定响应,遇到压力时优先保住返回码和响应时间。
- sitemap 只放正常返回、可被抓取、内容有独立价值的地址,及时清理失效项。
- 把重要页面放在浅层,用正常内链串起来,而不是只靠 sitemap 登记。
- 控制参数类页面和聚合页的规模,避免制造大量近似地址。
- 用日志观察抓取分布:哪些目录被频繁访问,哪些地址登记后一直没有请求。
别只盯一个 URL
抓取队列是站点级别的资源分配结果,盯着单个地址看,很容易得出片面的结论。更有效的做法是把日志、sitemap 提交记录和站内链接结构调整放在一起看,找到那个卡住整条链路的环节。