做站内抓取分析时,很多人习惯打开浏览器,点几下导航,觉得页面都能到。但蜘蛛先拿到的是一段 HTML,页面里的链接是否可被发现,取决于这段 HTML 里有没有可跟随的 href,而不是浏览器里看起来能不能点。做一次无 JS 抓取模拟,能提前看到蜘蛛眼里的路径长什么样。
为什么要做无 JS 抓取模拟
现代前端把大量链接放在脚本里,用户能看到,蜘蛛在首次抓取时未必能看到。虽然渲染阶段可能补上,但渲染资源有限,能第一波发现更稳。模拟的目的不是替代日志,而是把“理论上能不能走到”这件事先确认一遍。
模拟前准备三样东西
- 近期抓取日志:确认蜘蛛实际访问过哪些 URL,状态码如何。
- Sitemap 与站内链接清单:作为理论上的 URL 集合。
- 一个不执行 JS 的请求工具或爬虫:只看原始 HTML,不渲染。
从首页开始,逐层走
- 关闭 JS,请求首页,保存原始 HTML。
- 提取页面里所有 a 标签的 href,记录完整 URL 和所在位置。
- 逐个请求这些链接,记录状态码、响应时间、是否跳转。
- 对 2xx 页面重复提取链接,限制在三到四层,观察重要页面是否可达。
- 单独检查分页、筛选、排序这类参数链接,看它们是否出现在原始 HTML 中。
- 把走不通的链接和日志里蜘蛛未访问的 URL 做对照。
这里容易忽略的是,导航和页脚往往不是唯一入口。正文里的内链、面包屑、相关推荐、上一页下一页,都会影响蜘蛛走多深。
常见走不通的位置
- 只有点击事件、没有 href 的按钮式链接。
- 懒加载图片旁的链接,首次 HTML 里没有。
- 无限滚动列表,只在交互后追加内容。
- 空列表页或筛选后无结果页,返回 200 却没有有效链接。
- 重定向链过长,中途回到首页或错误页。
- robots.txt 误拦了整段路径,蜘蛛根本不会请求。
这些位置不一定是错误,但如果里面藏着重要页面,就等于把入口做窄了。
把模拟结果和抓取日志对齐
模拟是理论路径,日志是真实行为。两者对照,能看到三类差异:模拟能到但日志没有,可能是抓取频次或优先级问题;日志有但模拟没走到,可能是蜘蛛通过 Sitemap 或外链进入;两边都没有,才是真正的路径盲区。
不要用几个小时的日志下结论。抓取有周期,样本太短容易把正常波动当成异常。
服务器稳定性也会改变路径
路径通不通,不只看内链。如果服务器在蜘蛛访问时频繁超时、返回 5xx 或重置连接,蜘蛛可能在同一段路径上反复失败,随后降低抓取频次。此时内链再完整,实际能走到的页面也会变少。先确认服务器在抓取高峰时段的响应是否稳定,再谈路径优化。
路径可走通只是第一步
让蜘蛛发现 URL、成功抓取、完成渲染、进入索引,是几个不同阶段。模拟能解决的是“有没有路”的问题,抓取日志能回答“蜘蛛有没有走”,剩下的还要看内容质量和页面状态。把路径梳理清楚,至少不会让重要页面因为一个断链或脚本链接被挡在门外。