網站收錄

源碼里没有正文:JavaScript 渲染的内容為什么收錄慢、容易漏

用戶能看到的内容,蜘蛛抓到的 HTML 里可能只是空壳。本文說明渲染在抓取流程里處在什么位置、為什么會拖慢收錄,以及如何用查看源代碼、抓取測試等方法確認問题,並给出把關键内容放回服務端、連結使用真實地址等收敛思路。

網站收錄

源碼里没有正文:JavaScript 渲染的内容為什么收錄慢、容易漏

做站的时候常遇到一種情况:浏览器里打開頁面,标题、正文、图片都正常,用戶看着没問题;但如果換成搜尋引擎的视角去看,抓到的 HTML 里只有一個空壳,真正的文字要等脚本跑完才出現。這類頁面的收錄,往往不是“能不能”的問题,而是慢一拍,甚至干脆漏掉。

蜘蛛先拿到的,是服務端返回的那一版 HTML

一次抓取通常從請求開始,服務器返回什么,蜘蛛第一步就拿到什么。如果返回的 HTML 里只有導航、脚注和一堆占位容器,正文全靠浏览器执行 JavaScript 才填進去,那么蜘蛛第一眼看到的就是一個内容稀薄的頁面。

搜尋引擎确實可以渲染 JavaScript,但渲染是排在後面的环节,需要額外的队列和资源,而且並不是每個被抓到的 URL 都會走到那一步。對站点来说,這意味着同一篇文章,別人源碼里就有正文,你要多等一轮,甚至等不到。

渲染不保證發生,也不保證完整

把渲染理解成“蜘蛛的第二遍阅讀”更合适:第一遍看源碼,第二遍才执行脚本。第二遍的触發有條件,也受站点整体抓取预算影响。頁面越多、渲染成本越高,能走到第二遍的比例就越低。

另外,渲染過程中依赖的接口如果被 robots.txt 拦掉、需要登入、或者返回很慢,蜘蛛看到的仍然是不完整的頁面。有些站点把正文接口挡在爬虫之外,自己却以為内容已经能被讀到了。

先確認自己是不是渲染型頁面

  • 右键查看網頁源代碼,直接搜尋正文里的一句话。搜不到,說明正文不在初始 HTML 里。
  • 用抓取工具或站長平台的抓取測試,對比“原始 HTML”和“渲染後 HTML”的差別。
  • 看頁面里的連結是不是标准的超連結,href 是否指向真實地址。如果内鏈靠脚本拼接或点击才生成,蜘蛛顺着爬的路径就断了。
  • 關掉 JavaScript 再打開頁面,看還剩多少有效内容。

這几步做完,大致能判断收錄是卡在“拿不到正文”,還是“拿到了但质量不够”。

想让内容稳定被發現,優先做這几件事

  1. 關键内容放源碼:标题、正文主体、主要連結尽量在服務端就輸出,交互和次要模块再交给脚本。
  2. 考虑服務端渲染或预渲染:至少让内容頁有一個包含正文的 HTML 版本。
  3. 連結用真實地址:可点击、可複製的普通超連結,比绑定点击事件更稳妥。
  4. 不要只在交互後才插入内容:像“点击展開”“滚動加载”的正文,蜘蛛不一定等得到那一步。
  5. 接口別挡住爬虫:渲染时需要的接口,確認没有被 robots.txt 或權限拦住。
  6. 用站点地图补一层入口:它不能替代頁面本身的可讀性,但能帮蜘蛛更早發現 URL。

已经上线的頁面怎么收敛

不必推倒重来。可以先按模板分档:内容頁優先改造,列表頁和詳情頁分別處理;把最有價值的頁面先补上服務端輸出的正文,再逐步扩展到全站。改造後观察抓取和索引狀態的變化,通常需要一段時間,不要指望改完第二天就有结果。

一個简單的判断标准:把 JavaScript 關掉,頁面還剩多少能讀的内容。剩得越多,收錄這條路就越顺。