DTC 品牌营销知识库 DTCBM.COM 关注公众号

SEO · technical-seo

JavaScript 网站的抓取、渲染与索引

要点

一、Google 处理 JavaScript 网站分抓取、渲染、索引三个阶段,抓取和渲染各有队列。

  • 抓取:Googlebot 先检查 robots.txt 是否允许抓取该网址,允许后请求页面,解析 HTML 响应里的链接并加入抓取队列。
  • 渲染:返回 200 状态码的页面会进入渲染队列,除非 robots meta 标签或响应头表明不要索引。页面在队列里可能停留几秒,也可能更久。之后由无头 Chromium 执行 JavaScript 渲染页面,Google 使用的是持续更新的 Chromium 版本。
  • 索引:渲染完成后,Googlebot 再次解析渲染后的 HTML 找链接,并用渲染后的 HTML 建立索引。

二、渲染方式对 SEO 的影响,官方的说法集中在两点。

  • 客户端渲染的内容要等渲染阶段执行 JavaScript 后才能被看到,会受渲染队列等待时间和资源能否加载影响。被 robots.txt 屏蔽的 JavaScript 文件或页面,Google 不会渲染。
  • 官方认为服务端渲染或预渲染仍然值得做,理由是页面对用户和爬虫都更快,而且不是每种爬虫都能执行 JavaScript。在动态渲染文档里,官方推荐的做法是服务端渲染、静态渲染或 hydration。

三、动态渲染已不被推荐。官方原文的意思是,动态渲染是一种临时解决方法,不是长期方案。Googlebot 一般不把动态渲染视为伪装,前提是给用户和爬虫的内容相近;给两者的内容明显不同,可能被视为伪装。

四、用 JavaScript 修改 title、canonical、robots meta 时,要注意的地方不同。

元素官方说明做法
title 和 meta description可以用 JavaScript 设置或修改每个页面写独特、具体的标题和描述
canonical可以用 JavaScript 注入,但不要改成与原始 HTML 中 canonical 不同的网址;出现多个互相矛盾的 canonical 可能导致意外结果最好在原始 HTML 里写好,JavaScript 不改动
robots meta noindexGoogle 遇到 noindex 时可能跳过渲染和 JavaScript 执行,因此用 JavaScript 去掉原始 HTML 里的 noindex 可能不生效希望被索引的页面,原始代码里不要写 noindex

五、单页应用要处理状态码和路由。

  • 客户端路由下不存在的页面常返回 200,可能变成软 404,错误页被索引。官方给出两种处理:用 JavaScript 跳转到服务器返回 404 的网址,或用 JavaScript 给错误页加 <meta name="robots" content="noindex">。
  • 用 History API 区分不同页面,不用 # 片段。Google 不能可靠解析片段网址。

六、链接和其他资源的要求。

  • 用 JavaScript 往 DOM 里注入链接可以,前提是链接符合可抓取写法,即带 href 的 <a> 元素。
  • 渲染服务可能忽略缓存头,官方建议给 JavaScript 文件名加内容指纹,例如 main.2bb85551.js,避免使用过期资源。
  • Web 组件的 shadow DOM 和 light DOM 会被展平,用 <slot> 让内容出现在渲染后的 HTML 里。
  • 结构化数据可以用 JavaScript 生成 JSON-LD 注入页面,需要用工具测试。
  • 本地存储、会话存储和 Cookie 在页面之间会被清除;需要用户授权的功能对 Googlebot 没有意义;Googlebot 不支持 WebSocket 和 WebRTC,需要提供 HTTP 方式获取内容。

容易误解的地方

  • 用 JavaScript 给错误页添加 noindex 是官方给出的做法,用 JavaScript 移除原始 HTML 里的 noindex 则不可靠,两个方向的结果不同。
  • 只有 onclick 没有 href 的 <a>、<span href>、javascript: 协议这类写法,Google 不能可靠地把它们当作链接。

怎么检查

  • 在 Search Console 用网址检查工具测试线上网址,查看渲染后的 HTML、截图、已加载资源、JavaScript 控制台输出和异常信息。确认正文、title、canonical、robots meta、内部链接、结构化数据都出现在渲染后的 HTML 里。
  • 不方便用 Search Console 时,用富媒体搜索结果测试查看渲染后的 DOM 和控制台输出。
  • 对比原始 HTML(查看源代码)与渲染后的 HTML:canonical 在两者中是否一致,原始 HTML 是否有不该有的 noindex。
  • 检查 robots.txt 是否屏蔽了页面依赖的 JavaScript 或 CSS 文件。
  • 访问一个不存在的路由,确认返回 404,或渲染后的页面带 noindex。
  • 官方还建议用全局错误处理记录 JavaScript 报错,帮助发现渲染失败的页面。

来源

公众号 DTC品牌营销 二维码扫码 / 长按识别

接入知识库

把整套已验证知识接进你自己的 AI

关注公众号「DTC品牌营销」,自动发放知识库 MCP / CLI 接入 key,让你的 AI 直接调用全部已沉淀经验,并持续接收更新。

相关内容