抓取日志里常见一种状态:URL 已经被发现,日志里也留下了痕迹,但迟迟没有抓取记录。只看总量很难判断问题出在哪,把 URL 按组切开再看,堵点通常自己会浮出来。
先分清三种“没被抓”
同样是“没有抓取记录”,背后的状态并不一样,处理方式也完全不同:
- 未被发现:没有任何入口指向它,Sitemap 里没有,内链也不通,搜索蜘蛛根本不知道这个 URL 存在。
- 被发现但未入队:入口已经把它交出去了,但由于重复变体、robots 规则、页面价值判断等原因,抓取被压后甚至跳过。
- 入队但未抓取:URL 已经排在队列里,只是抓取频次低、服务器响应慢,或者总撞上维护窗口。
日志能直接证明的主要是第三种,前两种要靠内链巡检和 Sitemap 清单交叉核对。分组之前先把这三类分开,后面的排查才不容易绕圈。
按什么维度分组
分组的目的是让每一组的页面结构、模板和入口来源尽量一致,这样组内表现才有可比性。
- 目录:/product/、/blog/、/help/ 各自被发现了多少、被抓了多少。
- 模板:详情页、列表页、筛选页、标签聚合页分开统计。
- 入口来源:从 Sitemap 进来的、从内链进来的、从站内搜索页进来的,分别看回访情况。
- 响应表现:平均响应时间、超时比例、返回状态码的分布。
四个维度不必一次全上。先按目录切一次,哪一组的“已发现 / 已抓取”比例明显偏低,再往下按模板和入口来源细分。
几组常见结果和处理方向
低频目录:整组只被抓了一小部分
这类目录往往离首页层级较深,或者长期没有新内容,抓取机会被更活跃的栏目吃掉。可以先检查这批 URL 是否在列表页有稳定入口、分页有没有断链,再决定是把它们收拢到更靠近首页的聚合页,还是减少重复入口、把预算留给真正需要更新的页面。
参数与筛选页:发现量大,抓取量小
筛选参数会成倍放大 URL 数量。如果这些页面没有独立价值,比较稳妥的做法是用规范标签收敛、在 robots 中限制不必要的参数组合,或者干脆让筛选结果不生成可抓取的链接。保留下来的部分再单独观察,看是否值得给入口。
响应慢的目录:抓取频次被拉低
同一批 URL 里,响应时间长的目录通常抓取间隔更长。这类问题不在 URL 本身,而在服务器和数据库查询。先确认是不是某个模板在做全表扫描,或者调用了不稳定的外部接口,修掉之后再观察日志里的抓取间隔是否回落。
核对动作清单
- 导出最近一段时间的抓取日志,按目录、状态码、响应时间做一次基础分组。
- 把日志里的 URL 与 Sitemap、内链入口清单做一次差集,找出“有入口但日志里完全没有”的那几组。
- 对差集里的 URL 手动抽查几条,确认是否可访问、是否返回正常状态码、是否存在重复变体。
- 检查这些页面的入口位置:是在首页导航、栏目列表,还是藏在分页深处或需要脚本才能渲染的位置。
- 调整后固定一批样本 URL,持续跟踪它们的抓取间隔,而不是只看一次日志。
观察周期与改动顺序
抓取行为有滞后,改动当天看不到变化是正常的。建议给自己留两到四周的观察期,期间尽量一次只改一类东西,否则后面无法判断到底是哪一步起了作用。
顺序上,先修可达性和服务器响应,再动入口结构,最后才考虑收紧或放宽 URL 数量。前面两步没做好就急着砍 URL,很可能把本来能被正常抓取的页面一起误伤。
分组的价值不在于把数字做得好看,而在于让每一类“发现但不抓取”都能对应到一个具体可改的动作。改完再看日志,才知道方向对不对。