網站收錄

頁面靠 JavaScript 渲染:收錄慢和内容空白的排查顺序

頁面用前端框架渲染时,搜尋引擎抓取阶段拿到的可能只是一個空壳 HTML,收錄自然更慢、更不稳定。本文說明抓取與渲染两個阶段的差別,给出關掉 JS 查看原始响應的方法,並按狀態碼、原始内容、渲染依赖、接口資料的顺序整理排查步骤,帮你分清“内容看不到”和“内容质量不够”這两類問题。

網站收錄

頁面靠 JavaScript 渲染:收錄慢和内容空白的排查顺序

前端框架普及之後,一個很常见的現象是:頁面在浏览器里打開完全正常,标题、正文、图片一應俱全,但用抓取工具請求同一個 URL,拿回来的 HTML 里只有一行挂载节点和一串 script 标簽。這類頁面的收錄問题,往往不是“质量不够”,而是搜尋系統在第一轮根本看不到内容。

第一轮看到的是什么

處理一個 URL 大致會经過抓取、解析、渲染、索引几步。抓取阶段拿到的,是服務器直接返回的原始响應体;渲染阶段才會执行 JavaScript,把頁面补全。渲染要消耗资源,通常有排队和次數上的限制,所以靠 JS 渲染的頁面,從被發現到進入索引這條鏈更長,中間任何一环出問题,表現出来都是“抓了但没收”。

關键在于:如果原始 HTML 里几乎没有可讀内容,系統在這一步能拿到的判断依據就非常少——很难判断這頁讲的是什么、和其他頁面有什么区別、值不值得再花资源渲染一次。

三種渲染方式的現實差別

  • 服務端渲染(SSR):返回的 HTML 里就带正文,抓取阶段即可拿到主要信息,後續渲染只做补充。
  • 客戶端渲染(CSR):正文要等浏览器执行 JS 才出現,抓取阶段近乎空白,收錄更依赖渲染资源,节奏更慢。
  • 静態生成或预渲染:构建时就产出 HTML,成本最低,表現也最稳定。

如果站点是 CSR,也不必立刻重寫,但至少要让核心内容在原始 HTML 中有一份可讀版本,比如标题、首屏正文和關键說明。

自查:直接去看原始响應

最简單的办法是關掉浏览器 JavaScript,或者用命令行請求頁面,查看返回内容:

  • 頁面主标题、正文首段是否出現在原始 HTML 中;
  • 頁面之間的差异内容(文章标题、商品名稱等)是否寫在 HTML 里,而不是渲染後才填充;
  • 内鏈是否寫死在 HTML 中。連結靠 JS 生成,會直接影响 URL 發現。

排查顺序建议

  1. 先確認抓取本身是否正常:狀態碼是不是 200,返回的是不是预期的 HTML,而不是空壳或错誤頁。
  2. 再看原始 HTML 有没有内容:完全没有可讀文本时,先补预渲染或 SSR,再谈其他。
  3. 检查渲染依赖有没有被阻断:JS、CSS 文件如果被 robots.txt 屏蔽,渲染结果會和用戶看到的不一致。
  4. 確認渲染後的内容能取到:有些頁面执行 JS 後要等接口資料,而接口本身有限制,渲染出来仍是空的。
  5. 最後才看内容和质量层面:在能看到内容的前提下,再判断重复、薄内容、聚合頁這些問题。

内容藏在交互之後,也會被漏掉

标簽頁切換、点击“加载更多”、無限滚動,這些交互之後才出現的内容,很可能不在首屏渲染范围内。希望被收錄的信息,尽量让它預設展開,或者為每一块可獨立訪問的内容提供單獨 URL。

容易被忽略的几個细节

  • 首屏渲染時間過長,渲染超时後抓到的仍是空頁;
  • 同一份内容存在两種渲染结果(用戶看到 A,抓取看到 B),造成理解偏差;
  • 移動端與桌面端渲染逻辑不同,只優化了其中一端;
  • 预渲染只對部分 UA 生效,測試环境和實际抓取表現不一致。
渲染方式影响的是“能不能看到内容”這一步,它不决定最终结果。内容能被看到之後,還有頁面價值、重复程度、站点整体质量等判断在後面。

小结一下:JS 渲染的站点,排查时不要一上来就怀疑内容质量,先把“抓取阶段能看到什么”確認清楚。原始 HTML 里有内容,後面的讨论才有基础;原始 HTML 是空壳,其他優化基本都落不到實處。