搜索抓取

空壳页面里的 JS 链接:蜘蛛拿到首屏之后还怎么往下走

不少站点首屏返回的是空壳 HTML,真实内容和链接由 JS 渲染。蜘蛛抓取时先看到什么、会不会执行脚本、内链与 Sitemap 如何补位,都会影响 URL 发现。本文从抓取路径角度拆解空壳页面的处理方式,并给出可落地的检查与调整思路。

搜索抓取

空壳页面里的 JS 链接:蜘蛛拿到首屏之后还怎么往下走

蜘蛛先拿到的是“壳”,不是最终页面

抓取时,蜘蛛先拿到的是服务器返回的 HTML。如果页面正文和链接由 JavaScript 在浏览器里渲染,那么这份原始 HTML 里可能只有框架、占位符和脚本。蜘蛛会尝试执行 JS,但渲染队列和普通抓取并不是同一回事。不要把“页面在浏览器里能显示”直接等同于“蜘蛛一定会马上看到完整内容”。

链接藏在 JS 里,URL 发现就多了一道门

列表页、分页、详情页的链接如果由 JS 动态插入,蜘蛛在初始 HTML 里看不到可抓取的 href,URL 发现路径就可能断掉。即使脚本最终能执行,链接也要等渲染后才出现,发现时间会被拉长。对依赖这些链接往下走的抓取来说,这是一道额外的门。

  • 列表页和栏目页尽量服务端渲染或预渲染,让关键链接出现在 HTML 中。
  • 用普通 a 标签和可抓取 href,避免只用 onclick 或 div 模拟跳转。
  • 分页和详情页入口尽量在首屏 HTML 里出现。
  • 必须交互后才加载的链接,考虑用 Sitemap 或内链补位。

内链和 Sitemap 是两条备用线索

当 JS 链接不可靠时,内链结构和 Sitemap 是补 URL 的主要方式。内链从入口页指向栏目页、详情页,蜘蛛可以顺着走;Sitemap 提供一份 URL 清单,但不能替代内链。

内链负责路径,Sitemap 负责兜底

从抓取路径看,内链更像一条可以连续走的路,Sitemap 更像一张备查清单。两者都在,蜘蛛发现 URL 的机会更稳。

Sitemap 里列了 URL,不等于蜘蛛会优先抓;没有内链指向的地址,抓取优先级通常更低。

服务器响应和渲染队列也要一起看

如果服务器返回空壳很快,但渲染依赖的接口慢或报错,蜘蛛看到的仍然是空壳。检查服务端日志时,可以看蜘蛛请求返回的状态码、响应大小,以及渲染请求是否单独出现。若关键 API 对蜘蛛返回 403 或空数据,渲染后也拿不到链接。

  • 确认关键接口不会拦截蜘蛛 User-Agent。
  • 避免首屏内容依赖必须登录或必须带特定 Cookie 的接口。
  • 服务器稳定时抓取节奏更平稳;频繁 5xx 会让蜘蛛放慢或减少抓取。

怎么检查空壳页面的抓取路径

  1. 用 curl 或查看服务器日志,看蜘蛛拿到的原始 HTML 里有没有链接。
  2. 禁用 JS 打开页面,看正文和链接是否还在。
  3. 检查列表页、分页、详情页的 a 标签是否可抓取。
  4. 对比 Sitemap 中的 URL 与内链可达的 URL,找出只出现在 Sitemap 的地址。
  5. 对照渲染后的页面和原始 HTML,确认关键链接是否只在渲染后出现。

调整思路

优先让关键路径上的链接直出 HTML,尤其是栏目页、列表页和详情页入口。对必须 JS 渲染的部分,用内链和 Sitemap 补足 URL 发现,别让蜘蛛只有一条路可走。监测服务器日志里的抓取频次和状态码,空壳页面较多时,抓取预算容易被消耗在重复渲染上。

空壳页面不是不能抓,而是 URL 发现和抓取路径会更依赖旁路线索。把链接放回 HTML、把 Sitemap 和内链维护好,蜘蛛走起来会顺一些。