next.js入门及seo介绍
写在前面
前面写了不少关于后端技术、运维相关的分享,今天我们来分来改个口味,也是很多朋友在咨询的一个框架。
简介
Next.js 是为了简化和优化基于 React 的应用开发流程,同时提供了高性能和 SEO 友好的解决方案。
另一个一直拿来作为比较的是Remix.js (remix.run/),至于他们之间的对比后面再分析。
Next.js资料:
官网:nextjs.org/
github地址:github.com/vercel/next…
学习文档:nextjs.org/docs
安装使用
创建Next.js应用
# 创建项目
npx create-next-app@latest
#也可以使用模版创建
npx create-next-app next-demo --use-npm --example "https://github.com/vercel/next-learn/tree/main"
# 进入项目目录
cd next-demo
#启动服务
npm run dev
其背后的工作是通过调用 create-next-app 工具完成的,该工具为你创建了一个 Next.js 应用程序。通过 --example 参数指定使用 此模板 。
将现有项目变为next.js
如果你已经有一个 React 项目,你可以通过安装以下几个包来将其转换为 Next.js 项目:
- 安装 next、react 和 react-dom
npm install next react react-dom
# 或者
yarn add next react react-dom
- 在 package.json 中添加几个脚本来启动 Next.js:
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
}
- dev - 运行 next dev,以开发模式启动 Next.js
- build - 运行 next build,以构建用于生产环境的应用程序
- start - 运行 next start,以启动 Next.js 生产环境服务器
- lint - 运行 next lint,以设置 Next.js 的内置 ESLint 配置
Next.js 目录结构说明
新建的项目结构如下:
新建的项目默认里面是不包含pages文件夹的,但是由于习惯的原因,我们还是会手动创建一个,下面是较全一点的说明:
next-demo/
|-- app/ # 应用路由器
|-- page.js
|-- pages/ # 页面路由
| |-- index.js # 主页
| |-- _app.js # 可选的 App 组件,用于初始化页面
| `-- 其他
|-- public/ # 静态文件放置目录,如图片、favicon 等
|-- styles/ # 样式文件目录
|-- node_modules/ # 项目依赖目录
|-- package.json # 项目依赖和脚本配置文件
|-- next.config.js # 可选的 Next.js 配置文件
|-- instrumentation.ts # OpenTelemetry 和检测文件
|-- middleware.ts # Next.js 请求中间件
|-- .env # 环境变量
|-- .env.local # 本地环境变量
|-- .env.production # 生产环境变量
|--.env.development # 开发环境变量
|-- .eslintrc.json # ESLint 的配置文件
|-- .gitignore # Git 忽略的文件和文件夹
|-- next-env.d.ts # Next.js 的 TypeScript 声明文件
|-- tsconfig.json # TypeScript 的配置文件
|-- jsconfig.json # JavaScript 的配置文件
- app/: Next.js 12 引入了一个新的路由系统,它提供了更灵活的路由定义方式,包括对路由组、布局、加载状态、错误处理和并行路由等的支持。
- app/page.js app/page.js与pages/index.js只能存在一个
- app/layout.js 是一个布局,可以被包含在多个页面中。
- app/loading.js 定义了加载状态的 UI。
- app/404.js 提供了一个404错误页面。
- app/(users)/[id].js 创建了一个路由组。
- pages/:pages 目录是 Next.js 最初提供的默认路由机制。在这个目录下,文件系统被用作路由器的基础,即每个文件(除了一些特殊的文件如 _app.js 或 _document.js)都会自动映射到一个 URL 路径上。
例如:
- pages/index.js 映射到站点的根 URL (/)。也就是访问站点根 URL(如 http://localhost:3000/)时加载的页面
- pages/about.js 映射到 /about。
- pages/posts/[id].js 映射到一个动态路由,如 /posts/1。
- pages/_app.tsx 或 pages/_app.js 这是 Next.js 中的一个特殊文件,它允许你初始化所有页面。你可以使用这个文件来保持页面布局,保持状态(如 Redux 或 MobX)时使用,或者用于全局 CSS 的插入。这个文件是可选的,如果你的应用不需要全局初始化,则不需要创建它
- public/:用于存放静态资源,如图片、字体等,这些文件可以直接通过 / 路径在浏览器中访问。
- styles/:保存 CSS 文件的地方,你可以根据需要组织你的样式文件。
- node_modules/:存放所有安装的依赖包。
- package.json:定义了项目的依赖和可运行的脚本。
- next.config.js:可选的配置文件,用于自定义 Next.js 的高级配置,比如添加环境变量、修改构建的 Webpack 配置等。
关于路由:
Next.js 拥有两种不同的路由器:App Router 和 Pages Router。App Router 是一种较新的路由器,它允许你使用 React 的最新特性,例如服务器组件(Server Components)和流式传输(Streaming)。Pages Router 是原始的 Next.js 路由器,它允许你构建服务端渲染(Server-Rendered)的 React 应用程序,并且继续支持旧版本的 Next.js 应用程序。
Next.js 和 Remix.js在seo方面
Next.js
- 多样的渲染模式提升SEO:Next.js 支持服务器端渲染(SSR)和静态站点生成(SSG),这对于SEO非常有利。SSR确保搜索引擎爬虫看到的是完全渲染的页面内容,有助于提高索引质量和排名。而SSG则可以预先生成静态HTML文件,进一步提升页面加载速度和SEO效果。此外,Next.js的增量静态生成(ISR)也是对SEO友好的特性,它允许在首次访问时动态生成缺少的静态页面,结合了静态和动态内容的优点。
- 自动化路由和链接预取:Next.js 自动处理路由并支持链接预取,这有助于改善页面间的导航速度和用户体验,间接有利于SEO。
Remix
- 服务器端渲染:虽然Remix主要聚焦于服务器端渲染,这对SEO也是有益的,因为它同样保证了搜索引擎爬虫能够获取到完整的HTML内容。不过,缺乏静态站点生成(SSG)这样的特性,可能在某些场景下不如Next.js那样能够提供即时加载的静态页面和最优的初次访问性能。
- 更好的用户体验:根据之前的讨论,Remix在动态内容加载和错误处理方面做得很好,即使在网络状况不佳的情况下也能保持良好的用户体验。虽然用户体验不直接属于SEO范畴,但它对用户留存率、跳出率等间接影响SEO的因素有所贡献。
总结
这篇只是简单介绍了一下next.js基础,很多朋友比较关心他的seo。 但总的来说,Next.js由于其SSG功能,在生成静态内容和提升页面加载速度方面对于SEO来说可能更有优势。 然而,Remix通过出色的服务器端渲染和用户体验设计,也能很好地服务于SEO目的,尤其是在确保内容的可抓取性和可索引性方面。选择哪个框架还应基于项目具体需求、团队熟悉度以及是否需要特定的SEO优化策略。
参考资料:
转载自:https://juejin.cn/post/7367175713894678580