蜘蛛抓取站点不是从头到尾扫一遍,而是顺着链接往前走的:从入口页进入,经过列表页,再进入详情页,遇到新的可抓链接就记下来排队。这条路径上任何一处断掉,后面的页面就可能长时间没人来。所谓抓取路径断点,就是蜘蛛能走到某一步,却没法继续往下走的位置。
断点一般出现在三个位置
把站点想成一条链:首页或导航是入口,列表页与分页是中转,详情页是深处。抓取量下降,或者新页面迟迟不出现,多数不是某一个页面单独出了问题,而是链条中的某一环少了可跟随的链接。
入口层:导航与首页的出口
首页和主导航是蜘蛛最常访问的地方。如果重要栏目只出现在图片、下拉菜单的脚本里,或者放在需要点击才展开的组件中,初始 HTML 里就没有可用的 href。蜘蛛看到的首页,和你用浏览器看到的首页,可能不是同一个版本。
中转层:列表页与分页
列表页承担着把蜘蛛送往详情页的任务。分页如果用的是按钮加脚本、所有页码都指向第一页,或者加载更多只在用户滚动时触发,蜘蛛就可能只停在第一页。默认视图里最好保留一组可跟随的分页链接,并让它排在筛选条件之外。
深处:详情页之间的互链
详情页往往只往回收,不往外发。除了面包屑,相关推荐、上下篇、同标签聚合都是让蜘蛛继续走的通道。这些位置的链接数量不必多,但要真实指向可访问的页面,而不是空链接,或者参数拼接出来的无效地址。
容易制造断点的几种写法
- 列表链接由脚本渲染,初始 HTML 里为空,蜘蛛拿不到 href;
- 链接用 onclick 或 span 模拟,没有 a 标签和可解析地址;
- 分页与筛选共用一套参数,默认页之外的 URL 彼此重复或互相覆盖;
- 页面返回 200,但正文为空或提示内容不存在,属于软 404;
- 链接被 nofollow、ugc 等属性标注,蜘蛛不再顺着走;
- 重要入口藏在多层展开菜单或登录之后。
服务器与状态码带来的中断
路径连接得再好,服务器不给响应也没用。5xx、连接超时、响应时间过长,都会让蜘蛛提前结束这一轮,已经排队的 URL 顺延到下次。频繁出现时,先看日志里同一时段的耗时分布,再判断是带宽、数据库,还是某个动态接口拖慢了整体。
用三份数据交叉核对
- 服务器日志:看蜘蛛实际抓了哪些 URL,重点找列表页和分页的访问记录;
- Sitemap:对照其中提交的 URL,是否有大量地址在日志里从未出现;
- 站内链接:从入口页出发手动点几层,看能不能走到那些没被抓的页面。
三者对不上的地方,通常就是断点所在。日志里反复出现、但内链中没有的 URL,多半是 Sitemap 或外部引用带进来的;内链能走到、日志里却没有的,则要怀疑层级太深,或者所在目录整体抓取较少。
修复的先后顺序
先把入口层和中转层的链接补成可解析的 a 标签,再处理详情页的横向互链,最后清理软 404 和重复参数。服务器层面的问题单独处理,尽量不要在抓取异常期同时大改内链结构,否则很难判断是哪一项起了作用。
抓取路径是排查工具,不是保证收录的手段。它只能帮你确认蜘蛛有没有机会走到某个页面,至于最终抓不抓、多久抓一次,仍由搜索引擎自己决定。