網站收錄

依赖 JS 渲染的頁面,收錄會卡在哪几段

頁面靠 JavaScript 拼装内容时,蜘蛛第一次拿到的往往只是骨架 HTML。本文說明原始 HTML 與渲染後 DOM 的差別,以及初始無正文、接口被拦截、内容需交互、渲染超时這几類卡点,並给出自查與處理顺序,帮你把抓取和收錄之間的落差定位清楚。

網站收錄

依赖 JS 渲染的頁面,收錄會卡在哪几段

現在不少頁面依赖 JavaScript 来拼装内容:導航由组件渲染,列表從接口拉取,正文也可能在客戶端才注入。對用戶来说這没什么問题,但對搜尋引擎来说,蜘蛛第一次拿到的往往只是一個骨架 HTML。如果内容只存在于渲染之後,收錄的判断就會整体往後拖。

蜘蛛其實會看到两份頁面

理解這個問题,先要分清两份東西:

  • 原始 HTML:服務器返回的第一版,通常只有 head、少量占位节点和脚本引用,正文位置是空的。
  • 渲染後的 DOM:搜尋引擎用無头浏览器执行 JS 後得到的版本,這才是它真正拿去判断内容的版本。

两份之間的差异越大,從抓取到進入索引之間隔的時間通常越長。抓取成功並不等于收錄,渲染失敗或渲染结果為空,頁面都會停在索引之外。這也是抓取與收錄最容易被混為一谈的地方。

容易卡住的几個位置

初始 HTML 里几乎没有正文

  • 正文完全靠 JS 注入,初始 HTML 里只有一個空容器;
  • 文章列表由接口返回,HTML 中没有任何連結;
  • 标题、描述、结构化信息也在客戶端拼装。

這種情况下,頁面能否被理解,几乎全押在渲染這一步上。

渲染要用的資料被挡住了

如果 robots.txt 屏蔽了接口路径,或者接口需要登入態、特定請求头、特定来源,渲染器拿不到資料,渲染出来的就是空壳。這属于站点自己阻断了自己,和内容质量没關系,但表現上會被当成收錄問题。

内容要交互才出現

点击“展開更多”、切換标簽頁、滚動到頁面底部才加载的内容,渲染器不一定會执行這些動作。未触發的那部分内容,基本不會被纳入判断范围,連結也同样不會被發現。

渲染超时或资源阻塞

首屏脚本太重、第三方资源長時間不返回、渲染队列等待過久,都可能让渲染被提前結束,拿到的只是半成品。表現就是:同一個頁面,有时能收錄,有时迟迟不動。

怎么判断自己是不是這種情况

  1. 用平台自带的 URL 检查工具,對比“已抓取的 HTML”和“渲染後的 HTML”,看正文是否真的出現;
  2. 在浏览器里關閉 JavaScript,或直接查看頁面源代碼,確認核心内容是否存在于初始 HTML;
  3. 看服務器日誌里该 URL 的抓取频次、返回狀態和资源請求情况,判断是否有接口請求失敗;
  4. 抽查一批核心頁,不要只看首頁或某一個模板。

處理顺序建议

  1. 優先让核心内容頁做到服務端渲染或预渲染,至少保證正文和主要内鏈出現在初始 HTML 中;
  2. 把主内容、面包屑、分頁連結這類用于 URL 發現的元素放在初始 HTML,而不是等脚本补上;
  3. 检查接口是否被 robots 規則挡住,確認渲染器能正常取到資料;
  4. 精简首屏脚本和第三方依赖,减少渲染超时的概率;
  5. 以上都確認後,再谈 sitemap 提交和内鏈引導,顺序反了容易白等。
sitemap、内鏈、外鏈解决的是“让蜘蛛知道並找到 URL”;頁面能不能進索引,還要看渲染出来的内容是否可讀、是否有獨立價值。两件事分開看,排查才不會被带偏。

如果你的站点收錄數字長期偏低,又刚好是前後端分离的架构,建议先把渲染這條鏈路走通再看別的原因。很多看起来像收錄策略的問题,源头其實在内容根本没被渲染出来。