Next.js让你的React应用SEO更友好

简介: 本文旨在展示同构应用的概念以及 Next.js 是如何解决的。我们提供了一些详细的代码片段。

原文作者:Arnaud Lewis
译者:UC 国际研发 桥川

----
image.png

为了可以在 Google 上获得一个好的排名并为你的网站提升曝光量,SEO 已经成为非常最重要的环节。如果你曾想过如何继续使用 React 开发 Web 应用,同时又没有糟糕的 SEO 和首屏加载延迟的缺点,那你应该了解一下 Next.js。

Next.js 的目标是为开发者提供一个与开发简单 React 应用相近的开发体验,同时又能获得同构应用的所有好处。它降低了学习难度并让 React 社区更容易接受。

本文旨在展示同构应用的概念以及 Next.js 是如何解决的。我们提供了一些详细的代码片段。

配置你的环境

你只需要在系统上安装 Node.js 就可以开始构建 Next.js 应用。当然,你也需要在你的项目中安装以下依赖:

Next:

image.png

Express:

image.png

next-routes:

image.png

这三个库是你开始所需的所有基础了。

Next.js 默认基于页面的路由

Next.js 提供了一个开箱即用的路由系统。它是完全基于页面的,且无需配置的路由系统。

基于页面的路由意味着一个组件基于它在项目中的路径与一个 url 关联。

当开始使用 Next.js 时,你用两个简单的动作即可构建你的第一个页面:

  1. 在你的源目录下创建一个叫做 pages 的目录
  2. 构建你的第一个 React 组件

pages/index.js

image.png

通过访问你网站的主页,你应该可以看到 Hello Next.js 展示在那。

使用基于页面的路由,每个页面都对应一个组件。这是一个常见的系统,你可以在静态网站生成器中找到它。

构建动态路由

Next.js 内置的基于页面的路由是很容易使用的,但大多数时候你需要动态 URL。想象一下,你需要一个在路由级别管理的动态参数,并将其作为属性注入组件中。这就是需要用到动态路由的地方了。

Next.js 有一个内置的服务器实现,需要替换它来实现动态路由。
你很快就会看到,你将设置一个简单的 Express 服务器。Express 是 Node.js 社区的一个知名的框架,因为它的易用性和强大的 url 匹配系统。

配置你的路由
在此示例中,你将会发现 next-rotues ,一个用于处理服务器端和客户端路由的简单工具。

因为我们使用 Express 服务器实现,你的路由将会有与模式匹配完全相同的语法,你可以在 Express 文档找到详细信息。

routes.js

image.png

在上面的示例中,你有 product 和 bl-ogpost 两个动态路由。在这两个路由里,我们都传递了一个 uid 参数到对应的组件。

设置你的服务器
路由准备完毕后,你只需设置服务器并为其提供路由配置即可。

server.js
image.png

更新你的构建环境以包含服务器

当实现了 Express 服务器后,就需要考虑它并更新构建脚本了。

package.json

image.png

在应用中导航

这是 next-routes 非常便利的地方。
通过输出路由,你就有了一个功能完备的路由器,这样你在应用中导航就无需担心你是在服务器端还是客户端。
有两种方式可以在组件之间导航:

1、声明式的使用 Link 组件

pages/blogpost.js:

image.png

在这里你可以观察到两件事。
首先,你有一个来自 props 的名叫 qu-ery 的变量,它包含了动态参数 uid。它来自你的路由系统。
其次,你有一个来自路由配置的 Link 组件。它允许你在组件之间导航,而无需执行整页重新加载。

2、命令式的使用 Router 对象

image.png

在这个例子中,你从路由配置中获取 Router 对象。它允许你以编程的方式管理路由,而不是在模板中执行。

异步的获取外部数据

从外部 API 查询你的内容
设置好应用后,你需要为其提供一些实际的内容,最有可能是来自外部的资源。在同构应用中这样做很痛苦,但 Next.js 提供了一种简单的方法来处理它。

除了众所周知的 React 组件生命周期外,每个页面组件都可以实现一个异步函数 getInitialProps,它将获取的数据以 props 方式提供给组件。

image.png

在上面简单示例中,我们异步的从一个外部源获取数据并将其填充到我们的组件中。

通过预获取内容加快速度
Next.js 还有一个嵌入机制来预获取所有相关页面,以帮助加快你的网站和提供一个真正快速的用户体验。
要预获取链接,你只需向链接添加一个 prefetch 属性即可。

image.png

基本上,对于每个有 prefetch 标记的 Link 组件,Next.js 会在后台通过 Se-rviceWorker 预获取组件的 JSON 表示。如果你四处浏览,则可能在你关注链接或触发路由转换时,该组件已被获取。此外,因为数据是通过专有方法 getInitialProps 获取的,你可以积极的预获取,而不会触发不必要的服务器加载或者数据获取。

近距离观察 Next.js 对同构应用的实现
同构应用是一种以纯 JavaScript 在服务器端 Node.js 上构建的应用。
该架构因 React 变得相当出名,但目前可用于许多客户端框架或库,如 Angular,Vue.js 等。
基本上,它允许你在服务器端和客户端之间共享组件,以便你可以在两端进行渲染。

image.png

组件在首次加载时是如何渲染的

首次加载始终由服务器处理,它会把组件渲染成静态标记,然后将其发送给客户端来渲染 HTML。
完成渲染后,浏览器会加载 JavaScript 然后将所有的浏览器处理器应用到组件上,如 'onClick','onChange'等。
这样做可以避免你等待客户端加载 Jav-aScript 然后再渲染组件。

如何为你的组件在两端都提供数据
大多数情况下,你的组件将依赖外部数据进行渲染。外部数据通常也意味着异步数据。

为客户端生成 HTML
在服务器端,Next.js 访问请求页面所需要的查询,以便它可以计算此查询并在将数据发送给客户端之前将其提供给组件。

在查询完成后,Next.js 将简单地向浏览器发送静态标记,并重新执行 React 以绑定所有浏览器事件。

从客户端恢复数据
为了避免组件进行两次相同的查询,Next.js 将会把数据和 HTML 一起序列化然后提供给组件。 Next.js 暴露了一个静态异步函数 getInitialProps 给每一个页面组件,然后把获取的数据序列化到 script 标签里。在客户端,它会从 window 读取数据然后作为 props 提供给组件。这个机制叫做再水化。

Next.js 的目的是什么?

在 Prismic,我们认为 Next.js 是一个便利的库,适合那些习惯于 React 但在 SEO 和复杂架构方面遇到困难的人。它很容易上手,但也非常强大,因为它提供了一个舒适的定制空间。 使用 Next.js 整合营销内容和SEO页面变得非常高效。

你可以找到一个功能齐全的使用 Prism-ic 和 Next.js 构建的咖啡店例子,以及 Github 上的所有资源。

以上所有例子都受此示例的启发。

英文原文:

https://prismic.io/blog/seo-with-react-and-nextjs

目录
相关文章
|
3月前
|
监控 JavaScript 算法
如何使用内存监控工具来定位和解决Node.js应用中的性能问题?
总之,利用内存监控工具结合代码分析和业务理解,能够逐步定位和解决 Node.js 应用中的性能问题,提高应用的运行效率和稳定性。需要耐心和细致地进行排查和优化,不断提升应用的性能表现。
224 77
|
30天前
|
缓存 NoSQL JavaScript
Vue.js应用结合Redis数据库:实践与优化
将Vue.js应用与Redis结合,可以实现高效的数据管理和快速响应的用户体验。通过合理的实践步骤和优化策略,可以充分发挥两者的优势,提高应用的性能和可靠性。希望本文能为您在实际开发中提供有价值的参考。
56 11
|
1月前
|
敏捷开发 人工智能 JavaScript
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
Figma-Low-Code 是一个开源项目,能够直接将 Figma 设计转换为 Vue.js 应用程序,减少设计师与开发者之间的交接时间,支持低代码渲染和数据绑定。
107 3
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
|
1月前
|
JavaScript 前端开发
【Vue.js】监听器功能(EventListener)的实际应用【合集】
而此次问题的核心就在于,Vue实例化的时机过早,在其所依赖的DOM结构尚未完整构建完成时就已启动挂载流程,从而导致无法找到对应的DOM元素,最终致使计算器功能出现异常,输出框错误地显示“{{current}}”,并且按钮的交互功能也完全丧失响应。为了让代码结构更为清晰,便于后续的维护与管理工作,我打算把HTML文件中标签内的JavaScript代码迁移到外部的JS文件里,随后在HTML文件中对其进行引用。
52 8
|
28天前
|
监控 安全 中间件
Next.js 实战 (十):中间件的魅力,打造更快更安全的应用
这篇文章介绍了什么是Next.js中的中间件以及其应用场景。中间件可以用于处理每个传入请求,比如实现日志记录、身份验证、重定向、CORS配置等功能。文章还提供了一个身份验证中间件的示例代码,以及如何使用限流中间件来限制同一IP地址的请求次数。中间件相当于一个构建模块,能够简化HTTP请求的预处理和后处理,提高代码的可维护性,有助于创建快速、安全和用户友好的Web体验。
|
3月前
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
91 31
|
3月前
|
JavaScript 前端开发 API
Vue.js 3:深入探索组合式API的实践与应用
Vue.js 3:深入探索组合式API的实践与应用
|
3月前
|
JavaScript 前端开发 API
深入理解Node.js事件循环及其在后端开发中的应用
本文旨在揭示Node.js的核心特性之一——事件循环,并探讨其对后端开发实践的深远影响。通过剖析事件循环的工作原理和关键组件,我们不仅能够更好地理解Node.js的非阻塞I/O模型,还能学会如何优化我们的后端应用以提高性能和响应能力。文章将结合实例分析事件循环在处理大量并发请求时的优势,以及如何避免常见的编程陷阱,从而为读者提供从理论到实践的全面指导。
|
3月前
|
JavaScript
如何使用内存快照分析工具来分析Node.js应用的内存问题?
需要注意的是,不同的内存快照分析工具可能具有不同的功能和操作方式,在使用时需要根据具体工具的说明和特点进行灵活运用。
76 3
|
3月前
|
前端开发 JavaScript 关系型数据库
基于 Vue2.0 + Nest.js 全栈开发的后台应用
Vue2 Admin 是一个基于 Vue2 和 Ant Design Pro 开发的前端项目,配合 Nest.js 构建的后端,提供了一个完整的全栈后台应用解决方案。该项目支持动态国际化、用户权限管理、操作日志记录等功能,适合全栈开发者学习参考。线上预览地址:https://vue2.baiwumm.com/,用户名:Admin,密码:abc123456。

热门文章

最新文章