Vue.js 单页应用 SEO 优化实战

随着 Vue.js 的流行,越来越多的网站采用了 Vue.js 单页应用(Single Page Application,SPA)架构。在 SPA 架构中,所有页面都由前端框架动态生成,而不是传统的多个静态页面。尽管 SPA 确定了网站的速度和响应能力,却对搜索引擎优化(Search Engine Optimization,SEO)带来了挑战。因为搜索引擎爬虫无法感知 Vue.js 生成的页面内容,导致无法正确抓取和索引内容。这篇文章将介绍如何优化 Vue.js 单页应用以便更好地被搜索引擎优化,并提供实践建议。

使用预渲染技术

为了让搜索引擎能够正确索引和抓取 SPA 的内容,我们需要向搜索引擎提供与传统多页应用类似的内容。Vue.js 支持预渲染(Prerendering)技术,它可以将 SPA 的内容在构建时预先生成,以静态文件的方式交给搜索引擎抓取和索引。使用预渲染技术,我们不仅可以提高 SEO 等级,而且可以加速用户在浏览器上的体验。

Vue-prerender

Vue-prerender 是 Vue.js 的一个官方插件,它使用 Puppeteer 在构建期间渲染单页应用。Puppeteer 是一个 Node.js 库,通过 Chrome DevTools 协议进行远程页面操作。Vue-prerender 为我们提供了一种非常方便的方式来预渲染单页应用。

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

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

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

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

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

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

这里的配置实现了:在构建时,通过 Puppeteer 渲染 / 路由,并将渲染结果输出到 dist/index.html 文件中。后续搜索引擎访问站点时,就可以访问 dist/index.html,并获取预渲染的静态文件,以此来更好地索引和抓取网站内容。

使用滚动行为

在多页应用中,页面会随着浏览器滚动加载和显示。然而,在 SPA 中,这种滚动行为可能不会触发,让搜索引擎无法获得原始内容。为了更好地支持文档抓取,我们可以添加滚动行为以确保搜索引擎获取到所有内容。

vue-server-renderer

Vue.js 2.3.0 引入的 vue-server-renderer 库为我们提供了一个支持滚动行为的解决方案。我们可以使用 createBundleRenderer 对象来将 Vue 组件打包成一个可渲染的 JavaScript 包,并提供一个非常方便的钩子来定义滚动行为。

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

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

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

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

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

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

            ------
          --

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

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

vue-scrollit

如果你不想写这么多代码来处理滚动行为,Vue.js 社区还提供了一个插件 vue-scrollit,它提供了一个非常简单的 v-scrollit 指令来处理滚动位置。

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

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

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

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

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

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

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

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

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

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

优化站点结构

最后,我们需要优化站点结构以更好地适应搜索引擎检索。通过合理的站点结构设计,我们可以让搜索引擎更好地理解和索引网站内容。

一次性加载

在 SPA 中,由于页面都是由前端动态生成的,会使页面加载时间变长。为了增强用户体验体验和 SEO 效果,我们需要考虑优化首屏渲染时间。我们可以将一些公共资源(如第三方库、CSS 等)抽离出来,将其放在单独页面中完成加载,不再每次都加载入页面组件。

设计良好的 URL 结构

如果你的站点设计一个良好的 URL 结构,那么搜索引擎会更容易理解和索引你的页面。确保 URL 易于阅读,并使用有效的标题和标题标签,有利于提高 SEO 等级。

使用语义化 HTML

在创建 SPA 页面的过程中,我们应该合理运用语义化 HTML 标签,这有助于增强 SEO 效果,提供更可读的代码以及更好的可访问性。

例如,如果我们运用了 Vue.js 中的 router-link,我们可以这样设置它的 tag 属性。

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

这里的 tag 属性将 router-link 渲染为 li 标签,使其更加语义化。

总结

本文介绍了如何优化你的 Vue.js 单页应用,以便更好地被搜索引擎抓取和索引。我们学习了预渲染技术,滚动行为,站点结构优化以及运用语义化 HTML 等优化方法。使用这些技巧,我们可以提高网站的可见性和 SEO 等级。

在开发单页应用时,考虑到 SEO 需求是可以预见的而且常见的。因此,我们应该在项目设计和开发阶段就着手搞定 SEO 优化问题。

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


猜你喜欢

  • 在 LESS 中使用变量控制滚动条样式

    介绍 在前端开发中,滚动条是一个常见的 UI 元素,但是默认的滚动条样式并不总是符合我们设计的需求,因此需要自定义样式。LESS 是一种流行的 CSS 预处理器,用来提高 CSS 可维护性和拓展性,同...

    1 年前
  • TypeScript 的构建工具 webpack 解析

    前言 TypeScript 是一门强类型的 JavaScript 超集,带来了静态类型检查和更高效的编码体验,让开发者能够更好地维护和改进代码。但是,TypeScript 本身并不能直接在浏览器中运行...

    1 年前
  • 如何在 Koa 应用中使用 Graphql

    前言 在前端开发过程中,我们常常会使用 Graphql 解决数据请求的问题。而 Koa 作为一种基于 Node.js 的 Web 框架,也可以使用 Graphql 进行数据请求。

    1 年前
  • 在 Deno 中使用 Redis 详解

    为什么要使用 Redis? 在 Web 开发过程中,常常需要对数据进行缓存,以减少数据库的频繁读写,提高网站性能。Redis 是一款开源的 NoSQL 数据库,具有高效、稳定、可扩展等特点,被广泛应用...

    1 年前
  • 在 Hapi.js 应用中挂载静态文件

    在现代 web 应用中,我们经常需要在网站中引用图片、样式表、脚本文件等静态文件资源。一般情况下,这些文件需要先存储在服务器的某个目录下才能被访问,比如说 public 目录下。

    1 年前
  • ES11 中字符串方法的 replaceAll 详解

    ES11 中字符串方法的 replaceAll 详解 在 ES11 中,JavaScript 引入了一个新的字符串方法 replaceAll,该方法用于全局替换一个字符串中的所有匹配项。

    1 年前
  • 在 Material Design 中使用 CardView 出现的阴影消失问题解决方法

    在 Material Design 中,CardView 是一种常见的 UI 部件,它可以用来展示信息和提供交互功能。然而,很多开发者在使用 CardView 的过程中都会遇到阴影消失的问题,这不仅会...

    1 年前
  • Mocha 测试框架中如何测试 MongoDB

    概述 Mocha 是一个 Javascript 测试框架,它能够在 node.js 和浏览器环境中运行。MongoDB 是一个流行的 NoSQL 数据库,常用于 Web 应用程序的后端。

    1 年前
  • 如何在 CSS Grid 中处理网格重叠的问题?

    CSS Grid 是现代网页布局中的重要技术之一,它能够帮助我们以更加灵活的方式实现网页布局。但在实际使用中,我们常常会遇到网格重叠的问题,这可能会影响网页的美观性和可读性。

    1 年前
  • MongoDB 权限管理的实现方法

    MongoDB 是一种灵活且易于扩展的文档数据库,在 Web 开发中得到了越来越广泛的应用。在实际应用中,为了保证数据安全和技术的合规性,我们需要对 MongoDB 进行一些权限管理操作。

    1 年前
  • 使用 Cypress 进行 PWA 项目测试的实践

    前言 PWA,即渐进式Web应用程序,是一种旨在提供与原生应用程序相同的用户体验的Web应用程序。它允许您通过添加到主屏幕和脱机访问等功能,使Web应用程序像本地应用程序一样运行。

    1 年前
  • ES 卷十最新特性介绍: ES10 规范

    在前端开发领域中,ES规范一直是重要的技术标准。而在最新的ES10规范中,新特性和新语法被加入到了标准中。这篇文章将为读者详细介绍ES10规范的新特性,并针对这些特性进行深入探讨,以便能够更好地应用在...

    1 年前
  • 在 Angular 中使用 Firebase 进行身份验证

    Firebase 是 Google 开发的一款免费实时数据库和后端服务,同时也提供了身份验证功能。在 Angular 中,可以轻松地使用 Firebase 进行身份验证,实现用户登录、注册、退出登录等...

    1 年前
  • Docker 镜像加速器配置教程

    Docker 是一种流行的容器化技术,它可以让开发人员快速地构建、测试和部署应用程序。然而,由于 Docker 官方镜像源在国内访问速度较慢,大量的开发者都选择使用国内的 Docker 镜像源,以便更...

    1 年前
  • ES12 中的构建函数的默认参数

    在 JavaScript 中,构建函数是用于创建新对象的函数。在 ES6 之前,我们通常使用条件语句或函数表达式来实现默认参数。但在 ES6 中,我们可以使用默认参数语法来在函数定义中指定默认值,使得...

    1 年前
  • 使用 Server-sent Events 实现实时股票图表

    随着互联网技术的发展,股票交易市场已经逐渐向数字化方向发展。而作为前端开发人员,如何高效地呈现股票实时变化的数据,成为了一项重要的任务。本文介绍了使用 Server-sent Events 技术实现实...

    1 年前
  • Enzyme 使用教程:React 组件测试

    前言 在前端开发中,我们经常需要测试我们所写的组件是否正常工作。对于 React 组件而言,Enzyme 是一个非常好用的测试库。Enzyme 提供了简单的 API,可以轻松地测试 React 组件。

    1 年前
  • 详解 Promise 的超时控制

    Promise 是现代前端开发中一种非常流行,且极具实用价值的异步编程模式。然而,在实际开发中,很多前端工程师对于 Promise 的超时控制却存在疑惑和不熟悉。因此本篇文章将深入探讨 Promise...

    1 年前
  • RESTful API 如何处理大文件上传?

    在现代 Web 应用中,文件上传已成为常见的操作之一。由于 RESTful API 作为交互的方式,往往要求数据传输具有低延迟和高性能。然而,当上传大文件时,会带来诸多挑战,包括网络传输速度过慢、服务...

    1 年前
  • 如何在 Express.js 项目中使用 Tailwind CSS ?

    Tailwind CSS 是一个流行的 CSS 框架,为开发人员提供了一个丰富、灵活的工具箱来构建用户界面。它具有高度的可定制性和易于使用的优点,让许多开发者爱不释手。

    1 年前

相关推荐

    暂无文章