有些頁面在浏览器里打開一切正常,标题、正文、配图都在,但在检索端看到的效果却可能只剩導航和頁脚。原因常常是正文由脚本渲染,而抓取阶段取回的 HTML 里還没有這些内容。這種情况下,頁面不是“没被抓到”,而是被抓到的版本和你看到的版本不是同一個。
先把三件事拆開:抓取、渲染、索引
抓取是取回 HTML 源碼;渲染是在抓取之後执行脚本、补齐 DOM;索引是检索端决定是否把這個地址收進候選库並做後續處理。三者是一條流水线,不是同一件事。很多“收錄一直不動”的疑問,其實卡在渲染环节:源碼里没有正文,渲染队列又還没轮到它,索引里自然只能看到骨架。
怎么核對索引里拿到的是不是空壳
- 用“查看網頁源代碼”看原始 HTML,而不是用開發者工具的元素面板——後者顯示的是脚本执行之後的 DOM,很容易让你誤判。
- 临时禁用脚本再打開頁面,看還剩多少可讀文字。
- 用命令行工具直接請求地址,看返回体里有没有正文里的關鍵詞。
- 在检索结果里搜该模板頁面正文中特有的一句话,確認命中的到底是這一頁,還是被首頁等强頁面顺带带出来的。
三種常见形態
一、正文完全靠脚本注入
源碼里只有一個空容器。此时頁面在抓取阶段几乎是零信息,能否進索引很大程度取决于渲染是否执行、执行是否成功。
二、正文在源碼里,但被脚本覆盖或延迟挂载
源碼有内容,脚本执行後又替換成另一版,比如價格、库存、评论区。這種情况相對好一些,至少抓取阶段能讀到基础信息,但要確認替換前後语义是否一致。
三、關键信息只在交互後出現
点击展開才顯示的參數表、只在彈窗里呈現的規格說明,都属于這一類。如果這些信息對理解頁面很重要,最好让它在初始狀態下就可见。
核對时按模板做一遍,不要逐頁翻
- 按模板分层抽样,每個模板取 5 到 10 個代表 URL。
- 逐個记錄:源碼可讀文字量、渲染後可讀文字量、该地址最近一次抓取的時間與狀態。
- 把源碼文字量除以渲染後文字量,得到一個比例,比例長期偏低的模板優先處理。
- 處理方式通常两種:要么把關键内容改為服務端輸出,要么确保渲染有稳定入口和足够执行時間。
渲染不是萬能补丁。如果頁面的核心信息對用戶和检索端都重要,把它放在初始 HTML 里,通常比依赖後置渲染更省事。
几個容易忽略的点
- 渲染失敗往往是静默的,日誌里通常只留一條抓取记錄,看不出正文没出来。
- 同一模板里有的頁面進了索引、有的没有,差別可能只是内容量,渲染後依舊單薄。
- 不要為了“看起来更全”把所有模块都堆到首屏,頁面质量看的是主内容是否清晰,而不是文字總量。
- 收錄核對要留出時間窗口,渲染和索引都需要等待,改完当天就下结论容易誤判。
把抓取、渲染、索引這三段分別记一筆,遇到“頁面明明有内容,收錄却不理想”的情况,就能比較快地定位到底卡在哪一段,而不是一上来就改内容、換模板。