前言
SEO(Search Engine Optimization),即搜索引擎优化。权威的解释是利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名。具体到怎么实现,就是通过在网页上内嵌一些meta属性来达到更好地被搜索引擎爬取关键信息,从而提升自身的搜索排名。
由Vue-Cli打包生成的网站的文件就是单页应用,它只有一个Index.html文件。显然如果需要对网站进行SEO优化,网站存在多个页面的情况,但是只有一个网页会存在meta标签,这对于需要进行SEO优化的需求者来说是完全不够的。那么这是否意味着我们需要放弃使用Vue、React之类的框架,而去使用原生的方式进行开发?答案是否定的。既然存在这样的需求,那么肯定有解决的方法!
Vue官网上提供了两种解决方案:
今天,我们只讲预渲染实现SEO优化
Vue实现预渲染的方式是通过prerender-spa-plugin插件实现。
Vue-Cli 3.0 安装
Vue-Cli 2.0 安装
const path = require('path')
const PrerenderSPAPlugin = require('prerender-spa-plugin') //引用插件
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer
const webpackConfig = merge(baseWebpackConfig, {
plugins: [
// vue-cli生成的配置中就已有这个了,不要动
new HtmlWebpackPlugin({
filename: config.build.index,
template: 'index.html',
inject: true,
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
},
chunksSortMode: 'dependency'
}),
// 配置PrerenderSPAPlugin
new PrerenderSPAPlugin({
// 生成文件的路径,也可以与webpakc打包的一致。
staticDir: path.join(__dirname, '../dist'),
// 对应自己的路由文件,比如index有参数,就需要写成 /index/param1。
routes: ['/', '/product','/about','/contact','/join','/jzjh'],
// 这个很重要,如果没有配置这段,也不会进行预编译
renderer: new Renderer({
inject: {
foo: 'bar'
},
headless: false,
// 在 main.js 中 document.dispatchEvent(new Event('render-event')),两者的事件名称要对应上。
renderAfterDocumentEvent: 'render-event'
})
})
]
})
new Vue({
el: '#app',
router,
render: h => h(App),
mounted () {
document.dispatchEvent(new Event('render-event'))
}
})
需要注意的是无论是Vue-Cli 3.0或2.0创建的项目都要将路由的mode设置为history!
安装 vue-meta-info
import MetaInfo from 'vue-meta-info'
Vue.use(MetaInfo)
metaInfo: {
title: '我是title',
meta: [
{
name: 'keywords',
content: '关键字1,关键字2'
},
{
name: 'description',
content: '网页的描述'
}
]
}
附上参考的两篇文章:
https://www.cnblogs.com/kdcg/p/9606302.html
https://www.jianshu.com/p/6a4c0b281e7f