很多站点的问题不是“蜘蛛不来”,而是来了之后走不远。首页有抓取记录,栏目页偶尔出现,再往里的详情页几乎没有动静。这种时候继续加大提交量、堆 Sitemap,效果通常有限——路径中间已经断了,蜘蛛到不了后面。
先分清是“抓不到”还是“抓得慢”
在服务器日志里按天筛一遍,把被抓的 URL 按目录层级归类。如果某一层级的 URL 从头到尾都是零,那更像是路径断点;如果每一层都有,只是数量偏少,那更像抓取频次和速率的问题,两者的处理方向完全不同,别混在一起改。
断点常出现在四个位置
1. 入口页自己能抓,但入口本身没被链接
新目录、新专题页如果只出现在首页某个轮播位,或者靠 JavaScript 动态插入,蜘蛛第一跳未必能碰到。更稳妥的做法是在静态 HTML 里留一条普通的 a 标签,位置不必显眼,但要长期稳定存在。
2. 内链只在模板的边角出现
- 相关推荐模块由前端请求填充,抓到的 HTML 里是空的;
- 列表页只渲染前十条,其余靠“加载更多”按钮;
- 面包屑存在,但指向的是搜索页或带参地址,不是静态路径。
这些结构在用户侧体验不差,但对抓取路径来说等于把中间一段挖掉了。可以把一部分链接直接写进首屏 HTML,哪怕只放十几条,也比全靠异步加载更容易被继续跟进。
3. Sitemap 里的 URL 和站内实际情况对不上
Sitemap 是补充通道,不是替代品。如果里面混着大量 404、长跳转链、noindex 页面,蜘蛛按图索骥走一遍,收获的是一串无效地址,反而消耗了这次访问的余量。定期把 Sitemap 与真实返回 200 的 URL 做比对,清理已经下线的条目,比新增条目更划算。
4. 爬到一半站点自己顶不住
抓取正在展开时,如果服务器开始返回 5xx、响应时间从几百毫秒跳到几秒,蜘蛛通常会主动降速甚至暂停。日志上看起来就是“抓取量突然掉了一截”。这时候与其去调站点地图,不如先看这段时间的负载、慢查询和回源情况。
层级变深之后,路径需要重新设计
当站点从几百个 URL 涨到几万个,原来“首页—栏目—详情”的三层结构往往撑不住。可以按主题或地域再补一层聚合页,让每个详情页距离首页不超过四跳;同时给聚合页留稳定的内链入口,避免它们只靠 Sitemap 被发现,一旦 Sitemap 出问题就整体失联。
一个可以照着走的自查顺序
- 取最近七天的日志,按目录层级统计被抓 URL 数量,找出断层的那一层;
- 在浏览器禁用 JavaScript,访问断层上一层的页面,看能否看到指向下一层的链接;
- 抽查断层层的 URL,确认返回码、canonical、robots 元标签是否正常;
- 把 Sitemap 与这批 URL 对照,去掉返回非 200 的条目;
- 观察改动之后两三周的日志,看是否出现了新的被抓层级。
路径顺畅之后,再谈节奏
路径打通只是让蜘蛛“能走到”,走得多快取决于站点还能给出多少余量。长期在线的站点,抓取深度自然会往下延伸;经常超时的站点,即使链接结构再规整,蜘蛛也会在某一层停住。
把内链、Sitemap 和服务器状态当作同一条链路上的三段来看:任何一段断开,后面做得再细也发挥不出来。