因爲公司的前端框架是Vue全家桶,因此不可避免地要面對SEO的問題,然而boss並不想在服務器端使用Nuxt,否則就能夠瓜熟蒂落地使用Nuxt,我也能夠順帶學習下。因而boss讓我看看有沒有什麼輕量級的解決方案,做爲程(da)序(gong)員(zai)我怎麼能說不呢!固然是一陣瘋狂谷歌而後開幹了。
javascript
vue-meta-info 設置vue 單頁面meta info信息,同時支持SSR。php
prerender-spa-plugin 在單頁面應用程序中預呈現靜態HTML。前端
仍是建議各位猿去看下GitHub上的文檔,畢竟做者是最熟悉本身寫的項目的。vue
NPM:java
$ npm install vue-meta-info --save
複製代碼
全局引入:webpack
import Vue from 'vue'
import MetaInfo from 'vue-meta-info'
Vue.use(MetaInfo)
複製代碼
組件內使用:git
<template>
...
</template>
<script>
export default {
metaInfo: {
title: 'My Example App', // 標題
meta: [{ // meta的內容
name: 'keyWords',
content: 'My Example App'
}]
link: [{ // link連接
rel: 'asstes',
href: 'https://assets-cdn.github.com/'
}]
}
}
</script>
複製代碼
上述內容都是前端和SEO的一些基礎,若是已經有現成的線上內容就能夠打開F12複製粘貼。 我寫到這裏就夠用了,由於對SEO的要求也不高,固然若是你的title和meta是異步加載的,也能夠按照下面的來配置。github
<template>
...
</template>
<script>
export default {
name: 'async',
metaInfo () {
return {
title: this.pageName
}
},
data () {
return {
pageName: 'loading'
}
},
mounted () {
setTimeout(() => {
this.pageName = 'async'
}, 2000)
}
}
</script>
複製代碼
其實這個插件還依賴chromium內核,有興趣的朋友能夠去看下渲染原理,這裏還能夠順帶了解下爬蟲的知識。web
const path = require('path')
const PrerenderSPAPlugin = require('prerender-spa-plugin')
module.exports = {
plugins: [
...
new PrerenderSPAPlugin({
// 編譯輸出的文件路徑和文件夾名
staticDir: path.join(__dirname, 'dist'),
// 須要預渲染的路由,能夠對照本身的router文件來寫
routes: [ '/', '/about', '/some/deep/nested/route' ],
})
]
}
複製代碼
若是你有不少子路由的話,routes那裏index.vue是不用寫上去的,好比/home/index和/home是會編譯成相同的文件,能夠參照個人:vue-cli
new PrerenderSpaPlugin({
staticDir: path.join(__dirname, '../dist'),
ouputDir: path.join(__dirname, '../dist/loader'),
routes: [
'/',
'/home',
'/home/info',
'/activity',
'/activity/rank',
'/title',
'/title/optimize',
'/title/long',
'/goods',
'/goods/similar',
'/mall',
]
複製代碼
其實吧,若是需求比較複雜且SEO要求比較高的話固然是建議直接上Nuxt。固然,在國內最簡單暴力的方法仍是給某度充錢,人民幣玩家纔不跟你玩啥技術呢。
此文章收錄在個人博客,能夠長期關注,在下剛開始寫博客不久,多多請教:博客地址