有些页面在浏览器里打开一切正常,标题、正文、配图都在,但在检索端看到的效果却可能只剩导航和页脚。原因常常是正文由脚本渲染,而抓取阶段取回的 HTML 里还没有这些内容。这种情况下,页面不是“没被抓到”,而是被抓到的版本和你看到的版本不是同一个。
先把三件事拆开:抓取、渲染、索引
抓取是取回 HTML 源码;渲染是在抓取之后执行脚本、补齐 DOM;索引是检索端决定是否把这个地址收进候选库并做后续处理。三者是一条流水线,不是同一件事。很多“收录一直不动”的疑问,其实卡在渲染环节:源码里没有正文,渲染队列又还没轮到它,索引里自然只能看到骨架。
怎么核对索引里拿到的是不是空壳
- 用“查看网页源代码”看原始 HTML,而不是用开发者工具的元素面板——后者显示的是脚本执行之后的 DOM,很容易让你误判。
- 临时禁用脚本再打开页面,看还剩多少可读文字。
- 用命令行工具直接请求地址,看返回体里有没有正文里的关键词。
- 在检索结果里搜该模板页面正文中特有的一句话,确认命中的到底是这一页,还是被首页等强页面顺带带出来的。
三种常见形态
一、正文完全靠脚本注入
源码里只有一个空容器。此时页面在抓取阶段几乎是零信息,能否进索引很大程度取决于渲染是否执行、执行是否成功。
二、正文在源码里,但被脚本覆盖或延迟挂载
源码有内容,脚本执行后又替换成另一版,比如价格、库存、评论区。这种情况相对好一些,至少抓取阶段能读到基础信息,但要确认替换前后语义是否一致。
三、关键信息只在交互后出现
点击展开才显示的参数表、只在弹窗里呈现的规格说明,都属于这一类。如果这些信息对理解页面很重要,最好让它在初始状态下就可见。
核对时按模板做一遍,不要逐页翻
- 按模板分层抽样,每个模板取 5 到 10 个代表 URL。
- 逐个记录:源码可读文字量、渲染后可读文字量、该地址最近一次抓取的时间与状态。
- 把源码文字量除以渲染后文字量,得到一个比例,比例长期偏低的模板优先处理。
- 处理方式通常两种:要么把关键内容改为服务端输出,要么确保渲染有稳定入口和足够执行时间。
渲染不是万能补丁。如果页面的核心信息对用户和检索端都重要,把它放在初始 HTML 里,通常比依赖后置渲染更省事。
几个容易忽略的点
- 渲染失败往往是静默的,日志里通常只留一条抓取记录,看不出正文没出来。
- 同一模板里有的页面进了索引、有的没有,差别可能只是内容量,渲染后依旧单薄。
- 不要为了“看起来更全”把所有模块都堆到首屏,页面质量看的是主内容是否清晰,而不是文字总量。
- 收录核对要留出时间窗口,渲染和索引都需要等待,改完当天就下结论容易误判。
把抓取、渲染、索引这三段分别记一笔,遇到“页面明明有内容,收录却不理想”的情况,就能比较快地定位到底卡在哪一段,而不是一上来就改内容、换模板。