很多站点运营会把“蜘蛛来没来”当成一个动作,实际在搜索引擎那边,一个 URL 从被发现到被真正抓取,中间至少经过三步:入队、去重、排期。发现只是最前面的一小步,后面每一步都可能让 URL 停住不动。
URL 发现的三条常见来源
先把入口理清楚,后面排查才有方向。
- 内链:蜘蛛顺着已有页面上的链接走到新 URL,这是最自然的一条路。
- Sitemap:主动把 URL 列出来,适合深页、孤立页和更新频繁的列表页。
- 外部链接与历史抓取:外链带来的地址,以及之前抓过、现在站内没有链接的旧 URL 重新被翻出来。
三条路带来的是同一件事:一串待抓 URL。发现方式不同,只会影响它进入队列的先后,不会保证立刻被抓。
入队与去重:同一个 URL 被反复提交会怎样
队列里存的是 URL,同一地址被多次提交,通常不会带来额外抓取机会,反而可能让调度器把它当成重复信号来对待。常见的情况有:
- 带不同参数指向同一内容的 URL,比如排序、筛选、追踪参数。
- 分页、筛选页互相链接,形成大量近似的地址。
- Sitemap 里同时写了 http 与 https、带与不带斜杠两个版本。
这些 URL 本身未必是错误,但会让去重这一步做更多判断。更稳妥的做法是让每个内容只有一个稳定地址,其余版本通过 301 或 canonical 收敛过去。
排期:抓取优先级受什么影响
排期不只看页面重要性,还看站点整体表现。同一批 URL 里,通常这几类会靠前:
- 被内链指向较多、离首页较近的页面。
- 内容更新频率高、历史抓取返回正常的页面。
- 服务器响应稳定的站点,整体抓取节奏会更顺。
反过来,如果站点经常超时、5xx 时有时无,调度器会降低整体抓取频次,入队再多的 URL 也只能慢慢等。
从发现到抓取之间最容易断的三处
1. 内链路径断在半路
新页面上线后,如果只放在 Sitemap 里、没有任何内链指向,它仍然能被发现,但缺少路径上的支撑。更常见的问题是上一级列表页没有把它链出来,或者要翻很多页才出现,蜘蛛很难走到。
2. Sitemap 里的地址不是最终地址
Sitemap 写的是 A,A 又 301 到 B,等于把一次抓取拆成两次请求。规模小时影响不大,量大时这部分成本会很明显。写进 Sitemap 之前,先确认地址是可以直接返回 200 的最终 URL。
3. 服务器响应拖慢整体节奏
抓取频次是站点承受能力的函数。响应时间变长、并发被压住时,蜘蛛自然会放慢。它不是一次宕机那种明显问题,而是慢下来之后 URL 一直排在队列里。
可以落地的几件事
- 给每个内容确定一个唯一地址,重复版本用 301 或 canonical 收敛。
- Sitemap 只放最终 URL,并保持 lastmod 与实际更新时间一致。
- 新页面至少从一到两个已有页面链出去,别只依赖 Sitemap。
- 用服务器日志看蜘蛛实际抓了哪些 URL、返回了什么状态码,再决定补哪里。
发现 URL 只是把名字报上去,能不能被较快抓到,取决于这个地址在队列里是否唯一、是否可直达,以及站点是否让蜘蛛抓得舒服。
把这三步分开看,排查会清楚很多:发现不足就补入口,去重混乱就做规范化,排期靠后就看服务器与站内结构。