蜘蛛池知识

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

入口頁要完成的第一件事是让蜘蛛看到正文和連結,而頁面是服務端直出還是客戶端 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,取决于頁面有没有真正的交互需求,而不是取决于前端脚手架的預設配置。