2024 年初一个客户给我来电,中等规模电商品牌,React 前端,Next.js,纸面上一切都做得对。他们的分类页面排名无处可寻。完全没有排名。网站看起来棒极了,UX 团队以此自豪,而 Googlebot 本质上看到的是空的 <div> 汤。三个月的错失收入,全因为有人读过 2021 年的一篇 Medium 文章,假设 Googlebot 现在"像 Chrome 一样"处理 JavaScript。它没有。不可靠。2026 年还是一样。
关键要点:Googlebot 渲染 JavaScript"某种程度上":渲染有延迟且容易失败,所以要对任何需要被索引的内容进行服务器端渲染,并将仅限客户端的内容视为不可见。
没人会明确说这一点:Googlebot 可以渲染 JavaScript。但它在抓取预算的限制下运行,以异步方式进行二次渲染,任何在初始绘制后才获取内容的 JavaScript 都是你在赌排名。我见过这让客户损失数万英镑的自然流量。所以让我们准确地说清楚:服务端渲染在什么时候真正有帮助,什么时候又在悄悄拖慢你的网站、增加维护难度,而对 SEO 毫无帮助。
Googlebot在2026年如何实际处理JavaScript
Googlebot 使用无头 Chromium 实例。这部分是真的,多年来一直如此。但这是文档悄悄隐瞒的东西:渲染分两波进行。第一波爬取你的 HTML。第二波,JavaScript 执行的地方,发生得更晚,有时几小时后,有时几天后。Google 自己的文档证实了这种两波架构,不过它并没有特别宣传这个延迟。
这在实际中意味着什么:如果你的产品标题、元描述或正文副本位于挂载后触发的 useEffect 内,Googlebot 有真实的可能性索引你页面的空白或部分版本。我用 Google Search Console 的网址检查工具验证过几十次,已渲染的 HTML 标签签签显示 Googlebot 看到的东西。现在就在你的 React 页面上运行它。你可能会得到一个令人不快的惊喜。
没人谈论的爬虫预算问题
Googlebot 没有无限的计算资源用于渲染。大型 JavaScript 包会更快地消耗爬虫预算。一个每个页面都有 200KB 阻塞 JS 的网站,爬虫频率会比较轻量的网站低。对于小型宣传网站来说这几乎不重要。但对于有 40,000 个 SKU 的电商目录呢?区别就在于 Googlebot 能在两天内看到你的新商品,还是要等两周。
我为曼彻斯特的一个客户建了一个批发时装网站,约 22,000 个产品页面,基于 Shopify 但在上面有一个高度定制的 React 店铺层。他们在 Search Console 的爬取统计显示 Googlebot 花费了几乎 40% 的爬取预算仅用于 JavaScript 渲染。我们剥离了不需要的产品页面上的客户端补水,这些模板改为静态 HTML,爬取覆盖率在六周内改进了大约 30%。
SSR 什么时候真正有效
好的。所以服务端渲染,其中服务器在将其发送到浏览器之前生成完整 HTML,确实解决了两波问题。如果你的内容在初始 HTML 响应中,Googlebot 不需要等待 JavaScript 渲染。第一波就拿到它了。完成。
SSR 在这些特定情况下是正确的选择:
- 内容丰富的页面,其中排名是主要目标。博文、落地页、具有大量副本的产品详情页,这些应该在第一字节时递送完整 HTML。
- 具有需要保持新鲜的频繁变化数据的页面。新闻网站、实时定价、库存可用性,SSR 配合短缓存 TTL 在这里很有意义。
- 与页面数量相比爬虫预算较紧张的网站。如果你的页面数超过了 Googlebot 一周内舒适爬虫的范围,在高优先级模板上使用 SSR 能保证持续的索引效果。
- 每个页面变化的元数据。标题标签、规范 URL、Open Graph 标签,如果这些由 JavaScript 编写,你有一个 SSR 立即修复的问题。
Next.js 用 getServerSideProps(或较新的 App Router 的服务器组件,默认为 SSR)使这相对直接。Nuxt 对 Vue 商店做同样的事。我在 Seahawk 的几乎每个严肃的 SEO 项目上都依赖 Next.js,我们有内部启动模板,默认对任何涉及内容的东西使用服务器组件。
但 SSR 并非免费的
问题是这样的。SSR 增加服务器负载,如果你的服务器较慢或功能不足,它会增加延迟,还会给部署流程增加复杂性。首字节时间(TTFB)对核心网页指标很重要。一个臃肿的 SSR 响应需要 800ms 才能到达,对交互到下一次绘制和最大内容绘制的影响,比一个快速的静态页面加上一点客户端混合渲染更差。
2022年我在一个SaaS项目中犯过这个错误。我们对所有内容都进行了SSR——每个仪表板视图、每个设置面板、那些零SEO价值且在登录墙后的页面。在性能不足的主机上,TTFB徘徊在900毫秒左右。我们在追求对已认证页面毫无意义的SEO优势,结果伤害了Core Web Vitals。花了我们两个冲刺才理清这个问题。
SSR 伤害你的地方
我直言不讳:SSR 对很大一部分被构建的东西来说都是错的。
登录墙后的已认证页面。Googlebot看不到它们。SSR在这里是浪费,纯粹的开销,没有排名收益。用客户端渲染,缓存能缓存的东西,别再为渲染永远不会被索引的页面付费。
高度交互的UI组件。仪表板、数据可视化、拖放界面。SSR给你初始框架,但你还是要hydrate所有内容。你既要付SSR成本,也要付hydration成本。在这里考虑islands架构——渲染静态框架,只hydrate交互部分。Astro做得非常漂亮。我从2023年末开始在内容密集的网站上用它,它真的改变了我对这个问题的思考方式。
没有排名问题的小型网站。五页作品集、本地商业宣传册网站,SSR流程的开销不值得。CDN上的静态HTML,就这样。
静态生成:未被充分利用的中间地带
人们常常一听到"我需要SEO"就直接跳到SSR,完全跳过了静态站点生成(SSG)。这是个错误。
SSG在部署时构建页面并作为静态HTML提供,给你所有SSR的SEO好处(第一次响应中的完整HTML,不依赖JavaScript渲染),却没有服务器计算成本。它更快。扩展性太简单了。而且对于大多数内容网站、博客、营销页面、文档、作品集来说,内容的更新频率不足以需要按需渲染。
在Seahawk,对于不需要实时数据的任何东西,我们默认使用SSG。Next.js的App Router中的generateStaticParams、内容密集项目用Gatsby(是的,还在用,没问题)、性能是首要关注的地方用Astro。静态HTML通过Cloudflare或Vercel的CDN缓存在边缘,TTFB数字非常好看,全球范围内持续在100毫秒以下。
问题是:当你有数千个频繁更新的页面,或者内容是按用户个性化时,SSG就崩溃了。这时你要用SSR或ISR(增量静态再生成,Next.js的混合方法,按计划revalidate静态页面)。Seahawk有个房产门户项目,ISR配合60秒的revalidation窗口是完美契合。列表保持足够新鲜,TTFB保持低位,Googlebot每次都看到完整HTML。
诊断你的JavaScript SEO问题
在你重写任何东西之前,先诊断。这是我实际使用的流程:
- Google Search Console URL检查。获取并呈现任何可疑URL。将"渲染的HTML"与你的实际DOM进行比较。如果内容在渲染视图中缺失,说明Googlebot没看到它。
- Screaming Frog在JavaScript渲染模式。设置为渲染JavaScript并运行爬虫。与非渲染爬虫进行比较。差异显示了什么依赖JS。
- CI 中的 Lighthouse。将 Lighthouse CI 集成到你的部署流程中。你希望 LCP 低于 2.5 秒,TTFB 低于 600ms 作为基线目标。
- Chrome DevTools > Network标签 > 禁用JavaScript。简单粗暴。如果禁用JS时你的页面内容消失,说明Googlebot的第一波根本看不到任何有用的东西。
- Search Console覆盖率报告。大规模的"已抓取,当前未编入索引"通常指向渲染问题,不是内容质量问题。别先假设内容质量有问题。
老实说,第四步能抓住我在客户网站上看到的约60%的问题。只需三十秒。在做任何其他事之前先做这个。
水合税:为什么你的Core Web Vitals在受损
完整SSR加完整客户端hydration如果不小心就是最坏的组合。你发送一个完整的HTML文档,浏览器渲染它,然后React(或Vue或其他)启动并"接管"DOM。在那个接管过程中,hydration阶段,页面在视觉上是交互的但功能上被冻结。点击没反应。表单提交不了。
这就是杀死总阻塞时间和 INP 分数的东西。我在 SSR 但有巨大客户端 bundle 的 Next.js 网站上经常看到这种情况。React 团队自己关于 Server Components 的文档专门设计来通过在服务器上保留更多逻辑、向浏览器发送更少 JavaScript 来减轻这个问题。
实际解决方案:用 next build 的输出或 Bundle Phobia 审计你的 JavaScript 包。找出哪些文件很大,然后判断它们是否真的需要在客户端包中。去年我仅通过将三个数据获取库移到仅服务器端,并使用仅服务器端的包导入,就为一个客户的包减少了 180KB。他们的 INP 从 340ms 降到了 190ms。这是排名信号的改进,不只是用户体验的改进。
渲染模式决策框架
停止猜测。这是我的决策方式:
- Googlebot需要看到这个页面吗?如果不需要,用CSR,完事。
- 内容是否每天变更多于一次?如果否,使用 SSG。
- 内容变化频繁且 Googlebot 需要看到它?如果可以容忍过期内容就用 ISR,如果不能就用 SSR。
- 页面高度交互但内容最少?用 CSR 配合 SSG shell。
- 服务器预算受限?尽可能倾向于 SSG 和静态。
这个框架处理约 90% 的场景。剩下的 10% 是边界情况,即已登录用户的个性化内容且需要 SEO(想象电商中的"为你推荐"这样的公开页面),这通常需要混合方案:SSR 渲染内容骨架,个性化内容在 hydration 后由客户端添加。
---
常见问题
Googlebot 在 2026 年会完全渲染 JavaScript 吗?
它会渲染 JavaScript,但在次要阶段进行,可能比初始爬取晚几小时甚至几天。对索引至关重要的内容——正文、标题、元标签——应该在初始 HTML 响应中。别把排名赌在 Googlebot 的渲染队列上。
SSR 对 SEO 总是比客户端渲染更好吗?
不是。SSR 对公开索引页面的 SEO 更好,特别是内容由 JavaScript 生成的时候。对于认证页面、高度交互的工具或任何需要登录的内容,SSR 会增加成本,对 SEO 没有任何帮助。为具体情况选择合适的渲染模式。
检查我的网站是否存在 JavaScript SEO 问题的最快方法是什么?
打开 Chrome DevTools,进入 Settings,在 Debugger 下勾选"Disable JavaScript",然后重新加载页面。如果有意义的内容消失了,说明 Googlebot 的第一波爬虫看到的就是这个空白页面。同时在 Google Search Console 中运行网址检查,并比较渲染的 HTML 标签页和你的实时 DOM。
Next.js App Router 对 JavaScript SEO 有帮助吗?
是的,差异很大。App Router 中的 Server Components 默认在服务器上渲染,这意味着它们的输出是完整的 HTML。实际上你在任何不需要交互的组件上都能免费获得 SSR。问题在于正确混合 Server Components 和 Client Components 需要纪律性,很容易不小心把太多逻辑推到 Client Components 里,重现老旧的 CSR 问题。
我应该使用 React Server Components 还是直接用静态生成?
如果你的内容确实是静态的,在部署间隔不变,就用静态。SSG 更简单,托管成本更低,对 SEO 效果一样好。React Server Components 的优势在于需要公开页面上的动态数据,但不想要完整的服务器渲染 HTML 然后 hydrate 的开销。它们不是一回事,正确选择完全取决于你的内容有多动态。
---
老实的总结:Googlebot 比 2019 年聪明,但它仍然不是 Chrome。两波渲染模型、爬虫预算限制和 hydration 成本意味着"我们在用 SSR"不是完整的 JavaScript SEO 策略,它只是起点。了解每种渲染模式的成本,在构建前审计,别对 Googlebot 永远看不到的页面默认使用 SSR。我在 Seahawk 最自豪的网站不是那些渲染管道最复杂的,而是那些每个页面都只被渲染它实际需要的量,不多不少的。
