网站收录

依赖 JavaScript 渲染的页面:抓取和收录时会遇到什么

不少页面在浏览器里内容完整,搜索引擎拿到的初始 HTML 里却可能只有空壳。这篇文章梳理客户端渲染影响抓取、URL 发现和收录的常见情形,并给出 meta 声明、内链、正文和懒加载的处理顺序,帮助你把关键信息放回服务端可读的位置。

网站收录

依赖 JavaScript 渲染的页面:抓取和收录时会遇到什么

很多人遇到过这种情况:在浏览器里打开页面,正文、图片、链接都正常显示,但用查看源代码或者 curl 拉一遍,返回的 HTML 里几乎什么都没有,只有一个空容器和一段脚本。而搜索引擎对抓取和收录的判断,往往就是从这份初始 HTML 开始的。

抓取到的第一份 HTML 决定了什么

爬虫访问一个 URL 时,第一步拿到的是服务器直接返回的 HTML。如果标题、正文、内链都不在这份 HTML 里,就需要依赖后续的渲染环节来补全。渲染要额外消耗资源、时间和计算,并不是每个 URL 都会在第一时间被完整渲染,尤其在新站、权重不高、页面数量又多的站点上更明显。

还要分清抓取和收录:抓取成功只说明拿到了内容,能不能进索引,还要看渲染之后的页面质量、重复程度以及整体的索引策略。所以日志里抓取变多,并不等于页面就一定被收录。

常见的三种情况

服务端渲染或预渲染

服务器返回的 HTML 本身就包含正文和链接,渲染环节只做补充。这类页面的 URL 发现和收录通常最稳定,也是排查其他问题时最省心的基准。

纯客户端渲染

HTML 接近空壳,正文靠接口返回数据后拼出来。风险主要有三点:抓取时可能只看到一个容器;渲染失败或超时,索引里留下的就是空页面;由脚本生成的链接不一定被当作可发现路径。

混合渲染

一部分内容写在 HTML 里,另一部分靠 JS 补。常见的问题是关键信息,比如价格、更新时间、正文后半段,刚好落在 JS 那部分,收录表现就会时好时坏。

容易被忽略的几个点

  • 由 JS 生成的站内链接:如果栏目页、列表页的链接都是脚本渲染出来的,爬虫可能顺着 HTML 找不到下一层 URL,URL 发现会卡在中间。
  • 写在 JS 里的 meta robots 和 canonical:这两类声明最好由服务端输出,靠脚本写入时,可能在渲染之前就已经被判断过了。
  • 懒加载:图片和长正文异步加载本身没问题,但如果首屏之外的内容要滚动很久才出现,抓取时可能只拿到前面一部分。
  • 数据接口被单独抓取:日志里看到接口请求变多,只说明渲染过程在发生,它本身不是页面被收录的信号。

自查方法

  1. 用 curl 或查看源代码,确认初始 HTML 里有没有正文和主要链接。
  2. 在浏览器里禁用 JavaScript 再打开页面,看看还剩多少可读内容。
  3. 用平台提供的渲染查看工具或抓取测试,对比渲染前后的差异。
  4. 检查正文里的重要内链是不是真实的 a 标签,而不是 onclick 跳转。
  5. 对照抓取日志,确认爬虫访问的是页面 URL,还是只有接口地址。

处理顺序建议

  1. 先把 title、description、canonical、robots 这些声明放回服务端输出。
  2. 把正文主体和主要内链改成服务端渲染或预渲染,这是收益最直接的一步。
  3. 列表页、栏目页的分页入口尽量用真实链接,避免纯脚本跳转。
  4. 懒加载设一个合理的触发阈值,首屏内容不要依赖额外交互才出现。
  5. 关键入口 URL 用 sitemap 和站内导航双重保障,减少对单一发现路径的依赖。
渲染方式的调整只能提高内容被正确抓取和理解的概率。至于多久收录、收录多少,还取决于页面本身的价值和站点整体情况,没有哪种改法能保证结果。

如果你的页面在浏览器里一切正常,但初始 HTML 是空的,先别急着找各种收录捷径。把正文、标题和链接放回服务端就能读到的位置,通常比任何提交手段都更有用。