站点在浏览器里打開一切正常,标题、正文、图片、评论区都在,但從搜尋蜘蛛的视角看,頁面可能只是一個空壳。收錄的第一步是抓取,抓取拿到的通常是服務器直接返回的那份 HTML,之後才轮到渲染、解析和质量判断。如果關键内容只存在于 JavaScript 执行之後,收錄就多出了一道不受你控制的环节。
先分清“有内容”和“蜘蛛拿到内容”
這两件事经常被混為一谈。你在浏览器里看到的内容,是 HTML、CSS、JS 跑完一轮之後的结果;而蜘蛛第一次拿到的東西,往往只有最初那一段响應。渲染确實存在,但它要消耗額外资源,也可能被推迟执行,站点規模一大,未必每次都會走完。
所以排查方向不是“我的頁面有没有内容”,而是“在不执行 JS 的情况下,這個頁面還剩多少内容”。
几種常见的“内容後置”情况
- 整站客戶端渲染:初始 HTML 里只有一個挂载节点,标题和正文都由脚本插入。
- 懒加载:图片、長文後半段、评论区要等進入视口或触發滚動才發起請求。
- 無限滚動:列表不断追加内容,但這些内容没有各自獨立的 URL。
- 交互才出現:正文藏在标簽頁、折叠面板、点击展開的模块里,預設狀態是空的。
- 依赖狀態:未登入、没有本地存储或没有特定參數时,頁面呈現的是另一套内容。
用抓取视角做一次自检
- 在浏览器里關閉 JavaScript 打開頁面,看還剩哪些文字,這大致就是最保守的抓取结果。
- 用“查看網頁源代碼”,而不是“审查元素”,確認标题和正文是否出現在初始 HTML 中。
- 對比渲染前後的 DOM 差异,定位到底是哪一段脚本在插入關键内容。
- 翻一遍訪問日誌,看蜘蛛有没有請求渲染所依赖的 JS 文件和接口,以及返回狀態是否正常。
這四步做完,基本能判断問题是出在渲染方式、加载时机,還是资源被挡住。
調整顺序:先保核心内容,再谈体驗
不必一上来就把整站改成服務端渲染,按影响面從大到小處理更現實。
- 核心信息服務端輸出:标题、正文、發布時間、價格、库存這類决定頁面主题的内容,優先放進初始 HTML。
- 放宽懒加载阈值:把触發距离調大,或让首屏和正文直接輸出,只對次要模块保留懒加载。
- 给無限滚動补 URL:把内容拆成带獨立地址的分頁,或至少提供一個可点击的“下一頁”連結。
- 让交互内容可直達:标簽頁和折叠面板给出獨立參數地址,或預設展開第一段核心内容。
- 確認渲染依赖没被挡住:如果确實需要渲染,JS 和 CSS 就不该在 robots.txt 里被屏蔽。
這几步不需要一次做完,但越靠前的内容,收益越明顯,因為它們同时影响抓取、索引和後續的更新判断。
渲染不是萬能兜底
有人把渲染当成最後一道保險:反正蜘蛛會渲染,不寫服務端也没關系。實际执行中,渲染可能被延迟、可能超时、也可能因為资源加载失敗而中断。把核心内容放在初始响應里,稳定性更高,也更容易被反复抓取和更新。
蜘蛛先看到什么,收錄才可能基于什么。看不到的部分,很难進入後續判断。
改完之後怎么驗證
發布或調整後,別只看頁面在浏览器里的样子。可以對照這几点观察:關閉 JS 後頁面是否仍有完整正文;抓取返回的 HTML 里是否包含目标關鍵詞;日誌中蜘蛛對 JS 和接口资源的請求是否减少、對頁面的請求是否恢复正常;收錄版本里的摘要和标题是否與目前内容一致。
如果關閉 JS 後内容已经完整,但收錄仍没動静,那問题多半不在渲染,而要看 URL 是否可發現、頁面是否被 noindex、以及内容本身是否值得收錄。渲染只是收錄鏈路上的一环,理顺它,是為了让後面的判断不被無谓地卡住。