所以我可以肯定地说,我已经获得了一个带有 API 调用的 react SPA,可以在 googlebot(获取和渲染)中完美呈现。所以这不是一项不可能完成的任务,但我会说没有多少文档可以帮助你。
因为听起来你有一个新应用程序,所以我将概述你可能会走的两条途径。
服务器端预渲染 (SSR)
从服务器端预渲染 (SSR) 开始并坚持下去。在 react 中有很多方法可以做到这一点,这最终意味着你需要坚持使用支持 SSR 的同构库。
但是,通过 SSR 路径,被 google 索引的机会要高得多,因为您根本不必依赖 googlebot 来处理您的 JS。
客户端渲染(一个普通的 JS 应用)
只需构建一个没有 SSR 的普通 React 应用程序。基本上一切照旧。好处是您不必处理任何增加的 SSR 复杂性,并且您不限于同构的库。基本上这是最简单的,但您必须希望您的 JS 编译并由 Googlebot 正确运行。
我的观察
我会说服务器端预渲染有时非常难以工作,因为很多库可能不支持它,这反过来又会引入很多您不想处理的复杂性。
客户端渲染路线真的和往常一样,我可以确认它确实可以与 Googlebot 一起使用。以下是我为使客户端渲染工作所做的工作:
-
尽早将“babel-polyfill”添加到我的导入列表中
-
内联我的 Javascript 以减少整体加载时间并最大限度地减少不必要的调用。我使用 Razor (C#) 完成了此操作,但您可以按照自己的方式进行操作。
-
添加了对金融时报 polyfill 的外部调用(不确定是否有必要)
-
NODE_ENV=production 在这里也会有所帮助。它会减少你的捆绑包的整体大小
对于任何使用 C# 的人来说,这可能是这样的:
clientWithRender.jsx(我的 jsx 的入口点)
import React from "react";
import ReactDOM from "react-dom";
import 'babel-polyfill';
import App from "./App/App.jsx";
import { Router, Route, indexRouter, hashHistory } from "react-router";
ReactDOM.render(
<App></App>,
document.getElementById('App'));
索引.cshtml
<script src="https://ft-polyfill-service.herokuapp.com/v2/polyfill.min.js"></script>
@Html.InlineScriptBlock("~/Scripts/react/react.clientWithRender.bundle.js")