随着互联网的发展,前端应用的需求也越来越高级。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——
export default { mode: 'spa', generate: { fallback: true }, ... }
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