網站收錄

蜘蛛抓到的是空壳 HTML:JS 渲染頁面的收錄该怎么處理

頁面在浏览器里一切正常,抓下来的源碼里却只有空容器,正文全靠 JavaScript 注入——這類頁面在收錄上最不稳定。本文說明抓取與渲染的区別,给出確認蜘蛛實际拿到什么的自查方法,並對比服務端渲染、预渲染和补關键信息三條路径的取舍。

網站收錄

蜘蛛抓到的是空壳 HTML:JS 渲染頁面的收錄该怎么處理

很多站点在浏览器里打開一切正常,正文、评论、價格都在,但用工具抓一下原始 HTML,看到的却只有一個空容器标簽,剩下的内容全靠 JavaScript 在浏览器里跑出来。這類頁面在收錄上经常表現得很別扭:有时被抓過,有时又不收錄,索引报告里也看不出明顯错誤。要弄清原因,得先把“抓取”和“渲染”分開看。

抓取拿到的是 HTML,渲染才拿到正文

搜尋引擎處理一個 URL 大致分两步。第一步是把地址抓回来,拿到服務器直接返回的 HTML 源碼;第二步是在需要的时候,用渲染服務把頁面跑一遍,等 JavaScript 执行完再讀取最终 DOM。收錄判断通常基于第二步的结果,但触發第二步是有條件的,也存在排队延迟。

問题就出在這里:如果正文完全依赖 JS 注入,第一步拿到的就是一份“空壳”。搜尋引擎需要額外投入资源来渲染,渲染不是每次都會立刻發生,也不是所有頁面都值得渲染。内容越依赖 JS、渲染成本越高,被發現和進入索引的時間就越不稳定。

先確認蜘蛛實际拿到的是什么

  • 用命令行 curl 或抓取工具請求 URL,看返回源碼里有没有正文關鍵詞。源碼里没有,說明内容确實是 JS 注入的。
  • 在浏览器里禁用 JavaScript 再打開頁面,看還剩多少可讀内容。如果几乎空白,風險就比較明确。
  • 检查頁面有没有服務端渲染或预渲染的輸出,比如 HTML 里已经带了标题、正文摘要、结构化資料。
  • 對照索引报告里同一批 JS 頁面的狀態,看是不是集中在“已抓取,目前未收錄”或“已發現,尚未抓取”。

三條常见的處理路径

  1. 服務端渲染(SSR):HTML 返回时就带上完整正文,JS 只负责交互。對内容型頁面来说這是最稳的一種,蜘蛛不需要額外渲染就能讀到内容。
  2. 预渲染:构建或請求时把頁面渲染成静態 HTML 再返回。适合内容頁數量不大、更新不频繁的站点,维護成本相對可控。
  3. 保留客戶端渲染,但补上關键信息:至少在 HTML 里放标题、H1、正文摘要、canonical 和结构化資料,让蜘蛛即使不渲染也能判断頁面讲什么、属于哪個主题。這條路不是最優解,但比完全空壳好得多。

几個容易忽略的细节

不要让正文藏在滚動或点击之後。需要交互才加载的内容,渲染时不一定會被触發,等于對蜘蛛不存在。

检查渲染依赖的接口是否對蜘蛛開放。有些站点用 robots.txt 或防火墙拦掉了接口路径,頁面能打開但資料請求被拒,渲染出来依舊是空的。

分頁、篩選、無限滚動要给出可抓取的 URL。纯 JS 拼接的列表如果没對應真實連結,後續内容就很难被單獨發現。

別把首屏關键内容放在异步請求的最後。渲染有時間限制,慢請求可能導致内容没等到就結束了。

一個務實的判断标准

把“關掉 JavaScript 後頁面還剩什么”当作底线測試。如果關掉 JS 後仍能讀到标题、主要正文、作者和發布時間,收錄的不确定性會小很多;如果關掉之後只剩一片空白,那么無论提交多少次 sitemap、發多少外鏈,都要先解决渲染這一层的問题。

抓取解决的是“有没有拿到這個 URL”,渲染解决的是“拿到了什么内容”。收錄看的是後者,两者混為一谈,往往會對着抓取日誌白忙一场。

最後提醒一点:渲染做好了也不等于一定收錄。它只是把内容摆到可以被判断的位置,剩下還要看内容本身是否有獨立價值、是否與其他頁面重复、URL 是否規范。渲染是入场券,不是结果。