很多站点运营者盯着服务器日志看状态码,却忽略了蜘蛛抓取流程里的一个关键环节:链接解析。蜘蛛把页面抓回去之后,要从 HTML 里抽出可访问的 URL,放进待抓队列。如果这一步没有抽到链接,后续的抓取、回访、收录都无从谈起。页面能返回 200,不等于路径能继续往下走。
解析环节发生了什么
一次完整的抓取大致是:发现入口、排入队列、发起请求、拿回响应、解析内容、再发现新链接。解析环节主要做两件事:识别页面里的链接,以及判断这些链接是否值得继续抓取。常见问题往往不是服务器拒绝,而是链接没有被识别出来,或者识别后又被过滤掉。
链接没有被识别的常见原因
- 链接由脚本生成。导航、列表、相关推荐如果依赖客户端 JS 渲染,蜘蛛拿到的原始 HTML 里可能没有这些地址。关键路径最好服务端输出,或者至少保留一份静态链接兜底。
- 可点击元素不是标准链接。用 div、span、button 加点击事件跳转,蜘蛛不会把它当成链接。需要给可跳转元素加上真实的 href。
- href 为空或指向脚本。href 写成 javascript:void(0)、只写 #、依赖 onclick 的写法,通常无法进入抓取队列。
- rel 属性误用。整站导航加了 nofollow,或者把内链批量标成 ugc、sponsored,相当于告诉蜘蛛不必跟。检查模板里是否被全局加上了这些值。
- 相对路径、base 与编码问题。相对地址写错、base 标签指向其他域、中文或空格未编码,都可能让链接指向 404 或无效地址。链接最好用绝对路径,或确保相对规则稳定。
链接被识别但没被跟
还有一种情况:链接在 HTML 里,蜘蛛也看到了,但没有继续抓。常见原因包括链接指向的页面在 robots.txt 里被禁止、链接嵌套在需要交互才出现的组件里、分页和加载更多依赖异步请求,以及同一页面链接数量过多导致重要路径被稀释。解析环节不是孤立的,它和抓取队列的优先级、去重规则一起工作。
怎么排查解析断点
- 关闭 JS 查看页面源代码,确认核心导航和列表里是否有可点击的真实链接。
- 用抓取工具模拟蜘蛛,对比抓到的页面数和从页面里抽到的链接数。如果前者正常、后者很少,优先怀疑解析。
- 抽查日志中回访频繁的页面,看它是否持续带来新 URL。长期只被抓取、不贡献新发现的页面,往往在解析输出上有问题。
- 核对模板中的 rel 属性、base 标签和全局链接规则,确认没有批量屏蔽内链。
修复顺序与兜底
修复时先处理全局导航、面包屑和列表页,这些位置决定蜘蛛能否走到深层页面。然后处理详情页里的相关推荐、上下篇等辅助路径。对于确实依赖 JS 的模块,可以用服务端渲染、预渲染或静态链接兜底。Sitemap 可以作为补充渠道,但不要把全部发现压力都交给它;内链结构仍然是蜘蛛理解站点路径的主要依据。
页面返回正常只是第一步,链接能被识别并进入队列,抓取路径才算真正打通。
最后,解析问题通常不会在服务器监控里报警。它表现为抓取量还行、新 URL 发现变慢,或者某些栏目长期没有新增抓取。定期做一次源码链接体检,比事后猜测蜘蛛为什么不来更有效。