不少站点在浏览器里看着一切正常,标题、正文、相關推荐、分頁都在。但如果把 JavaScript 關掉再打開頁面,或者直接查看初始 HTML 源碼,可能會發現该有的内容几乎都不在。搜尋引擎蜘蛛拿到的第一版 HTML,和你屏幕上看到的可能完全是两回事。這不是“蜘蛛笨”,而是渲染方式决定的。
先分清两種情况
搜尋蜘蛛通常分两步走:先抓取初始 HTML,再排队做渲染。如果内容本来就寫在 HTML 里,第一次抓取就能讀到;如果内容由 JavaScript 生成,就要等渲染队列。渲染有延迟,也有失敗的可能,而且不是所有内容都值得進入渲染队列。所以真正的問题不是“蜘蛛能不能渲染”,而是“你愿不愿意赌它一定渲染”。
做一次“源碼视角”自查
不用复杂工具,按下面几步就能有初步判断:
- 在浏览器里打開目标頁面,右键查看網頁源代碼,搜尋正文里的几句话,看能不能找到。
- 在浏览器設定或開發者工具里禁用 JavaScript,刷新頁面,看還剩多少可讀内容。
- 查看主要内鏈(導航、栏目頁、文章頁連結)是否出現在初始 HTML 中,還是点击後才由脚本插入。
- 检查分頁、加载更多、Tab 切換、折叠面板里的内容,是否需要交互才會出現。
- 用抓取工具的“以 Googlebot 身份抓取並渲染”功能,對比原始 HTML 和渲染後 HTML 的差异。
如果發現正文、内鏈、分頁中有一項以上只存在于渲染後的版本里,就值得安排處理了。
常见的几種“藏内容”方式
- 纯前端路由。整站由 JavaScript 接管跳轉,連結地址是前端拼出来的,蜘蛛顺着連結走时容易断。
- 点击後才加载。正文只顯示两三行摘要,更多内容靠“展開”按钮触發請求。
- 懒加载過度使用。图片、列表、甚至段落都在滚動到可视区域後才插入頁面结构。
- 骨架屏與占位符。首屏先渲染灰條,真實内容後到,抓取时可能只看到空框。
- 内鏈由脚本寫死。相關文章、推荐位、面包屑都靠脚本生成,初始 HTML 里没有可抓的連結。
能落地的處理思路
1. 關键内容優先走服務端
正文、标题、主要導航、内鏈這些确定性内容,尽量在服務端渲染或静態生成时就輸出到 HTML。框架本身支持服務端渲染或静態生成的,別為了省事全部退回客戶端渲染。
2. 预渲染作為過渡
老站点一时改不動架构,可以對重要栏目做预渲染,把常见頁面的渲染结果以静態 HTML 返回。注意维護预渲染的更新频率,否則用戶和蜘蛛看到的是過期版本。
3. 保證初始 HTML 里有可抓的連結
導航、栏目頁、分頁、上下篇這些结构性連結,尽量用真實的 a 标簽寫在 HTML 里。用点击事件加脚本跳轉的寫法,對用戶没差別,對蜘蛛差別很大。
4. 让懒加载留有余地
首屏和靠前的内容不要懒加载;图片懒加载时保留尺寸属性,避免布局抖動;正文文字不要用懒加载,它通常不是性能瓶颈。
用日誌驗證结果
改完之後別只看感觉。看服務器日誌里蜘蛛對目标 URL 的請求次數、返回狀態碼和請求時間,對比修改前後頁面 HTML 的体积變化。如果日誌顯示蜘蛛反复抓取同一個地址却拿不到正文,或者抓取深度明顯變浅,說明問题還在。也可以定期在抓取工具里重新检查一次渲染差异。
需要提醒的是,渲染友好並不等于一定被收錄。它只是把“内容能不能被讀到”這件事做扎實,剩下的仍然取决于内容本身和整体站点质量。
JavaScript 渲染自查不用一次全站铺開,從流量最大、更新最勤的几個栏目開始,把正文、内鏈、分頁三件事確認清楚,再逐步扩展到全站,通常比推倒重来更實际。