【问题标题】:How do you use React.js for SEO?你如何使用 React.js 进行 SEO?
【发布时间】:2025-11-29 00:45:01
【问题描述】:

关于 React.js 的文章喜欢指出,React.js 非常适合 SEO。不幸的是,我从来没有读过,你实际上是如何做到的。 你是像 https://developers.google.com/webmasters/ajax-crawling/docs/getting-started 一样简单地实现 _escaped_fragment_ 并让 React 在服务器上渲染页面,当 url 包含 _escaped_fragment_ 时,还是还有更多?

能够不依赖_escaped_fragment_ 会很棒,因为可能并非所有可能抓取的网站(例如在共享功能中)都实现_escaped_fragment_

【问题讨论】:

标签: javascript seo reactjs


【解决方案1】:

正如其他响应者所说,您正在寻找的是同构方法。这允许页面来自服务器,呈现的内容将被搜索引擎解析。正如另一位评论者所提到的,这可能会让您看起来像是被困在使用 node.js 作为您的服务器端语言。虽然确实需要在服务器上运行 javascript 才能完成这项工作,但您不必在 node.js 中执行所有操作。例如,本文讨论了如何使用 Scala 和 react 实现同构页面:

Isomorphic Web Design with React and Scala

那篇文章还概述了这种同构方法的 UX 和 SEO 优势。

【讨论】:

【解决方案2】:

如果您关心您的网站在 Google 上的排名,您无需做任何事情,因为 Google 的爬虫可以很好地处理 JavaScript!您可以通过搜索site:your-site-url查看您网站的SEO结果。

如果您还关心您网站的排名,例如 Baidu,并且您的服务器端由 PHP 实现,也许您需要这个:react-php-v8js

【讨论】:

    【解决方案3】:

    由于我设法让我的客户端 React 应用程序在完全没有 SSR 的情况下与 googlebot 一起工作,因此我不得不不同意这里的很多答案。

    看看SO answer here。我最近才设法让它工作,但我可以确认到目前为止没有问题,并且 googlebot 可以实际执行 API 调用并索引返回的内容。

    【讨论】:

    • 看看这个样板,我们在其中包含了 SSR、PWA、代码拆分等功能,所有功能都考虑到了 SEO。 github.com/Atyantik/react-pwa
    【解决方案4】:

    我很确定你所看到的任何宣传 React 对 SEO 有好处的东西都与能够在将请求的页面发送到客户端之前在服务器上呈现请求的页面有关。因此,就搜索引擎而言,它将像任何其他静态页面一样被编入索引。

    通过ReactDOMServer.renderToString 实现服务器渲染。访问者将收到已呈现的标记页面,React 应用程序将在下载并运行后检测到该页面。当ReactDOM.render 被调用时,它不会替换内容,它只会添加事件绑定。在接下来的访问中,React 应用程序将接管并在客户端上呈现更多页面。

    如果你有兴趣了解这方面的更多信息,我建议搜索“Universal JavaScript”或“Universal React”(以前称为“isomorphic react”),因为这正在成为使用单个代码的 JavaScript 应用程序的术语在服务器和客户端上渲染的基础。

    【讨论】:

    • 这不是说我会卡在 node.js 上吗?
    • 这仅意味着您需要推迟到节点才能呈现标记。您可以使用任何您想处理请求并提供渲染标记的语言。
    • 我不认为你会被限制依赖 NodeJs,如果你适当地设计你的脚本,你可以推迟到其他 Javascript 引擎。例如,在 Java 世界中,您可以使用 Nashorn。我正在尝试使用 Nashorn 调用我的 webpack 捆绑脚本,这似乎是可能的。
    • 阅读相关主题后,我的印象是,服务器端渲染主要是一种让您的初始页面加载速度更快的方法,而 不是 SEO 要求。如果 Google 和许多其他搜索引擎只在前端呈现,则它们可以很好地索引单页应用程序。
    • @Micros Google 在索引 React 应用程序的页面方面做得很好,但 Bing 几乎无法索引 SPA 中的任何内容。
    【解决方案5】:

    也可以通过ReactDOMServer.renderToStaticMarkup:

    类似于renderToString,但不会创建额外的 DOM React 内部使用的属性,例如 data-react-id。这是 如果您想将 React 用作​​简单的静态页面生成器,则很有用,如 去掉多余的属性可以节省很多字节。

    【讨论】:

    【解决方案6】:

    两个不错的示例实现:

    尝试在打开和关闭 javascript 的情况下访问https://react-redux.herokuapp.com/,并在浏览器开发工具中观察网络以查看差异……

    【讨论】:

    • 请说出你对这个bolier盘子的想法github.com/Atyantik/react-pwa
    • @AjayPatel 看起来不错,如果示例网站不加载谷歌分析和广告,它会获得更好的分数……
    • 这只是一个如何管理 GTM 的例子。我们尚未为其添加广告意义。