很多站点在浏览器里看一切正常,但蜘蛛拿到的 HTML 里只有一句“請開啟 JavaScript”。原因通常是内容靠前端框架在客戶端渲染。對站点运营来说,這不是纯前端细节,而是抓取鏈路上的一道關卡:内容進不了初始 HTML,後面所有優化都無從谈起。
先確認:你的頁面是不是空壳
最直接的办法是查看頁面源代碼,注意是“查看源代碼”,不是右键“检查”。在源碼里搜尋正文中一段獨有的句子,比如文章第二段的一個词组。如果搜不到,說明内容是在頁面加载後由脚本注入的。
也可以用命令行抓一次,請求頁面地址,看返回内容里有没有正文文字。两種方法都找不到,基本可以确定這個頁面依赖客戶端渲染。
三種常见處理方式
服務端渲染
服務器返回的就是带内容的 HTML,蜘蛛和訪客拿到的東西一致。改動量和成本相對大,但维護起来最省心,重要頁面優先考虑。
预渲染
對不常變化的頁面,在构建阶段或請求时生成静態 HTML。适合内容頁、活動頁這類结构固定的地址,改造成本通常低于全面重构。
客戶端渲染
HTML 先到、内容後到。搜尋引擎能执行 JavaScript,但执行需要排队、也可能超时,並不保證每個頁面都被完整渲染。重要頁面尽量不要只依赖這一種方式。
一份可执行的自查清單
- 首頁和主要栏目頁,源碼里是否有可讀的核心内容;
- 指向内頁的連結是否寫在 HTML 里,而不是等点击时才生成;
- 分頁、篩選、加载更多,是否存在可被抓取的静態地址;
- 标题、描述、canonical 是否在初始 HTML 中輸出,而不是由脚本寫入;
- 结构化資料是否出現在初始 HTML 里,而不是靠脚本插入;
- 首屏图片地址和懒加载逻辑,會不會影响正文被抓取;
- 頁面依赖的接口是否對爬虫開放,有没有鉴權或地域限制;
- 是否有規則挡住了 JS、CSS 或接口路径,導致頁面渲染不出来。
两個容易被忽略的细节
連結的可抓取性
用 a 标簽的 href 寫連結最稳。用 onclick 跳轉、用 div 配合样式模拟按钮,蜘蛛未必會跟過去。導航和列表頁尤其要注意。
资源被誤挡
有的站点為了省流量,在 robots.txt 里屏蔽脚本、样式甚至接口路径,结果頁面在渲染时缺胳膊少腿。要么放行這些资源,要么干脆改成服務端渲染。
修复的排序思路
先把流量最大、轉化最關键的頁面改成服務端渲染或预渲染,再處理列表頁和篩選頁,最後才是長尾内容頁。改完別急着下结论,用抓取工具模拟一次,看渲染後的 DOM 里有没有正文和連結,再對比改動前後的抓取记錄。
渲染自查不是一次性任務。前端框架升級、模板改版、接口調整之後,都值得用同样的方法再跑一遍。