3、 第三方服务/解决方案 (SSR as a Service):
* 一些云服务(如某些 PaaS 平台)或专门工具提供简化 Vue SSR 部署的方案。
* Prerender SPA: 对于内容不频繁变化的页面,可以使用预渲染技术。在构建时运行一个无头浏览器(如 Puppeteer)访问路由并将渲染结果保存为静态 HTML 文件。严格来说这不是动态 SSR,但对于某些 SEO 场景足够且更简单。
关键点:数据获取 (对 SEO 至关重要)
* 在服务器端获取: 为了确保 SEO 内容完整,必须在服务器端渲染之前就获取好页面所需的数据。不能在浏览器中获取后再显示。
* Nuxt: 使用 `asyncData` (Nuxt 2) 或 `useAsyncData` / `useFetch` (Nuxt 3) 钩子。这些钩子会在服务器端执行,获取的数据会直接内嵌到渲染的 HTML 中。
* 手动 SSR: 需要在路由匹配组件后、调用渲染器之前,触发组件的数据获取逻辑(例如,在路由守卫中调用组件定义的 `asyncData` 方法),收集所有数据,并将这些数据序列化后注入到 HTML 中(例如通过 `window.__INITIAL_STATE__`)。客户端在激活时需要重用这些数据。
总结:
* Vue 默认的 CSR 不利于 SEO,因为爬虫可能无法正确或及时渲染 JavaScript 内容。
* SSR 通过在服务器端生成完整的 HTML 页面来解决这个问题,确保爬虫和用户第一时间看到内容。
* Nuxt.js 是实现 Vue SSR 以获得良好 SEO 的最简单、最流行和最推荐的方法。 它抽象了大部分复杂性。
* 手动实现 Vue SSR 更灵活但复杂得多,适合需要高度定制化的场景。
* 除了 SSR,良好的 SEO 还需要: 语义化 HTML、正确的标题和元描述、清晰的 URL 结构、图片 `alt` 属性、合理的内部链接、网站速度优化等。
行动建议:
如果你在 Vue 项目中遇到 SEO 问题,强烈建议从 Nuxt.js 开始探索 SSR。它的学习曲线相对平缓,能快速解决问题。如果项目已经是纯 Vue 且无法迁移,再考虑手动实现 SSR 或评估预渲染方案。