搜索抓取

蜘蛛是先看到 HTML 还是先渲染:JS 链接在抓取路径里的位置

很多站长以为蜘蛛会和浏览器一样执行 JavaScript,再把页面里的链接全部找出来。实际抓取通常先下载 HTML 并解析已有链接,渲染是后续步骤,且不一定覆盖所有页面。本文梳理抓取与渲染的分工,以及 JS 链接、前端路由和动态加载对 URL 发现的影响,并给出让链接更早进入抓取队列的实用做法。

搜索抓取

蜘蛛是先看到 HTML 还是先渲染:JS 链接在抓取路径里的位置

不少运营者会把“蜘蛛抓取”和“浏览器打开页面”当成同一件事,认为只要用户能看到链接,蜘蛛也能立刻看到。实际流程通常分成两步:先下载 HTML 文档,再决定是否执行 JavaScript 渲染。链接能不能进入发现队列,往往取决于第一步里有没有可解析的 href。

抓取阶段:蜘蛛先拿到的是 HTML

搜索蜘蛛请求一个 URL 时,首先拿到的是服务器返回的 HTML 源码。它会解析源码里的 a 标签 href、link 标签、图片地址等,把新 URL 放进待抓取队列。这个阶段不依赖浏览器环境,也不会等待页面上的异步请求全部完成。

如果链接只存在于 JS 变量、点击事件或前端路由里,抓取阶段就看不到它。蜘蛛可能仍然抓到了当前页面,但不会顺着这些隐藏链接继续走。

渲染阶段:不是每个页面都会执行 JS

为了处理 JS 生成的内容,搜索引擎会有渲染队列。但渲染资源有限,通常只对部分页面、部分优先级较高的 URL 执行。渲染可能延迟数小时甚至更久,也可能因为页面太复杂、接口超时、robots 限制而失败。

  • 新站或低权重站点的页面,进入渲染队列的等待时间可能更长。
  • 依赖第三方接口返回数据的页面,渲染时接口不稳定,链接就可能漏掉。
  • 无限滚动、点击“加载更多”才出现的链接,通常不会在首次渲染中全部暴露。
把 URL 发现完全押在 JS 渲染上,等于把抓取路径交给一个不确定的后续步骤。

哪些写法容易让链接迟到

常见情况包括:用 onclick 跳转而不是 a 标签;用 div 模拟按钮;前端路由只改 history 不生成可访问地址;列表内容由接口返回后拼接到页面;分页只显示“下一页”按钮,没有静态链接。蜘蛛即使执行了 JS,也可能只看到首屏或前几条内容。

让 URL 更早进入发现队列

更稳妥的做法是让关键链接在 HTML 源码里就存在。下面这些措施可以组合使用:

  1. 使用标准 a 标签承载主要导航、列表和分页链接,href 指向真实可访问的 URL。
  2. 服务端渲染或预渲染首屏内容,让蜘蛛拿到 HTML 时就能看到链接和正文。
  3. Sitemap 补充那些确实需要 JS 才能到达、但你又希望被发现的 URL,并保持 URL 可访问、状态码正常。
  4. 分页静态化,至少让上一页、下一页和页码链接出现在 HTML 中。
  5. 前端路由提供可访问地址,避免只靠点击事件切换视图。

怎么验证链接是不是被看到了

可以看服务器日志里蜘蛛对目标 URL 的请求记录,也可以借助搜索控制台里的抓取统计和 URL 检查工具,对比“已抓取 HTML”和“已渲染”的结果。如果某个页面在 HTML 源码里没有链接,而渲染又不稳定,它在日志里长期不出现就不奇怪。

抓取和渲染的分工决定了:能被 HTML 解析的链接,发现路径最短;只能靠 JS 暴露的链接,发现路径更长也更不确定。先把主路径做扎实,再考虑动态加载带来的体验优化,通常更符合蜘蛛的抓取习惯。