SSR 应用 Shell 具有动态元数据 + 预渲染
SSR an App Shell with Dynamic metadata + Prerender
当我的 SEO 元数据在每条路线上都是动态的时,对我的 PWA 的应用 Shell 进行 SSR 的策略是什么?例如,在 /home
路线上,我只想要一个标题:
<title>Shop - Home</title>
在 /search
期间,我想添加说明:
<title>Shop - Search</title>
<meta name="description" content="Search results" />
问题是,如果我将其包含在我的 SSRd 应用程序中 Shell,我的服务人员将缓存该特定页面的应用程序版本 shell。我还希望我的元数据根据我的用户当前所在的路线而改变。为此,我正在使用 React Helmet。我们还使用 Prerender 在我们的应用程序上缓存每个页面以进行 SEO,这将读取我们页面的 SSR 元数据。
一般来说,您可以认为您的服务器端渲染与您是否使用应用程序无关Shell。
SSR 负责处理来自未安装您的 Service Worker 的客户端的响应——至少在正确的情况下,爬虫和机器人将属于此类。您可以继续在每个 SSR 响应中包含 page-specific 元数据。
如果您遵循 App Shell 模型,您的 service worker 最终将通过返回通用 App Shell HTML 来处理所有(或至少大部分)导航。这不会有任何 page-specific 元数据,但您始终可以通过 client-side JavaScript 调整 <head>
的标题和其他部分。只有 "real" 用户,而不是爬虫和机器人,最终应该安装您的 service worker,因此您不必担心依赖 client-side JavaScript 来填充元数据。
当我的 SEO 元数据在每条路线上都是动态的时,对我的 PWA 的应用 Shell 进行 SSR 的策略是什么?例如,在 /home
路线上,我只想要一个标题:
<title>Shop - Home</title>
在 /search
期间,我想添加说明:
<title>Shop - Search</title>
<meta name="description" content="Search results" />
问题是,如果我将其包含在我的 SSRd 应用程序中 Shell,我的服务人员将缓存该特定页面的应用程序版本 shell。我还希望我的元数据根据我的用户当前所在的路线而改变。为此,我正在使用 React Helmet。我们还使用 Prerender 在我们的应用程序上缓存每个页面以进行 SEO,这将读取我们页面的 SSR 元数据。
一般来说,您可以认为您的服务器端渲染与您是否使用应用程序无关Shell。
SSR 负责处理来自未安装您的 Service Worker 的客户端的响应——至少在正确的情况下,爬虫和机器人将属于此类。您可以继续在每个 SSR 响应中包含 page-specific 元数据。
如果您遵循 App Shell 模型,您的 service worker 最终将通过返回通用 App Shell HTML 来处理所有(或至少大部分)导航。这不会有任何 page-specific 元数据,但您始终可以通过 client-side JavaScript 调整 <head>
的标题和其他部分。只有 "real" 用户,而不是爬虫和机器人,最终应该安装您的 service worker,因此您不必担心依赖 client-side JavaScript 来填充元数据。