蜘蛛池知识

蜘蛛池入口页的渲染方式:客户端渲染的页面蜘蛛能拿到多少内容

入口页要完成的第一件事是让蜘蛛看到正文和链接,而页面是服务端直出还是客户端 JS 渲染,直接决定第一轮抓取能拿到什么。本文拆解 SSR、SSG 与 CSR 在入口页上的差异,列出最容易被 JS 拦住的元素,并给出关闭 JS、查看源代码等自查办法。

蜘蛛池知识

蜘蛛池入口页的渲染方式:客户端渲染的页面蜘蛛能拿到多少内容

入口页要完成的事很简单:让蜘蛛进来、看到正文和指向目标站的链接,然后顺着链接走。但这份内容到底是写在 HTML 里发出去的,还是等浏览器执行 JS 之后再拼出来的,会直接决定蜘蛛第一轮抓取能拿到什么。

蜘蛛抓取时看到的到底是什么

大多数搜索引擎蜘蛛发起请求后,拿到的是 HTTP 响应体,主体是 HTML。如果正文和链接依赖 JS 再请求接口渲染,蜘蛛第一轮可能只看到一个空壳,真正的链接一条都看不到。

常见的三种渲染方式,在入口页上的表现差别很明显:

  • 服务端渲染(SSR):响应体里就有正文和 a 标签,蜘蛛一次请求即可完成发现。
  • 静态生成(SSG):构建时产出 HTML,效果接近 SSR,适合入口页这种内容变动不频繁的页面。
  • 客户端渲染(CSR):HTML 里只有挂载点和 script,正文、链接都要等 JS 执行完才出现。

现在的搜索引擎确实有渲染队列,会把部分页面丢进无头浏览器做二次渲染。但那是排队的、有配额的、也会延迟的。入口页的核心价值是“被尽快发现”,把这件事押在二次渲染上,不确定性偏高。

入口页最怕被 JS 拦住的几类元素

判断标准只有一个:不看浏览器,只看响应体里有什么。

  • 指向目标站的链接。如果 a 标签是 JS 动态插入的,首轮抓取很可能不存在。
  • 分页和列表的“下一页”。无限滚动尤其容易被漏掉。
  • 正文段落。纯 CSR 的情况下,首轮几乎是空文本。
  • canonical、robots meta 这类头部信息。最好直接写在原始 HTML 里,靠 JS 注入容易出问题。

折中做法:首屏直出,交互再交给 JS

入口页通常不需要复杂交互,把关键内容直出的成本其实很低。

  1. 入口页用 SSR 或静态生成,保证 HTML 里有正文、有可爬的链接。
  2. 筛选、展开这类交互再用 JS 增强,但别让它承担生成链接的职责。
  3. 确实需要 CSR 时,至少给关键导航留一份服务端直出的兜底版本。
  4. 核对时看“查看源代码”,而不是“审查元素”,两者看到的不是同一份东西。

怎么自查渲染是否挡住了蜘蛛

  • 用 curl 直接请求入口页,在响应体里搜索那个目标链接是否存在。
  • 关闭浏览器 JS 后再访问一次,看页面还剩多少可用内容。
  • 翻服务器访问日志,看蜘蛛请求的是 HTML 页面还是渲染接口。
  • 用平台提供的抓取测试工具看快照,但要注意它展示的是渲染后的结果,不等于首次抓取看到的内容。

常见的误判是:本地浏览器打开一切正常,就默认蜘蛛也没问题。浏览器执行了 JS,而服务器日志里那一轮抓取可能只走到 HTML 为止,两者并不是一回事。

几个容易忽略的细节

  • 入口页结构简单、体积小,做 SSR 的成本通常不高,不必为了技术栈统一而全站 CSR。
  • 按 UA 返回不同版本的动态渲染,对主流搜索引擎已不太必要,反而容易出现内容不一致。
  • JS 渲染依赖的接口若被限流或需要鉴权,渲染队列同样拿不到内容。
  • 渲染耗时过长会被判定超时,蜘蛛放弃离开,这一趟等于白来。

写在最后

入口页的职责是让蜘蛛发现 URL,这件事本身并不需要复杂的客户端渲染。把正文和链接放进首轮的 HTML,是成本最低也最稳的做法。要不要上 CSR,取决于页面有没有真正的交互需求,而不是取决于前端脚手架的默认配置。