站点运营

站点运营:JS 渲染自查,別让正文只存在于浏览器里

頁面在浏览器里看着完整,查看源代碼却只剩脚本和空容器,這是不少前端渲染站点的通病。本文讲怎么判断蜘蛛拿到的是哪一版 HTML,梳理正文注入、JS 連結、懒加载三類常见問题,並给出服務端渲染、预渲染等让核心内容更早出現在源碼里的處理思路。

站点运营

站点运营:JS 渲染自查,別让正文只存在于浏览器里

現在用前端框架搭站很常见。頁面在浏览器里看着完整,正文、图片、评论区都在,但打開“查看網頁源代碼”,可能只剩一個空的挂载节点和几個脚本文件。對用戶来说没差別,對搜尋蜘蛛来说,這是一次几乎没有内容的訪問。渲染方式不是纯技術细节,它决定了蜘蛛能不能讀到你的正文,也决定了它能不能顺着頁面里的連結繼續發現更多 URL。

先分清:蜘蛛拿到的是哪一版 HTML

判断方法不复杂,把同一篇文章用两種方式各看一次:

  • 查看網頁源代碼:拿到的是服務器最初返回的 HTML,接近蜘蛛第一次抓到时看到的東西。
  • 检查元素(開發者工具):看到的是脚本执行之後的 DOM,是你和用戶最终看到的样子。

如果源代碼里能讀到标题、正文主体和主要連結,說明頁面偏服務端渲染或静態直出,後續解析一般不會有太大障碍。如果源代碼里只有脚本、样式和一片空白容器,正文要等浏览器跑完脚本才出現,那就属于客戶端渲染,需要重点確認。

還要留意一点:不同搜尋引擎對脚本的處理能力並不相同,执行时机、等待时長、脚本請求是否被放行,都會影响结果。把關键内容完全交给脚本,等于把不确定性留给了自己。

三類最容易出問题的场景

正文全部由接口返回後注入

文章詳情、商品描述這類主体内容如果靠接口拉取再渲染,蜘蛛在没有执行脚本时拿到的就是一個空壳。标题可能還寫在静態部分,正文却是空的,頁面很难被判断為有實质内容。更麻烦的是,摘要、描述、结构化資料往往一並缺失。

連結是点击事件,不是常規 a 标簽

用事件绑定或前端路由代替常規的 a 标簽,用戶点击没問题,但頁面源碼里没有可识別的新地址。蜘蛛顺着連結爬行的路径就断了,很多本该被發現的頁面只能等 Sitemap 或外鏈来救。URL 發現效率一下降,新内容的收錄节奏自然變慢。

懒加载没有兜底

图片和長列表用懒加载本身没問题,問题在于把标题、價格、關键段落也放進“滚動才加载”的逻辑里。蜘蛛不滚動頁面,這部分内容就等于不存在。图片可以延迟加载来優化速度,正文和連結不行。

一份可以照着走的自查清單

  1. 随机挑 5 到 10 個不同類型的頁面(首頁、栏目頁、詳情頁、列表分頁),逐一對比源代碼與 DOM 的差异。
  2. 在浏览器禁用脚本後重新打開頁面,看還剩多少内容,剩下的部分就是最稳妥的底线。
  3. 检查詳情頁正文是否出現在源碼中,标题、描述、结构化資料是否同样可见。
  4. 检查導航和列表頁的連結是否為真實可点击的地址,而不是事件绑定。
  5. 用抓取工具或站長平台的抓取測試,看返回内容與浏览器看到的是否一致。
  6. 核對 robots.txt 是否誤拦了脚本、样式等渲染必需的资源文件。

其中第 2 條和第 6 條最容易被忽略。禁用脚本後的頁面虽然难看,但它能直接告诉你:哪些内容是“必须有脚本才能存在”的。

處理思路:让核心内容先出現在源碼里

不一定要把整站推倒重做,可以按投入從低到高排一下:

  • 服務端渲染或静態直出:詳情頁、栏目頁這類内容型頁面優先改造,正文随 HTML 一起返回,後續的交互再交给前端。
  • 预渲染:對更新频率不高的頁面,构建时生成一份 HTML 快照,成本相對可控。
  • 關键内容降級:暂时無法改造的頁面,至少保證标题、正文首段、主要連結寫在静態部分。
  • 补齐常規連結:導航、面包屑、相關推荐改用真實地址,保證爬行路径不断。

改造之後別只看首頁。挑几個深层頁面重新做一次源代碼對比,確認正文和連結确實出現在最初的 HTML 里,再观察日誌中蜘蛛的抓取情况有没有變化。

渲染方式的調整往往不會立刻带来可见變化,它更像是把一條原本时通时断的路修平。路修好了,蜘蛛愿不愿意多走,還取决于内容本身。

最後提醒一句:渲染只是内容能不能被讀到的前提,不是全部。正文是否有價值、頁面之間是否形成了合理的结构,仍然决定了這些被看到的 URL 能走多遠。把渲染問题解决掉,相当于把门槛降下来了,剩下的還是要回到内容和栏目本身。