網站收錄

JS 渲染的内容為什么收錄慢:抓取和索引之間多出来的那一步

頁面由 JS 渲染时,抓取和索引之間會多出一道渲染工序。本文說明渲染队列在延迟、超时與配額上的現實约束,列出容易让渲染拿不到内容的常见寫法,並给出一套從查看源碼開始的自查顺序,以及降低收錄對渲染依赖的調整方向。

網站收錄

JS 渲染的内容為什么收錄慢:抓取和索引之間多出来的那一步

不少站点把主要内容交给前端框架渲染,HTML 源碼里只有一段脚本和一個空容器。這種頁面在浏览器里打開完全正常,但在搜尋引擎那條鏈路上,多出了一道容易被忽略的工序——渲染。理解這道工序的位置,能解释很多“頁面明明活着,却迟迟不進索引”的情况。

抓取和索引之間,還有一個渲染环节

搜尋蜘蛛拿到一個 URL 时,第一步取回的是服務器直接返回的 HTML。如果正文不在里面,這次抓取拿到的就是一個空壳。搜尋引擎通常不會把這個空壳直接送進索引,而是把它排進渲染队列,用類似浏览器的环境执行頁面脚本,等 DOM 稳定後再提取内容。

關键点在于:渲染不是抓取的同义词,它有獨立的队列和獨立的延迟。抓取可能几分钟就完成,渲染却可能排到几小时甚至更久,而且渲染资源有限,不是每個 URL 都能拿到同样的優先級。

渲染队列的几個現實约束

  • 有延迟:入队到执行之間存在明顯間隔,頁面内容變化快时,渲染出来的可能是舊狀態。
  • 有超时:脚本执行時間過長、接口迟迟不返回,渲染會被截断,剩下的部分按缺失處理。
  • 有配額:站点整体质量、更新频率、内鏈结构都會影响分配到的渲染次數。

這几個约束叠加起来,就會出現同一批頁面里有的很快被索引、有的長期停在外面的現象,差异往往不在“有没有被抓”,而在“渲染有没有跑完”。

哪些寫法容易让渲染拿不到内容

  • 正文依赖首屏之外的懒加载,只有滚動或点击才触發請求。
  • 關键資料来自登入後才返回的接口。
  • 内容由多個异步請求拼装,任何一個失敗就整块空白。
  • robots.txt 或服務器規則挡住了 JS 與 CSS,脚本跑不起来。
  • 頁面渲染依赖具体的地理位置、设备或實驗分支。

前三條属于内容交付方式的問题,第四條是直接的屏蔽問题,第五條則會让不同环境下的渲染结果不一致,排查时容易被誤判成“頁面有时收錄有时不收錄”。

一個可执行的自查顺序

  1. 先用查看源碼的方式打開頁面,確認正文是否出現在初始 HTML 里。這一步能直接区分“渲染問题”和“其他問题”。
  2. 再用工具查看渲染後的 DOM,對比两者内容量差异,判断渲染是否真的补上了正文。
  3. 查看日誌里该 URL 的抓取记錄與返回狀態,確認抓取本身正常。
  4. 检查 robots.txt、CDN 與 WAF 規則,確認脚本资源没有被拦。
  5. 對渲染異常的頁面,單獨抽查接口是否稳定、耗时是否過長。

顺序上建议從“内容在不在源碼里”開始,因為它决定了後面要查的是渲染管线,還是別的方向。

更稳妥的做法:让重要内容不依赖渲染

並不是说不能用前端渲染,而是要把“必须被索引的内容”和“锦上添花的交互”分開對待。

  • 列表頁、詳情頁的正文、标题、價格、時間等核心字段,尽量在服務端輸出。
  • 分頁、篩選、切換後的内容,如果本身有搜尋價值,最好有一個可直接訪問的 URL 视图。
  • 懒加载留给图片等次要资源,別把主体文字也挂上去。
  • 對确實只能靠渲染的頁面,减少首屏依赖鏈,让渲染在超时前拿到内容。
一個简單的判断标准:如果關掉 JS 之後頁面讀不出核心信息,那這個頁面的收錄就額外依赖渲染队列,稳定性天然會差一档。

把這几件事理顺之後,不少“收錄慢”的抱怨會落到渲染环节的排队與失敗上。抓取只是把门打開,渲染才是让内容真正落到索引里的那一步。