用户浏览器能运行完整 JavaScript,不代表搜索引擎第一次抓取 HTML 时就拥有同样内容。Google 可以渲染 JavaScript,但抓取、渲染和索引是不同阶段。关键页面越依赖客户端运行后才出现,技术 SEO 就越需要明确验证。
01 JavaScript SEO 不是“Google 能不能运行 JS”这么简单
Google 当前文档明确说明 Googlebot 会处理 JavaScript,但搜索流程仍包含抓取、渲染和索引。渲染需要资源和队列,不应把所有关键内容都建立在“以后会执行成功”的假设上。
对于首页、产品、文章等核心 SEO 页面,尽早在 HTML 中提供主要内容和链接通常更稳妥。
02 SSR、SSG 和 CSR 的选择首先是产品架构,不是 SEO 标签
服务端渲染和静态生成能让初始 HTML 直接包含内容;CSR 则更多依赖浏览器执行 JavaScript。
这并不意味着 CSR 一定不能做 SEO,而是核心内容、Meta、链接和错误状态需要额外确保渲染后正确可见。

03 客户端路由必须产生真实 URL 和可抓取链接
点击卡片只调用 history.pushState 或 JS 函数,但 HTML 中没有 <a href>,搜索可能难以把它当正常链接发现。
Google 当前链接最佳实践仍强调使用可解析的 anchor href。单页应用也应该尊重 Web 基础导航语义。
04 动态 Title、Description 和 canonical 要检查原始与渲染结果
Google 2026 更新特别提醒 JavaScript canonical 不应在原始 HTML 和渲染后产生冲突。
同样,客户端修改 Title 或 robots 时,要用 URL Inspection 和渲染测试确认搜索实际获得什么,而不是只在本地 DevTools 看最终 DOM。
05 不要在原始 HTML 先输出 noindex,再指望 JavaScript 删除
Google 文档明确提醒:如果原始页面带 noindex,搜索可能不会按你预期继续渲染并移除它。
如果页面有可能需要索引,就不要把 noindex 当加载中的临时默认值。

06 错误状态和重定向应尽量使用正确 HTTP 响应
客户端显示“404”但服务器返回 200,容易形成 soft 404。需要永久跳转的地址最好使用服务器 3xx,而不是页面加载后 JavaScript 跳转。
HTTP 层表达页面真实状态,能让用户代理和搜索更可靠理解。
07 CSS、JS 和 API 资源不要被 robots 意外阻断
如果 Google 无法访问渲染所需资源,看到的页面可能与用户完全不同。
robots.txt 配置时要确认核心脚本、样式和数据接口是否需要被 Google 获取,同时敏感 API 应依靠认证而不是 robots 保护。

08 JavaScript SEO 最重要的是“看 Google 看到的页面”
使用 Search Console URL Inspection、Rich Results Test、服务器日志和渲染抓取工具验证。
不要因为 Chrome 打开正常就结束验收。现代 Web 技术本身不是 SEO 问题,缺少可验证的渲染与状态策略才是。
09 SSR、SSG 和 CSR 不是 SEO 的“优劣排行榜”
企业前端经常把“为了 SEO 必须 SSR”当成定论。事实上,选择应结合内容更新频率、个性化、缓存、首屏性能和运维能力。只要关键内容和链接能够被可靠发现与渲染,不同架构都可以工作。
真正危险的是关键正文只有用户交互后才请求、导航不是可抓取链接、错误状态仍返回 200,或者客户端渲染与服务器元信息互相冲突。
10 前端路由必须把 HTTP 状态码当成产品状态的一部分
单页应用很容易在不存在的路径仍返回应用壳的 200,然后页面里写“没有找到”。对用户看似是 404,对搜索却可能形成 soft 404 或大量低价值 URL。
路由、服务端和 CDN 应共同定义 404、重定向、临时错误和永久删除状态,而不是只在视觉层切换一个 Error Component。
常见问题
React 网站一定要 SSR 才有 SEO 吗?
不一定,但核心内容使用 SSR/SSG 往往更稳、更快。CSR 需要确保 Google 可渲染并发现内容。
Google 会执行所有 JavaScript 吗?
Google 能渲染大量 JavaScript,但资源、错误和实现会影响结果,不应把关键内容完全依赖后续执行。
SPA 内部链接怎么做?
使用真实 <a href>,可以同时由客户端路由拦截实现无刷新体验。
动态 Meta 标签有效吗?
可以被渲染理解,但应验证原始与最终输出,避免冲突。
客户端 404 页面可以返回 200 吗?
不建议。应尽可能返回正确 HTTP 状态,避免 soft 404。