蜘蛛发现一个链接之后,并不会立刻抓取。它会把 URL 放进待抓队列,再按自己的调度逻辑决定先后顺序。理解这个排序,比反复提交链接更能解释“为什么这个页面几天就抓了,那个页面几周没动静”。
待抓队列不是先来后到
把待抓队列想象成一个不断变化的清单:里面既有刚发现的新 URL,也有上一轮没抓完、需要回访的旧 URL。蜘蛛会综合几个信号给它们打分,分数高的先抓。所以同一批新链接,有的几分钟内就被抓走,有的要等上几天——这不是随机,而是排序结果。
影响排序的几个信号
链接出现的位置和层级
首页、频道页上的链接,通常比深层页面里的链接更早被抓。蜘蛛沿着链接一层层往下走,层级越深,被发现的顺序越靠后,优先级也更容易被后来的新 URL 挤掉。
被链接的次数与来源页面
一个页面如果被多个页面链到,或者被站点里本身抓取频繁的重要页面链到,它在队列里的位置通常会靠前。孤立页面、只在一个角落被提过一次的页面,往往排在后面。
更新历史与 lastmod
经常更新、且 sitemap 里 lastmod 记录准确的页面,蜘蛛更容易判断“这里可能有新东西”。反过来,长期不变、lastmod 又一直没更新的 URL,回访间隔会越拉越长。
上一次抓取的结果
上一轮抓取时的响应速度、状态码、内容是否有变化,都会影响下一轮排序。响应慢、经常超时的页面,蜘蛛会主动降低回访频率,把预算让给更稳定的地址。
想让重要页面排在前面,可以做这几件事
- 给稳定入口。把重要栏目和页面放在首页、频道页以及站点导航里,让蜘蛛每次来都能从浅层路径走到它们。
- 增加合理的内链。在同一主题的页面之间互相链接,比在页脚堆一大堆链接更有效。
- 让 sitemap 与实际 URL 保持一致。sitemap 里长期放着已删除或已重定向的地址,会稀释里面有效 URL 的分量。
- 收敛无效 URL。筛选参数、空结果页、无限翻页产生的地址,会在队列里占位,让真正需要抓的页面排在后面。
- 保持服务器响应稳定。稳定的响应时间和状态码,是维持正常回访节奏的基础。
排队靠后,通常意味着什么
- 入口太深,蜘蛛要走很多跳才能碰到这个页面。
- 链接由 JS 在客户端渲染后生成,第一次抓取时看不到。
- 页面内容长期不变,蜘蛛判断不值得频繁回访。
- 站点 URL 总量太大,而其中大量是低价值地址。
怎么确认排序是否按预期走
服务器日志是最直接的依据。挑几个重点页面,看它们从首次出现在内链里,到被第一次抓取之间隔了多久;再对比同层级页面的抓取间隔。如果某个页面的间隔明显偏长,先回头检查入口位置和链接形式,而不是急着重复提交。
待抓队列的排序,本质上是蜘蛛对站点结构和内容变化的综合判断。把入口做浅、把无效 URL 收干净、把响应做稳,比任何提交动作都更持续地起作用。