很多人排查收录时会遇到一种情况:自己在浏览器里明明看到页面上有完整内容,但在搜索结果里,这段内容却像是从来不存在。排查时先别急着怀疑爬虫,先看看这段内容是怎么出现在页面上的——如果它依赖 JavaScript 渲染或者用户交互才出现,爬虫第一次拿到的 HTML 里可能根本没有它。
抓取和渲染不是同一件事
搜索引擎处理一个 URL 通常分两步:先从服务器取回 HTML,再决定是否执行页面里的脚本、等待内容渲染出来。第二步在资源上更贵,所以会排队、会有取舍,不是每个页面都能立刻完成渲染。这意味着“能抓取”和“能读到内容”之间还隔着一段距离。
这也是为什么同一个站点里,静态输出的页面和纯前端渲染的页面,收录表现常常不一样。前者内容在第一次响应里就到位,后者要等引擎愿意再跑一遍脚本。
哪些写法容易让内容“迟一步”出现
- 图片和视频的文字信息放在懒加载的容器里,初始 HTML 只有占位符;
- 列表只加载第一页,“下一页”由滚动或点击触发,接口返回的数据不在 HTML 中;
- 选项卡、折叠面板里的内容只在点击后才请求;
- 价格、库存、评论等由前端接口填充,HTML 里是空模板;
- 整站使用客户端路由,路由切换不产生新的服务端响应。
这些写法的共同点不是“技术上不行”,而是把内容放到了需要额外动作才能到达的位置。渲染资源充足时可能没事;渲染来不及或脚本报错时,内容就缺席了。
折叠内容与懒加载不完全一样
需要区分两种“看不见”。
- 折叠但仍存在于 HTML:比如用 CSS 隐藏、用 details/summary 实现的面板。内容已经在文档里,只是默认不展示,通常仍会被解析。
- 初始 HTML 里没有:内容要等脚本执行、接口返回后才插入 DOM。这类情况风险更高,因为它依赖渲染是否发生。
同样是“需要点开才能看到”,两者对收录的影响并不相同。排查时看页面源代码(不是开发者工具里渲染后的 DOM)就能分辨:能搜到那段文字,属于前者;搜不到,属于后者。
一段可操作的自查流程
- 用浏览器“查看网页源代码”,搜索页面核心文案或关键数据,确认是否在原始响应里;
- 用 URL 检查工具查看渲染后的 HTML 与截图,对比是否与用户所见一致;
- 临时关闭 JavaScript 刷新页面,看还剩下多少实质内容;
- 检查站点是否对爬虫返回了与用户不同的内容,避免无意中造成内容不一致;
- 在服务器日志里确认这些 URL 是否被请求过,以及请求时返回的状态码。
处理思路:让重要内容先到位
不需要把整站都改成服务端渲染,优先处理那些真正需要被搜索到的页面就够了。
- 正文、标题、主要参数放在服务端输出的 HTML 中;
- 列表分页提供可抓取的链接,而不是只有无限滚动;
- 交互后才加载的内容,给它一个可直接访问的 URL;
- 图片承载的信息用文字补全,别只放在图里;
- 上线后用渲染后的 HTML 做一次比对,确认内容真的出现。
需要说明的是,渲染出内容只是让页面具备被索引的条件,不等于一定被收录,也不代表能获得好的排名。它解决的是“内容有没有被读到”的问题,而不是“内容好不好”的问题。
小结
首屏之外的内容能不能进索引,关键不在位置,而在它是否出现在爬虫能够读到的那份文档里。把核心内容放回 HTML、给交互内容一个独立 URL、定期用渲染结果和源代码做对照,多数“内容在页面上却不在索引里”的问题都能定位到具体环节。