SPA 型应用 (Nuxt.js+Vue.js) 开发中遇到的 SEO 问题及解决思路

随着互联网的发展,前端应用的需求也越来越高级。SPA(单页应用程序)是一种流行的前端应用程序,它们通过 Ajax 和 HTML5 中的 history.pushState API 来实现不经过页面重载即可页面更新的效果,一般都用来构建一些高性能、高响应速度的应用程序。在 SPA 型应用中,由于页面的内容是通过 Ajax 或单页应用中的路由渲染出来的,所有的 SEO 问题都来源于爬虫对这些内容的识别程度不够,不能准确地读取和索引页面的内容。所以在 SPA 型应用中使用 SEO 需要考虑如何对这些问题进行优化。本文将介绍 SPA 型应用开发中遇到的 SEO 问题及解决思路。

SEO 问题

SPA 型应用在进行 SEO 优化时主要存在以下问题:

首次加载速度慢

由于 SPA 型应用会在首次访问时下载必要的 JavaScript 和 CSS 文件,然后在客户端进行编译和渲染,因此页面的首次加载速度相对较慢,可能会影响页面的 SEO。

爬虫需要处理动态内容

由于 SPA 型应用大量使用 Ajax 请求动态内容,因此爬虫需要处理动态内容才能正确地读取页面内容。

SEO 标签未渲染

由于单页应用会通过 JS 动态改变页面内容,如果不充分考虑 SEO 需求,可能会出现标签未渲染的情况,从而影响网页的 SEO。

解决思路

虽然 SPA 型应用存在以上的 SEO 问题,但 Nuxt.js 和 Vue.js 已经提供了很多用于解决这些问题的优化选项。下面将从以下三个方面介绍解决方案:

首屏渲染速度优化

实现 SPA 首屏渲染的方法有很多,例如 Async Components(异步组件)、Vue SSR(服务器端渲染)等。这里我们介绍一种通过使用 Nuxt.js 基于 Vue 的服务端渲染实现首屏渲染速度优化的方法。

Nuxt.js 基础配置

Nuxt.js 是一个基于 Vue.js 的通用应用框架,它能够帮助我们快速搭建一个高性能、分级加载和功能强大的 SPA 应用,以达到巨大的 SEO 改进。与传统的 SPA 应用不同的是,Nuxt.js 在服务器上预先渲染应用程序的内容,然后将常规 Vue.js 应用程序的路由和构建配置样式重用到其上。通过这种方式,我们可以获得第一个服务器响应,从而更好地控制 SEO,并获得更快的页面加载速度。

让我们看看在使用服务器端渲染时,如何使用 Nuxt.js 实现页面预加载。

——nuxt.config.js——

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

Nuxt.js 默认使用 SSR,因此,在 nuxt.config.js 中将 mode 属性设为 "spa"。

此外,我们还在 nuxt.config.js 文件中添加了 generate 属性,用于对应用程序在服务器端预渲染完成的静态 HTML 页面和 JSON 文件执行的基本配置,同时解决了 Nuxt.js 在部署到静态硬盘时可能出现的问题。

路由级别的代码分割和预加载

代码分割和预加载是应用程序中常用的技术,因为它们可以让用户只加载必要的代码,从而提高加载速度和体验。

在 Nuxt.js 中进行代码分割和预加载可以在路由级别进行,因为这是开发人员控制的最小分块儿。示例代码如下: ——pages/index.vue——

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

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

在以上代码中,我们通过 component 和动态导入使用了 lazy-load components(懒加载)API。 ——nuxt.config.js——

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

以上代码可以在 Nuxt.js 应用程序的构建中使用,可以提供更好的性能和 SEO。

非 Signle Page 和 Hybrid 应用的服务端集成

使用 Nuxt.js 的服务端渲染方案,为一些非 Single Page 和 Hybrid 应用程序提供了集成的方案,JAMstack 可以很好地实现。

Signle Page 应用程序没有层次结构,并且不需要在浏览器中进行路由记录和组件跟踪。对于大多数 Signle Page 应用程序来说,有了基于客户端的应用程序结构,我们就有了一个扩展性很好的基础。但是,由于程序可能变得越来越复杂,单页应用程序的构建时间和灰度时间随着时间而增加。此外,SEO 往往是 SPA 应用程序最大的挑战之一。

Hybrid 通常指的是将传统服务器呈现与客户端应用程序一起使用的应用程序。例如,您可能在具有仅终端不同的多个客户端应用程序的情况下使用 jQuery,React 和 Vue.js。

更具体地说,Hybrid 应用程序在“1.0”版本中具有基于内容管理系统的访问授权,但希望在“2.0”版本中增加基于 API 的访问授权。例如,您可能有一个仅在客户端上运行的登录流程,一旦成功登录,您的用户令牌将存储在 localstorage 中,并通过其他身份验证方式升级到服务端令牌。

无论是什么场景,Nuxt.js 的服务器端集成都能为您的应用程序提供结构和性能上的好处,使其不但 SEO 更好,而且具有更好的性能和体验。

页面内容生成和渲染

尝试将动态页面内容在前端生成意味着存在 SEO 的动态内容,这意味着爬虫不会看到任何内容。解决这个问题的一种方法是使用大量的静态化方式来生成已知的动态内容。当然,这并不是对 SEO 的真正投资。最终, 随着时间的推移,有很多基于 Ajax 请求或更高级的渲染方法,这些渲染方法会在爬虫看到之前返回预渲染 HTML。

然而,以下方案可能更好地涵盖各种场景。

动态 HTML 渲染

Vue 加载器提供了一个方便的折衷,因为单页应用程序可以动态创建 HTML 片段并将其发送到客户端加载器,从而最大程度地减少了 HTML 代码和 JavaScript 代码之间的重复。使用该工具,我们可以设置一个简单的方法来渲染所有模板标签,这些标签应生成 HTML 片段并将其发送到客户端加载器。

通过这种方式,我们可以挑选 Vue 模板,并在服务器端使用全局 mixins 处理所有需要的数据,然后在客户端加载器上渲染 HTML 片段。

预渲染

一些不必要的 DRY(不要重复自己)尝试可能会产生 Ajax 组件的前置渲染。这会影响 SEO,因为本质上是在客户端进行中国人预渲染,而爬虫没有这个选项。相反,可以通过预渲染静态 HTML 页面来针对单独的路由和 Endpoint。这样,你就可以使用 Nuxt.js 的预渲染系统,在服务器端生成静态 HTML 页面的 Web 应用程序。

当涉及到静态预渲染时,首先要确定的事情是页面是否会发生变化。如果 Web 应用程序的页面并不频繁更新或需要数据实时更新,预渲染页面是一个很好的选择。

总结

  • Nuxt.js 是一种基于 Vue.js 的通用应用程序框架,它能够帮助我们快速搭建高性能、分级加载和功能强大的 SPA 应用程序,以达到巨大的 SEO 改进。
  • 在应用程序中使用代码分割和预加载可以提高页面加载速度和体验。
  • 一些场景可能最适合预渲染静态 HTML 页面。
  • 服务器端集成可以为您的应用程序提供结构和性能上的好处,使其不但 SEO 更好,同时具有更好的性能和体验。
  • 由于单页应用程序将大量动态内容放在前端渲染,因此可以使用动态 HTML 渲染和预渲染等优化选项来改善您的 SEO。

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


猜你喜欢

  • 如何使用 Webpack 实现前端路由

    前言 前端路由是一个非常重要的概念,它可以让我们在不刷新页面的情况下,实现页面的跳转和显示。目前前端路由的实现方式有很多种,本文将介绍如何使用Webpack来实现前端路由。

    1 年前
  • ECMAScript 2020 模块语法中的导出说明符详解

    在 ECMAScript 2020 中,ES Modules 方案正式成为 JavaScript 官方的模块化方案。在此方案中,我们可以使用导出说明符来导出变量、函数、对象等。

    1 年前
  • SASS 中字体大小自适应方案的实现方法

    SASS 中字体大小自适应方案的实现方法 随着移动设备的普及,网站和应用的访问量也越来越多地来自于移动设备。这就需要网站和应用能够自适应不同设备的屏幕尺寸和像素密度。

    1 年前
  • ESLint 配置 —— 如何在 Angular 项目中使用自定义规则

    ESLint 是一个 JavaScript 代码质量工具,它可以帮助我们检查代码中的一些语法错误和潜在的问题。在 Angular 项目中使用 ESLint 可以帮助我们提高代码质量和可维护性。

    1 年前
  • 基于 Serverless 框架开发 Web 应用时常见的三种错误及其避免方法

    前言 随着云计算的普及,Serverless 框架作为一种旨在简化应用程序开发和部署的新型技术正在逐渐受到关注。与传统的服务器架构相比,Serverless 更加灵活、高效,并且具有更低的服务成本。

    1 年前
  • RxJS 中 mergeMap 的使用场景及应用案例分享

    前言 RxJS 是一个非常强大的响应式编程库,可以处理异步事件,而 mergeMap 是其中一个非常常用的操作符。在本文中,我们将介绍 mergeMap 的使用场景及应用案例分享,让大家了解该操作符的...

    1 年前
  • Kubernetes 之 PV 和 PVC 的使用

    在 Kubernetes 中,PV(Persistent Volume,持久化存储卷)和 PVC(Persistent Volume Claim,持久化存储申请)是非常重要的概念,它们可以帮助我们管理...

    1 年前
  • Sequelize 中实现数据加密的最佳方案

    在开发 Web 应用程序时,数据加密是非常重要的一项功能,尤其是对于那些需要存储敏感数据的应用程序。Sequelize 是一种流行的 ORM 框架,它提供了一种方便的方式来与数据库交互,但是它默认并不...

    1 年前
  • koa-compose 的使用:提高 Koa 中间件性能和可重用性

    Koa 是一款基于 Node.js 平台的 Web 框架,使用它可以轻松构建 Web 应用程序和 API。Koa 中的中间件是其设计的核心,通过使用中间件,我们可以轻松地管理和控制请求和响应。

    1 年前
  • 解决 Tailwind 中的浮动布局问题

    Tailwind 是一种流行的 CSS 框架,它通过大量的预定义类名来简化前端开发过程。然而,在处理浮动布局时,Tailwind 的特殊设计可能会导致问题。本文将介绍如何解决这些问题,并提供详细的示例...

    1 年前
  • ES12 中的正则表达式组命名

    正则表达式是前端开发中必需的一项技能,其能够让我们在处理字符串时更加灵活和高效。在 JavaScript 中,正则表达式一直是非常强大的工具之一,也受到了全球 Web 开发人员的广泛使用和认可。

    1 年前
  • JavaScript 在 ECMAScript 2018 中的 Promise 扩展

    JavaScript 在 ECMAScript 2018 中的 Promise 扩展 在 JavaScript 中,Promise 是一种非常有用的技术,它可以轻松地处理异步代码。

    1 年前
  • Enzyme 的 mock 模块提供了什么?

    在前端开发中,测试是非常重要的一环。为了更方便地进行测试,React 社区开发了一个非常实用的工具 - Enzyme 库。Enzyme 是一个用于测试 React 组件的 JavaScript 测试库...

    1 年前
  • LESS 使用 REM 单位的技巧

    在前端开发中,使用相对单位可以让我们的布局更加灵活适应各种设备。其中 REM 单位可以根据根元素的字体大小进行相对计算,适应页面缩放和字体变化,是比较常用的一种相对单位。

    1 年前
  • 实际案例:使用 Express.js 和 MongoDB 构建音乐流媒体应用

    前言 本文将解释如何使用 Express.js 和 MongoDB 构建音乐流媒体应用。我们将演示如何使用这些技术来构建一个允许用户上传、存储、播放和分享音乐的 Web 应用程序。

    1 年前
  • 在 Socket.io 通讯中处理用户被禁言的问题

    在 Socket.io 的实时通讯中,很多应用场景下需要对用户进行禁言,以保证聊天室、直播间等环境的秩序。本文将介绍如何在 Socket.io 中实现用户被禁言的处理。

    1 年前
  • CSS Flexbox 的 Order 属性使用教程

    在 CSS Flexbox 中,order 属性用于指定 flex 容器中 flex 项的排列顺序。本文将介绍 order 属性的使用方法,以及如何使用它来控制 flex 项的先后顺序。

    1 年前
  • 使用 GraphQL 和 Node.js 更轻松地构建 Web 应用

    GraphQL 是一种用于 API 的查询语言和运行时环境,它提供了一种更好的方式来描述数据结构和数据之间的关系,相比于 RESTful API,GraphQL 更加灵活、易于扩展和优化。

    1 年前
  • Mocha 测试框架中的编写风格与规范建议

    Mocha 是一款流行的 JavaScript 测试框架,它提供了强大的断言、运行更慢的测试、根据自定义规则集自动执行测试、自动监听代码以进行测试等功能。在使用 Mocha 框架编写测试用例时,我们会...

    1 年前
  • 如何捕获在 Jest 测试期间抛出的 console.log 输出?

    在前端开发中,我们经常使用 Jest 这个测试框架来执行单元测试、集成测试等,但是在测试期间我们有时需要捕获抛出的 console.log 输出来获得更多的测试信息,这篇文章将介绍如何实现这个目标。

    1 年前

相关推荐

    暂无文章