初识Nuxt2.js(项目搭建、发布、SEO基础配置)

1,582 阅读4分钟

Nuxt.js

vue单页应用要做SEO, Nuxt.js的SSR服务端渲染可以很好的做到,小米官网和掘金都有使用Nuxt。

一、安装

npx create-nuxt-app <项目名>

在这可能有报一个错误:

npm ERR! code ENOLOCAL
npm ERR! Could not install from “Files\nodejs\node-cache_npx\16376” as it does not contain a package.json file.
​
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Program Files\nodejs\node-cache_logs\2019-08-07T02_34_54_333Z-debug.log
Install for create-nuxt-app@latest failed with code 1

原因是node_cache路径有空格

cmd输入

npm config list 

可以看到

cache = "C:\Program Files\nodejs\node_cache"
prefix = "C:\Program Files\nodejs\node_global"

再次输入

"C:\Program~1\nodejs\node_cache"

如果改掉路径了直接创建项目:

npx create-nuxt-app 项目名称

后续会让选择一些框架和配置,参考www.nuxtjs.cn/guide/insta…

创建完成 输入 npm run dev 启动项目

Snipaste_2022-07-14_11-51-06.png

二、路由

1、路由跳转

www.nuxtjs.cn/guide/routi…

nuxt路由跳转标签 nuxt-link会渲染成a标签

<nuxt-link to="/">首页</nuxt-link>

2、嵌套路由

nuxt会将pages文件夹下vue文件自动生成路由, 可以再.nuxt文件夹下router.js看到生成的路由文件

pages/
--| index/
-----| integratedQuery.vue
-----| integratedQueryResult.vue
--| index.vue

index.vue文件中要有标签显示子路由页面

子路由要放在父页面同名的文件夹下。

Snipaste_2022-07-14_11-48-25.png

Snipaste_2022-07-14_11-49-21.png

3、动态路由

在 Nuxt.js 里面定义带参数的动态路由,需要创建对应的以下划线作为前缀的 Vue 文件 或 目录。

命名的文件或目录为参数名 Snipaste_2022-07-14_14-22-25.png

Snipaste_2022-07-14_14-23-13.png

三、插件的引入

Nuxt 中使用scss

使用npm安装

npm install --save-dev node-sass sass-loader@10 fibers @nuxtjs/style-resources

在nuxt.config.js 文件中配置

buildModules: [
    '@nuxtjs/style-resources',
    '@nuxtjs/style-resources'
],
​
styleResources: {
    scss: [
      '~assets/scss/mixins.scss',
      '~assets/scss/variables.scss'
    ]
},

重新运行一下项目 npm run dev 即可使用

Nuxt中使用echarts

npm引入

npm install echarts

配置

在plugins中新建一个js文件

echarts.js:

import Vue from 'vue'
const echarts = require('echarts');
Vue.prototype.$echarts = echarts // 引入组件(将echarts注册为全局)

nuxt.config.js配置

plugins: [
    '@/plugins/echarts'
],

使用

let radarChart = this.$echarts.init(document.getElementById("ElementId"));
radarChart.setOption(...);

四、asyncData获取数据

1、基本使用

asyncData return 里面定义的双向绑定的数据; 因为在组件渲染前执行asyncData, 所以在里面不能获取this。

axios使用nuxt推荐使用他内置的axios.nuxtjs.org/

async asyncData({$axios}) {
    const res = await $axios.$get('http://4157eaf7.cpolar/.....');
    //根据接口结构来
    console.log(res.data.data, '数据');
    return {
      tableData:res.data.data
    }
  },

2、无法验证证书错误

如果接口是http公网IP地址的形式, 有可能会报无法验证证书错误

在plugins下面新建js文件

//解决接口无法验证证书问题
import https from 'https';
​
export default function ({ $axios }) {
  $axios.defaults.httpsAgent = new https.Agent({ rejectUnauthorized: false });
}
​

nuxt.config.js配置

plugins: [
    '@/plugins/https'
],

五、nuxt打包部署

1、配置

在项目package.json配置, 位置和scripts同一级

"config": {
    "nuxt": {
      "host": "0.0.0.0", //推荐改成服务器公网IP
      "port": 5001 //自定义端口
    }
  },

运行 npm run build 命令打包;

然后将项目中这几个文件夹放在服务器站点上

-- .nuxt
-- static
-- nuxt.config.js
-- package.json

2、可能报错

在服务器运行npm i时候有可能会报错误

 ERROR 
​
  Error: No SSR build! Please start with `nuxt start --spa` or build using `nuxt build --universal`
​
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! nuxt-ssr-demo@1.0.0 start: `PORT=7001 nuxt start`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the nuxt-ssr-demo@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
​
npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-05-08T06_20_58_553Z-debug.log

然后我的服务器负载就满了......

原因大概是centos的默认配置的虚拟内存不够导致的;

可以参考github.com/jackieli123…

也可以把部署的文件夹放在本地再运行npm install 将生成的node_moudles压缩上传到服务器上(我是这么干的);

打开文件夹所在位置的终端 输入npm run start 运行;

使用服务器公网IP测试访问:http://IP地址:配置的端口/

ps:记得开放服务器防火墙,和宝塔安全规则

但是当关闭当前终端的时候就访问不了了,

可以使用 PM2守护进程;

3、PM2守护进程

安装

使用宝塔安装, 自带node环境;软件商店搜索PM2安装就行;

安装好之后新建站点将打包好的文件上传;

运行

pm2 start npm --name "项目名称" -- run start

其他相关命令

pm2 list 显示所有进程

pm2 stop all 停止所有进程

pm2 stop 0 停止id为0的进程

pm2 delete 0 删除id为0的进程

pm2 startup 创建开机自启动命令

pm2 restart all 重启所有应用

六、nuxt SEO初配置

1、关键词和标题

这里以bilibili举例

Snipaste_2022-07-22_14-43-12.png

在nuxt中配置

Snipaste_2022-07-22_14-39-37.png

2、sitemap站点地图

sitemap就是网站上各网页的列表,可以让搜索引擎更快收录到资料库中。 一般是xml文件,百度的txt文件好像也可以;

nuxt中配置站点地图

安装@nuxtjs/sitemap

npm i @nuxtjs/sitemap -D

在nuxt.config.js中添加进去

modules: [
    '@nuxtjs/sitemap'
],

并在与modules同级添加配置

​
  sitemap:{
    path:'/sitemap.xml',
    hostname: 'http://域名.com/',
    defaults:{
      changefreq: 'always',
      lastmod: new Date()
    },
    // 路由配置
    routes: () => {
      const routes = [
        {
          url:'/',
          changefreq: 'always',
          lastmod: new Date() // 最后更新时间
        },
        {
          url:'/integratedQueryResult',
          changefreq: 'always',
        }
      ]
      return routes
    }
  }

npm run dev 测试 会生成站点地图

Snipaste_2022-07-19_17-03-34.png

配置参数查看官网 www.npmjs.com/package/@nu…

3、chrome收录

谷歌 seo控制台search.google.com/search-cons…

第一次进去会验证网站的所有权

将google给你生成的html文件放在static目录下就行

测试生成的站点地图是否可用

Snipaste_2022-07-19_15-29-45.png

在这输入输入sitemap.xml提交就行。

请求编入索引

Snipaste_2022-07-22_15-02-24.png

接下来等待谷歌爬虫收录网站。

排名和用户搜索点击量和网站内容相关。

网站优化:pagespeed.web.dev/?utm_source…