构建 Vue SSR 应用之 SEO 问题及解答

前言

随着 Web 技术的不断发展,越来越多的网站采用了前后端分离的架构,前端负责展示页面,后端负责提供数据接口。Vue.js 作为一款流行的前端框架,在前端开发中得到了广泛的应用。随着 Vue.js 项目的不断增多,如何优化 SEO 已成为一个越来越重要的问题。本文将介绍如何构建 Vue SSR 应用以及如何解决 SEO 问题。

什么是 Vue SSR

Vue SSR 全称是 Vue.js 服务端渲染,是指将 Vue.js 应用程序在服务器端完成初次渲染,然后将渲染结果发送给浏览器端的技术。与传统的客户端渲染(CSR)相比,SSR 在 SEO、页面加载速度等方面有着明显的优势。

在 SSR 中,前端应用程序运行在服务器端,服务器端可以将应用程序中的 VNode 转换为 HTML 字符串并返回给浏览器端。这样,在页面请求到达浏览器端时,浏览器端获得的已经是一个完整的 HTML 页面,不需要再等待 JavaScript 的加载和解析,从而加快页面加载速度。

如何构建 Vue SSR 应用

Vue.js 官方提供了一个 vue-server-renderer 包来帮助我们构建 SSR 应用。使用 vue-server-renderer 构建 SSR 应用主要分为以下几个步骤:

步骤一:创建 Vue 实例

------ --- ---- ------
------ --- ---- ------------

-- -- --- --
----- --- - --- -----
  ------- - -- ------
---

步骤二:创建服务端渲染器

------ --- ---- ------
------ --- ---- ------------
------ - -------------- - ---- ----------------------

-- -- --- --
----- --- - --- -----
  ------- - -- ------
---

-- --------
----- -------- - ----------------
  --------- -----------------------
---

步骤三:渲染 Vue 实例

------ --- ---- ------
------ --- ---- ------------
------ - -------------- - ---- ----------------------

-- -- --- --
----- --- - --- -----
  ------- - -- ------
---

-- --------
----- -------- - ----------------
  --------- -----------------------
---

-- -- --- --
---------------------------- ----- ----- -- -
  -- ----- -
    -----------------
  - ---- -
    ------------------
  -
---

上面的代码中,我们首先创建了一个 Vue 实例,然后用 createRenderer 方法创建了一个服务端渲染器。最后调用 renderToString 方法将 Vue 实例渲染成 HTML 字符串。

步骤四:将 HTML 字符串发送给客户端

将渲染出来的 HTML 字符串挂载到一个服务器端的路由上,然后在客户端通过 AJAX 或者 WebSocket 等技术请求该路由,就可以获得已经渲染好的 HTML 页面,从而实现 SSR。

解决 SEO 问题

对于 SSR 应用来说,SEO 是一个重要的问题。在 CSR 中,由于搜索引擎爬虫无法执行 JavaScript 代码,因此无法获取页面内容,导致搜索引擎无法正确抓取页面内容。而在 SSR 中,由于服务器返回的是渲染好的 HTML 字符串,搜索引擎爬虫可以直接抓取页面内容,从而能够正确地解析网站的内容。

为搜索引擎爬虫提供 HTML 版本

搜索引擎爬虫无法执行 JavaScript,因此无法获取通过 JavaScript 渲染出来的页面内容。为了让搜索引擎爬虫可以正确抓取页面内容,我们需要在服务器端为搜索引擎爬虫提供一份纯 HTML 的版本。我们可以在服务器端判断 HTTP 请求的 UA 字段,如果是搜索引擎爬虫,则返回纯 HTML 的版本,否则返回 SSR 渲染出来的 HTML 页面。

-- ---------- -----
------------ ----- ---- -- -
  ----- ----- - -------------------------------------------------------------------------------

  -- ------- -
    -- --- ---- ---
    ---------------------------- -- ----- --------------- --------
  - ---- -
    -- -- --- ---- ---- --
    ---------------------------- ----- ----- -- -
      -- ----- -
        -----------------
      - ---- -
        ---------------
      -
    ---
  -
---

使用 vue-meta 插件

在 CSR 中,我们可以使用 meta 标签来优化 SEO。同样的,在 SSR 中也可以使用 meta 标签来优化 SEO。Vue.js 官方提供了一个 vue-meta 插件来帮助我们在 SSR 中使用 meta 标签。

使用 vue-meta 插件非常简单,只需要在 Vue 组件中定义一个 metaInfo 对象来指定 meta 标签信息即可。

----------
  -----
    ---
  ------
-----------

--------
------ ------- -
  ----- --------------
  --------- -
    ------ --- ---- -------
    ----- -
      -
        ----- --------------
        -------- --- ---- ------------
      --
      -
        --------- -----------
        -------- --- ---- ------
      --
      ---
    -
  -
--
---------

在服务器端,我们也需要将 meta 标签信息添加到 HTML 中。我们可以使用 vue-server-renderer 的 inject 方法来将 meta 标签信息注入到 HTML 中。

------ - -------------- - ---- ----------------------
------ - ------------- - ---- -----------

-- --------
----- -------- - ----------------
  --------- ------------------------
  ------- -
    ------- ----- -- -------
    --------- ---------------------------- -- -- ---- -------
  -
---

在 Express.js 的路由中,我们也需要将 meta 标签信息和页面 HTML 一起返回给浏览器端。

------------ ----- ---- -- -
  ----- ----- - -------------------------------------------------------------------------------

  -- ------- -
    -- --- ---- ---------- ---- --------
    ------------------------------------ -- ----- --------------- --------
  - ---- -
    -- -- --- ---- ---- --- ---- ----
    ---------------------------- ----- ----- -- -
      -- ----- -
        -----------------
      - ---- -
        ----------
          -------
          ------------------
        ---
      -
    ---
  -
---

总结

本文介绍了如何构建 Vue SSR 应用以及如何解决 SEO 问题。通过采用 SSR 技术,我们可以让搜索引擎爬虫正确抓取网站内容,从而提高网站的 SEO 效果。不过,SSR 也有其自身的缺点,例如对服务器的压力比较大,需要额外的开发工作等。因此,在实际项目中需要根据具体情况进行选择。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64e033faf6b2d6eab3b4758d


猜你喜欢

  • ES6 中的 ArrayBuffer 对象在实际开发中的应用场景

    ES6 增加了一些新的特性和对象,其中 ArrayBuffer 对象是非常有用的对象之一。它是在二进制数据交换方面的一项重要的新功能。在本文中,我们将了解 ArrayBuffer 对象在实际开发中的应...

    1 年前
  • JavaScript 中的新变化:解析 ES8

    最近几年,JavaScript 的发展越来越快,随着 ES6 和 ES7 的发布,JavaScript 已经成为了一种更加强大和灵活的编程语言。 ES8 是其中最新的一种 ECMAScript 版本,...

    1 年前
  • Mongoose 之使用 update 方法进行数据更新

    在使用 Mongoose 进行数据操作时,数据的更新是一个非常常见的操作。Mongoose 提供了多种更新方法,其中 update 方法是最常用的一种。本文将详细介绍 Mongoose 的 updat...

    1 年前
  • Angular 中的数组类型判断方法

    在 Angular 中,我们经常会使用到数组类型的数据。但是在处理数据时,我们常常需要对数据进行类型判断,特别是在对数组数据进行处理时,这个问题就更加突显了。在本文中,我们将介绍在 Angular 中...

    1 年前
  • 如何在 Jest 中测试 React Native 应用程序

    在 React Native 开发中,测试是非常重要的一环。Jest 是一个在 React Native 官方推荐的测试框架,它具有速度快,易于配置和编写测试用例等优点。

    1 年前
  • ES7 中的 String.prototype.trimStart/trimEnd 方法在字符串处理中的应用

    ES7 中的 String.prototype.trimStart/trimEnd 方法在字符串处理中的应用 在前端开发中,字符串处理是一个十分常见的操作。在 ES7 中,新增加了 String.pr...

    1 年前
  • 解决 Fastify 应用程序使用 Mongoose 调用 Async 函数时出现的错误

    在 Fastify 应用程序中使用 Mongoose 插件可能会遇到 Async 函数调用时出现的错误。本文将介绍该错误的出现原因,并提供解决方案。 错误出现原因 使用 Mongoose 插件时,我们...

    1 年前
  • Serverless 架构下的图像存储方案

    在 Serverless 架构下,图像存储是一个需要注意的问题,因为传统的文件服务器(如 Amazon S3)往往需要大量的管理工作和费用支出。为了解决这个问题,我们可以采用 Serverless 架...

    1 年前
  • CSS Reset 技术剖析:如何实现样式定义与清除

    什么是 CSS Reset CSS Reset 是一种前端技术,用于清除浏览器默认样式并统一样式定义。它的目的是让不同浏览器在渲染网页时表现更一致,避免布局错乱等问题。

    1 年前
  • Angular 中的 RxJS:从响应式思想到实际应用

    前言 RxJS 是一个开源的响应式编程库,可以让开发者使用可观测序列和处理异步数据流,从而解决异步编程的复杂性。它也是 Angular 框架的一部分,被广泛应用在 Angular 的开发中。

    1 年前
  • PWA 遇坑记(一)

    前言 PWA (Progressive Web Application) 是一种新型的 web 应用模式,可以实现像原生应用一样的体验。前端开发人员可以利用 service worker 等技术来使网...

    1 年前
  • SASS 中使用!important 指令的注意事项

    在使用 CSS 样式表时,经常会用到 !important 指令来强制某个样式的优先级别。而在 SASS 中也能使用这个指令,但需要注意的是,应该尽量避免在 SASS 中大量使用 !important...

    1 年前
  • Express.js 中使用 Multer 实现文件上传的最佳实践

    在 Web 开发中,文件上传是一个非常重要的功能需求。而在 Node.js 的 Web 开发中,要实现文件上传需要使用 Multer 中间件来处理文件上传的请求。本文将详细介绍在 Express.js...

    1 年前
  • 无障碍访问 | 如何利用无障碍模式提高用户访问体验

    随着互联网的普及,互联网服务已经成为人们生活中不可或缺的一部分。但是,许多网站和应用程序并不考虑到残障人群的需求,使得这部分用户无法顺畅地使用这些服务。为了增强Web服务的可访问性,无障碍访问已经成为...

    1 年前
  • ECMAScript 2021 中的 JavaScript Modules 封装与打包

    随着前端技术的不断发展,我们在开发中经常需要使用到许多第三方模块。但是在使用第三方模块时,我们也要解决模块的封装和打包问题。本文介绍如何使用 JavaScript Modules 封装和打包 ECMA...

    1 年前
  • ESLint 报错:'await' is only allowed within an async function

    在开发前端应用过程中,我们可能会用到 ES6 的一些特性,如 async/await。它们可以让代码更加简洁易懂,但在使用时需要注意一些细节,例如在不带 async 关键字的普通函数中不能使用 awa...

    1 年前
  • PM2 如何配置进程的资源分配

    在前端开发中,我们经常使用 PM2 进行进程管理和监控。但是,对于一些大型应用,单纯的启动和监控已经不足以满足我们的需求,我们还需要对进程的资源进行分配来保证应用的性能和稳定性。

    1 年前
  • Webpack 构建时出现的 Sourcemaps 相关错误解决方法

    在前端开发的过程中,我们难免会遇到需要使用 Webpack 进行构建的情形。而在使用 Webpack 进行构建时,开发者常常会涉及到 Sourcemaps 资源映射的相关问题。

    1 年前
  • Material Design 在响应式设计中的应用实践及技术细节

    Material Design 是一种由 Google 开发的设计语言,旨在提供一致性的用户体验。它强调实践、可操作性和美感。本文将详细介绍如何应用 Material Design 在响应式设计中,并...

    1 年前
  • 使用 Babel 处理 ES6 类的多继承

    在前端开发中,我们经常需要使用面向对象编程(Object-oriented Programming, OOP)来实现复杂的业务逻辑。ES6 提供了类(class)的语法糖,使得我们可以更加方便地进行 ...

    1 年前

相关推荐

    暂无文章