網站收錄

JS 渲染的頁面,蜘蛛拿到的 HTML 里到底有没有正文

頁面用浏览器打開一切正常,抓取到的源碼却只有空壳?本文說明抓取與渲染的区別,如何用查看源代碼和抓取工具自查内容是否在 HTML 里,资源被屏蔽導致的渲染失敗,以及哪些内容更适合改為服務端輸出。

網站收錄

JS 渲染的頁面,蜘蛛拿到的 HTML 里到底有没有正文

很多站点在排查收錄时會遇到一個奇怪的現象:頁面用浏览器打開完全正常,标题、正文、图片都在,但在抓取工具或“查看網頁源代碼”里,只剩下一层空的框架和几行脚本。這種差异往往不是服務器出了問题,而是内容由 JavaScript 在浏览器里渲染出来的。

抓取和渲染,通常不是同一步完成

搜尋引擎的抓取程序第一次請求一個 URL 时,拿到的是服務端直接返回的 HTML 源碼。多數情况下,它會把這批原始 HTML 先入库,再排队交给渲染服務,用類似浏览器的环境执行頁面上的 JS,看最终呈現的内容是什么。

這意味着两点:第一,抓取請求成功,不等于内容已经被看到;第二,渲染是有成本、有延迟,也不保證對每個頁面都执行的步骤。頁面越多、權重越低、更新越不频繁,排队等待渲染的時間通常越長。

先判断你的頁面是哪種渲染方式

  • 服務端渲染或静態生成:服務端返回的 HTML 里已经包含正文文字,JS 只是增强交互,這類頁面在收錄上最省心。
  • 纯客戶端渲染:源碼里通常只有一個空的容器和几段脚本,正文要等 JS 請求接口後再插入。
  • 混合渲染:头部信息、面包屑、部分正文在源碼里,评论、推荐、價格等模块靠 JS 加载,這種情况不算最糟,但要確認關键内容属于哪一部分。

如何自查

  1. 用“查看網頁源代碼”(不是開發者工具里的 Elements 面板)搜尋正文中的一句特征文字。
  2. 用抓取模拟工具或命令行請求,看返回的 HTML 里有没有同样的文字。
  3. 在浏览器里禁用 JavaScript 再打開頁面,观察正文是否消失。

渲染延迟會以什么形式表現出来

如果正文依赖渲染,常见的表現是:URL 已经被抓取,但長期停在“已抓取,尚未编入索引”;或者索引里儲存的是較早版本,更新迟迟不生效;再或者标题、摘要被系統從其他位置拼凑出来。這些問题看起来像内容质量或權重問题,實际原因却在渲染环节。

判断时可以先對比浏览器看到的頁面和索引快照里的頁面。如果快照明顯“缺胳膊少腿”,優先查渲染,而不是急着改标题和正文。

一個经常被忽略的原因:资源被屏蔽

渲染需要加载頁面的 JS 和 CSS 文件。如果 robots.txt 或服務器規則把這些静態资源拦住了,渲染服務拿不到脚本,执行出来的自然還是空頁面。這種情况和主動禁止收錄很像,但更难發現,因為頁面本身没有任何 noindex 标记。

排查顺序建议如下:

  1. 確認 robots.txt 没有拦截 JS、CSS 所在目錄。
  2. 確認這些资源没有返回 403、404 或需要登入才能訪問。
  3. 確認 noindex 标簽是寫在 HTML 里,而不是靠 JS 動態插入。
  4. 如果正文确實依赖前端接口,检查接口對抓取請求是否返回了内容。

什么时候值得改成服務端渲染

不是所有頁面都需要。判断标准可以简單一些:這段内容是不是你希望出現在搜尋结果里的核心信息。文章正文、商品詳情、常见問题答案属于核心内容,放在 HTML 里更稳妥;篩選控件、悬浮動画、次要推荐位可以繼續交给 JS。

如果暂时不改架构,也可以先做几件事:把關键内容做成服務端輸出的一部分;给重要 URL 保留稳定的内鏈入口,让它們更容易被發現;用 sitemap 明确告知頁面存在。這些措施不能保證收錄,但能减少因為“看不到内容”而被忽略的概率。

別把渲染問题和收錄结果混為一谈

  • 渲染成功不等于一定被收錄,頁面质量、重复度、站点整体情况仍然有影响。
  • 被收錄也不等于有排名,两者是不同阶段的结果。
  • JS 里生成的連結理论上可以被發現,但可靠性低于 HTML 里的普通連結,重要導航尽量用後者。

把渲染這一环確認清楚,再去讨论内容质量和索引狀態,排查會顺畅很多。