網站收錄

依赖 JavaScript 渲染的頁面,怎么確認爬虫拿到的是完整内容

頁面在浏览器里正常顯示,源碼里却只有一句提示——這是不少 JavaScript 渲染頁面的通病。本文從源碼與渲染後内容的差异入手,给出自查步骤、常见誤区和几種改造成本不同的處理方式,並說明上线後该核對哪些資料,帮助你把可讀内容與可爬連結交付给爬虫。

網站收錄

依赖 JavaScript 渲染的頁面,怎么確認爬虫拿到的是完整内容

很多頁面在浏览器里看得见、点得動,爬虫拿到的源碼里却只有一句“請開啟 JavaScript”。這類頁面的收錄問题,往往不是内容质量不够,而是抓取阶段就没拿到可用的正文和内鏈。下面這套检查顺序,适合在頁面類型确定後、批量铺開之前先跑一遍。

先分清两件事:源碼里有的,和渲染後才有的

把頁面源碼(查看網頁源代碼,不是审查元素)複製出来,搜一下你的核心關鍵詞、标题、正文首段。如果搜不到,說明這些内容依赖脚本执行後才出現。爬虫通常先取原始 HTML,再决定是否渲染;渲染是有成本的,站点层級越深、资源越重,被完整渲染的概率越不稳定。

顺带確認三样東西是否也在源碼里:

  • 正文主体和關键结论段
  • 指向下一层頁面的連結(可点击的 a 标簽)
  • 标题、描述、canonical 等元信息

四個常见的“自己把自己挡住”的做法

  1. 正文由接口异步填充。HTML 里是空的容器,内容靠 XHR 或 fetch 拿回来。爬虫不执行或只执行一部分脚本时,頁面就等于空白。
  2. 連結用 JS 跳轉。onclick 或路由跳轉代替了 a 标簽的 href,内鏈图谱會断掉,新頁面难以被及时發現。
  3. robots.txt 屏蔽了 JS、CSS 或接口。想让爬虫渲染,却不让它取渲染所需资源,结果只能看到一個残缺頁面。
  4. noscript 里放的是提示语而不是内容。它不會替你补上正文,只是多一段無意义的文字。

驗證爬虫實际拿到什么

比較省事的顺序是:先看源碼,再用不带脚本的方式請求一次(命令行 curl 或關閉浏览器 JS),對照两次结果的差异。差异集中在正文、列表、價格、分頁這些位置,就值得改;差异只在外层的悬浮组件、推荐模块,優先度可以往後排。

再看服務端日誌里 JS、CSS、接口請求的来源與比例。如果搜尋引擎爬虫几乎没有請求過渲染资源,說明它很可能只看到了初始 HTML。此时不用急着归因到“被降權”,先把渲染环节补上更實际。

几種調整方式,按改造成本排序

  • 關键内容直出:标题、首段结论、主要連結寫成 HTML,脚本只负责增强交互。
  • 预渲染或静態生成:在构建或缓存阶段生成 HTML,适合内容頁、詳情頁。
  • 服務端渲染:改造量大,适合确實需要動態交互、又必须被索引的頁面類型。
  • 路由與分頁 URL 分開處理:确保每個需要被發現的頁面有獨立、可直接訪問的地址。

改完之後核對什么

改動上线後,先看日誌中對應頁面類型的抓取是否發生變化,再看索引报表里這些 URL 的覆盖狀態。別只看首頁和少數样板頁,按目錄或模板各抽几條,確認正文、内鏈、canonical 都正常。收錄本身有滞後,短期没有變化是常见情况,不建议反复改動同一批 URL。

判断标准可以简化成一句:關掉 JavaScript,這個頁面還剩下多少可讀内容和可爬連結。剩下的部分越接近用戶看到的版本,收錄环节的阻力就越小。