网站收录

JS 渲染的页面:蜘蛛抓到的内容和你看到的可能不是一版

蜘蛛请求页面时,最先拿到的是服务器返回的初始 HTML。如果正文、内链、列表都要等 JavaScript 执行后才出现,蜘蛛看到的内容可能和用户看到的完全不同。本文梳理常见的渲染盲区、自查方式和处理优先级,帮助你把关键内容放回初始响应里。

网站收录

JS 渲染的页面:蜘蛛抓到的内容和你看到的可能不是一版

先分清“抓到了”和“看懂了”

蜘蛛请求一个 URL 时,服务器先返回一份 HTML。这份初始 HTML 里有什么,决定了蜘蛛第一眼能看到什么。如果标题、正文、列表、站内链接都是由 JavaScript 在浏览器里执行后才生成,那么蜘蛛拿到的初始响应可能只是一个空壳。

用户打开页面看到完整内容,是因为浏览器执行了脚本、调用了接口、把数据插进了 DOM。这个过程发生在用户的浏览器里,不一定会发生在蜘蛛那一边。

渲染是排队做的,不是即时的

现在主流搜索引擎确实会做渲染:把页面放进无头浏览器里执行脚本,再读取渲染后的结果。但这件事是异步排队进行的,有资源额度限制,也并不保证每一个页面都会被完整渲染一遍。所以“我的页面用户能看到”不能直接推导出“蜘蛛一定能看到”,更不能推导出“一定会被收录”。

哪些写法最容易出问题

  • 正文、卡片、商品信息由前端接口拉取后插入,初始 HTML 里只有加载中的占位文字
  • 导航、面包屑、相关推荐由 JS 生成,源码里的 a 标签为空或干脆不存在
  • 翻页、加载更多只改变前端状态,没有对应的可访问 URL
  • 需要点击、滚动、悬停之后才出现的内容
  • 关键信息放在图片、画布,或必须登录后才会返回数据的接口里

这些写法在开发视角下很常见,但在抓取视角下,等于把内容藏在了第一层响应之外。

自查:用最原始的方式看页面

  1. 关闭 JavaScript,或直接查看网页源代码,确认初始 HTML 里有没有标题、正文和站内链接
  2. 用搜索平台的 URL 检查类工具,对比渲染前后两个版本的差异
  3. 对照服务器日志,看蜘蛛有没有抓到你的接口请求。多数情况下它不会主动去调你的异步接口
  4. 抽查几个最重要的页面,而不是只看首页

四步做下来,通常就能判断出问题是出在抓取阶段,还是出在内容本身。

处理思路与优先级

不必一上来就把整站改成服务端渲染,先把“必须被理解的内容”放回初始响应里就够了。

  • 首屏正文、核心链接、标题与描述,尽量在 HTML 直出
  • 列表页保证第一页内容在源码里,后续翻页使用可被抓取的独立 URL
  • 站点地图里填的是最终能直接访问的地址,不要填只有脚本才能跳转到的状态
  • 确实只能靠脚本渲染的部分,至少留一段静态兜底文本

预渲染适合什么场景

页面数量不大、更新频率不高、模板相对固定的站点,可以用预渲染把 HTML 提前生成好;内容量大且更新频繁的站点,更常见的做法是服务端渲染,或者把关键区块直出。两者目标一致:让初始响应里就有可读内容。

抓取与收录的区别在这里怎么体现

渲染不完整,通常先表现为抓取阶段就缺内容,蜘蛛手里没有可判断的素材,收录自然无从谈起。另一种情况是页面被抓到了,但初始 HTML 内容稀薄,被当成低质量页面处理。前者要查日志、查渲染链路,后者要回到内容本身,排查方向并不一样。

把“用户能看到”当作验收标准是不够的。蜘蛛看到的那一版,才是收录判断的输入。

别把所有收录问题都归到 JS 上

有些页面渲染完全正常,收录依然不理想,原因可能在重复内容、URL 写法不统一、站点层级过深,或者页面本身没有独立价值。渲染只是其中一环,排查时把它和其他因素分开看,才能找到真正的原因。