搜索抓取

新 URL 从发现到被抓取:中间要经过哪几道关

一条新 URL 从进入候选池到蜘蛛真的发出请求,中间要经过发现、去重、排队、请求渲染和结果回写几道关。任何一关出问题,表现都一样:日志里看不到它。把这几关拆开看,排查和优化都会更有针对性。

搜索抓取

新 URL 从发现到被抓取:中间要经过哪几道关

很多站长把“蜘蛛没抓”当成一个单点故障,实际上从 URL 被写进候选池,到蜘蛛真的发出请求,中间要过好几道关。任何一关上出问题,表现都一样:日志里看不到它。把这几关拆开看,排查会容易很多。

第一关:URL 得先被发现

蜘蛛不会凭空知道你的新页面。它进入候选池的方式主要有几种:已有页面上的内链、XML Sitemap、以及它已经抓过的页面里新增的链接。

  • 内链:越靠近首页、越稳定的导航路径,越容易被反复走到。
  • Sitemap:适合放那些内链路径很深、不容易被点到的 URL。
  • 外部链接:别站指向你的链接也是入口,但可控性低。

如果一条 URL 既没有内链,也不在 Sitemap 里,那它基本只能靠运气被发现,而这种运气通常不会来。

第二关:规范化与去重

发现之后,蜘蛛会先判断这条 URL 是不是“新”的。带跟踪参数、大小写混用、带或不带结尾斜杠、http 与 https 并存,都会让同一个页面看起来像好几个地址。地址越多,抓取请求被分散得越碎,每个变体被访问的机会也越少。

做法不复杂:站内链接统一成一种写法,参数能不用就不用,必须保留的用 canonical 明确指向主地址。

第三关:排队

候选池里的 URL 不会按先来后到抓。站点整体情况、URL 所在层级、内容更新频率、历史上抓取的成功率,都会影响排队的先后。这里没有可以直接设置的“优先级开关”,Sitemap 里的 lastmod、内链的位置、页面是否长期稳定更新,是少数能被我们影响的信号。

新站或新栏目刚开始抓取偏慢,多数时候不是被针对,而是历史信号太少,排在后面。

第四关:请求与渲染

轮到你了,还要服务器接得住。超时、5xx、握手失败,都会让这次抓取白跑,蜘蛛过一会儿再来试。内容是 JS 渲染出来的,还要多一步渲染成本,在抓取资源紧张的情况下,这一步有可能被跳过。

  • 关键正文尽量在初始 HTML 里就有。
  • 响应时间尽量控制在几百毫秒级别,别让蜘蛛干等。
  • 服务器别做过于激进的频率限制,正常抓取被拦下会打断整条通路。

第五关:结果回写

抓完之后,这次抓取的结果会被记下来:返回什么状态码、内容是否重复、页面是否可索引。这些记录会影响下一次它愿不愿意再来。200 且内容有变化,是比较好的信号;长期 200 但内容一成不变,复访频率会慢慢降下来;404、410 会让这条 URL 逐步从候选池里被清掉。

能自己动手的部分

  1. 新内容发出来时,顺手从已有且抓取较频繁的页面加一条内链。
  2. Sitemap 保持更新,但别塞进一堆 404 或重定向地址。
  3. 按状态码和抓取频率过一遍日志,先确认卡在哪一关,再动手改。
  4. 确认 robots.txt 和防护规则没有误伤正常抓取。

把这五关分开看,你会发现大部分“蜘蛛不来”的情况,原因都集中在前两关:它压根没发现,或者发现了,但地址被拆成了好几份。