vuejs 預渲染插件 prerender-spa-plugin 生成多頁面 -- SEO

前端vue等框架打包的項目通常爲SPA應用,而單頁面是不利於SEO的,如今的解決方案有兩種:html

一、SSR服務器渲染
   瞭解服務器渲染請進,這裏不作記錄。前端

二、預渲染模式
   這比服務端渲染要簡單不少,並且能夠配合 vue-meta-info 來生成title和meta標籤,基本能夠知足SEO的需求 
   TIPS: 使用預渲染vue-router必須使用history模式vue

// 安裝
npm install prerender-spa-plugin --save

而後在webpack.prod.conf.js裏面添加:webpack

// 頭部引入
const PrerenderSPAPlugin = require('prerender-spa-plugin')
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer

在plugins裏面添加:web

new PrerenderSPAPlugin({
  // 生成文件的路徑,也能夠與webpakc打包的一致。
  // 下面這句話很是重要!!!
  // 這個目錄只能有一級,若是目錄層次大於一級,在生成的時候不會有任何錯誤提示,在預渲染的時候只會卡着不動。
  staticDir: path.join(__dirname, '../dist'),

  // 對應本身的路由文件,好比a有參數,就須要寫成 /a/param1。
  routes: ['/', '/a', '/b', '/c', '/d'],

  // 預渲染代理接口
  server: {
    proxy: {
      '/api': {
        target: 'http://localhost:9018',
        secure: false
      }
    }
  },

  // 這個很重要,若是沒有配置這段,也不會進行預編譯
  renderer: new Renderer({
    inject: {
      foo: 'bar'
    },
    headless: false,
    // 在 main.js 中 document.dispatchEvent(new Event('render-event')),二者的事件名稱要對應上。
    renderAfterDocumentEvent: 'render-event'
  })
}),

最後在main.js裏面修改:vue-router

new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>',
  // 添加mounted,否則不會執行預編譯
  mounted () {
    document.dispatchEvent(new Event('render-event'))
  }
})

到這裏預編譯的配置修改就完成了,執行 npm run build 查看打包後的dist文件就會發現以下結構:npm

 

安裝 vue-meta-info 配置title和meta:api

npm install vue-meta-info --save

在main.js引入:服務器

import MetaInfo from 'vue-meta-info'
Vue.use(MetaInfo)

在vue頁面中配置:app

<script>
export default {
  // 配置title和meta數據
  metaInfo: {
    title: '我是一個title',
    meta: [
      {
        name: 'keywords',
        content: '關鍵字1,關鍵字2,關鍵字3'
      },
      {
        name: 'description',
        content: '這是一段網頁的描述'
      }
    ]
  },
  data () {
    return {}
  }
}
</script>

到這裏 prerender-spa-plugin 與 vue-meta-info 就所有完成了

相關文章
相關標籤/搜索