搜索抓取

发现但不抓取:把 URL 分组核对,找抓取路径的堵点

URL 被发现却没有抓取记录,原因可能有很多。这篇文章讲的是如何用抓取日志把 URL 按目录、模板、入口来源分组,区分未被发现、未入队、入队未抓三种状态,再按组排查内链、参数与服务器响应的具体问题,并给出可执行的核对清单与改动顺序。

搜索抓取

发现但不抓取:把 URL 分组核对,找抓取路径的堵点

抓取日志里常见一种状态:URL 已经被发现,日志里也留下了痕迹,但迟迟没有抓取记录。只看总量很难判断问题出在哪,把 URL 按组切开再看,堵点通常自己会浮出来。

先分清三种“没被抓”

同样是“没有抓取记录”,背后的状态并不一样,处理方式也完全不同:

  • 未被发现:没有任何入口指向它,Sitemap 里没有,内链也不通,搜索蜘蛛根本不知道这个 URL 存在。
  • 被发现但未入队:入口已经把它交出去了,但由于重复变体、robots 规则、页面价值判断等原因,抓取被压后甚至跳过。
  • 入队但未抓取:URL 已经排在队列里,只是抓取频次低、服务器响应慢,或者总撞上维护窗口。

日志能直接证明的主要是第三种,前两种要靠内链巡检和 Sitemap 清单交叉核对。分组之前先把这三类分开,后面的排查才不容易绕圈。

按什么维度分组

分组的目的是让每一组的页面结构、模板和入口来源尽量一致,这样组内表现才有可比性。

  • 目录:/product/、/blog/、/help/ 各自被发现了多少、被抓了多少。
  • 模板:详情页、列表页、筛选页、标签聚合页分开统计。
  • 入口来源:从 Sitemap 进来的、从内链进来的、从站内搜索页进来的,分别看回访情况。
  • 响应表现:平均响应时间、超时比例、返回状态码的分布。

四个维度不必一次全上。先按目录切一次,哪一组的“已发现 / 已抓取”比例明显偏低,再往下按模板和入口来源细分。

几组常见结果和处理方向

低频目录:整组只被抓了一小部分

这类目录往往离首页层级较深,或者长期没有新内容,抓取机会被更活跃的栏目吃掉。可以先检查这批 URL 是否在列表页有稳定入口、分页有没有断链,再决定是把它们收拢到更靠近首页的聚合页,还是减少重复入口、把预算留给真正需要更新的页面。

参数与筛选页:发现量大,抓取量小

筛选参数会成倍放大 URL 数量。如果这些页面没有独立价值,比较稳妥的做法是用规范标签收敛、在 robots 中限制不必要的参数组合,或者干脆让筛选结果不生成可抓取的链接。保留下来的部分再单独观察,看是否值得给入口。

响应慢的目录:抓取频次被拉低

同一批 URL 里,响应时间长的目录通常抓取间隔更长。这类问题不在 URL 本身,而在服务器和数据库查询。先确认是不是某个模板在做全表扫描,或者调用了不稳定的外部接口,修掉之后再观察日志里的抓取间隔是否回落。

核对动作清单

  1. 导出最近一段时间的抓取日志,按目录、状态码、响应时间做一次基础分组。
  2. 把日志里的 URL 与 Sitemap、内链入口清单做一次差集,找出“有入口但日志里完全没有”的那几组。
  3. 对差集里的 URL 手动抽查几条,确认是否可访问、是否返回正常状态码、是否存在重复变体。
  4. 检查这些页面的入口位置:是在首页导航、栏目列表,还是藏在分页深处或需要脚本才能渲染的位置。
  5. 调整后固定一批样本 URL,持续跟踪它们的抓取间隔,而不是只看一次日志。

观察周期与改动顺序

抓取行为有滞后,改动当天看不到变化是正常的。建议给自己留两到四周的观察期,期间尽量一次只改一类东西,否则后面无法判断到底是哪一步起了作用。

顺序上,先修可达性和服务器响应,再动入口结构,最后才考虑收紧或放宽 URL 数量。前面两步没做好就急着砍 URL,很可能把本来能被正常抓取的页面一起误伤。

分组的价值不在于把数字做得好看,而在于让每一类“发现但不抓取”都能对应到一个具体可改的动作。改完再看日志,才知道方向对不对。