網站收錄

頁面正文靠 JS 渲染:索引里可能只剩一個空壳

浏览器里内容齐全,索引里却只有導航和頁脚,這類問题往往不是没收錄,而是索引拿到的版本不同。本文梳理原始 HTML 與渲染结果的差异,给出確認索引版本的排查顺序,並說明服務端可见化、内容补齐與内鏈入口的處理取舍。

網站收錄

頁面正文靠 JS 渲染:索引里可能只剩一個空壳

同一個 URL,浏览器里能看到完整正文,搜尋引擎索引里却可能只有導航和頁脚。這類問题多半不是“没被收錄”,而是索引拿到的内容版本和你看到的不一样。

為什么會有两個版本

搜尋引擎抓取时拿到的是服務器返回的 HTML,之後才可能执行頁面里的 JavaScript。如果正文、标题、價格、评论這些内容都靠脚本在浏览器里拼接出来,那么第一版 HTML 里就只有容器和脚本。渲染能否补上内容,取决于搜尋引擎愿不愿意為這個頁面花渲染资源,以及脚本有没有被屏蔽、有没有报错。

所以判断收錄問题时,要区分两件事:URL 有没有進索引,和索引里存的是哪一版内容。

按這個顺序確認索引拿到的版本

  1. 先看原始响應。關掉 JS 或用命令行抓取该 URL,看返回的 HTML 里有没有正文文本、标题、面包屑、内鏈。
  2. 再看渲染後的结果。用浏览器的查看元素或抓取工具渲染一次,對比两版差异。
  3. 检查资源是否可抓取。robots.txt 里被屏蔽的 JS、CSS、接口請求,都會让渲染结果残缺。
  4. 看索引中的摘要。搜尋结果里的标题和描述如果明顯来自導航或模板,基本可以確認索引里拿到的是空壳。
  5. 最後才回到内容质量與收錄判断,避免把渲染問题誤判成低质頁面。

几種典型的“空壳”形態

  • 正文由接口返回後寫入,首屏 HTML 里没有文本节点。
  • 标题和 meta 描述由脚本寫入,HTML 里是預設值或空值。
  • 列表條目靠滚動加载,第一屏之外的内容抓取不到。
  • 分頁、下一篇、相關推荐由脚本生成,内鏈入口在原始 HTML 里不存在。
  • 文字被做成图片或寫在 canvas 里,索引里没有可讀文本。
  • 内容藏在标簽頁、折叠面板、彈窗里,預設不展開。

處理方式與取舍

優先做服務端可见化

對内容頁来说,最稳的方式是让正文、标题、主内鏈在服務器返回的 HTML 里就存在,客戶端脚本只做增强。服務端渲染、静態生成、预渲染都属于這條路子,選哪種取决于站点規模和更新频率。

其次补關键信息

如果整站改造周期長,可以先把最重要的一批頁面,比如栏目首頁和核心詳情頁,在 HTML 里补齐标题、摘要、正文首段和主要内鏈,其余頁面逐步處理。

不要给搜尋引擎單獨准备一份内容

返回與用戶所见明顯不同的内容,風險和收益不成比例。更合适的做法是让同一份内容在两種环境下都可讀。

顺带检查收錄入口

渲染問题解决後,URL 才知道自己该被谁發現:站内連結是否在原始 HTML 里出現、sitemap 里的地址是否與最终地址一致、canonical 是否指向同一個版本。這些都没問题,剩下的才是抓取和收錄节奏的事。

如果只有少量頁面出現空壳,先看模板;如果是整站,先解决渲染鏈路,再谈頁面质量與收錄策略。