要点
一、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 noindex | Google 遇到 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 报错,帮助发现渲染失败的页面。
来源
- Understand JavaScript SEO basics,https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics(2026-10-05 核对)
- Fix Search-related JavaScript problems,https://developers.google.com/search/docs/crawling-indexing/javascript/fix-search-javascript(2026-10-05 核对)
- Dynamic rendering as a workaround,https://developers.google.com/search/docs/crawling-indexing/javascript/dynamic-rendering(2026-10-05 核对)
- SEO link best practices for Google,https://developers.google.com/search/docs/crawling-indexing/links-crawlable(2026-10-05 核对)
