vue 單頁應用 seo 優化之 預渲染(prerender-spa-plugin)


前言:當前 SPA 架構流行的趨勢如日中天,前后端分離的業務模式已經成為互聯網開發的主流方式,但是 單頁面 應用始終存在一個痛點,那就是 SEO,

對於那些需要推廣,希望能在百度搜索時排名靠前的網站而言,使用單頁面應用的是無法被 百度的 蜘蛛 爬到的,為此,眾多流行的 MVVM 框架都推出了

很多解決方案,有官方的也有三方的,VUE也不例外,本文章就來分享一下 vue-cli 結合 prerender-spa-plugin 插件這種預渲染的 SEO 優化解決方案

1,使用 vue-cli 創建一個項目,安裝依賴 並啟動 (如果不會使用腳手架創建項目或 對 VUE 框架不太熟的,建議先系統學習 VUE 基礎部分在看該文章)

vue init webpack vue-prerender
cd vue-prerender
npm install
npm run dev

2,腳手架創建的項目默認會給我們 一個 名稱為 HelloWorld.vue 的主鍵,我們將其內容修改為

<style scoped="scoped">

</style>
<template>
    <div class="hello">
        <router-link to="/test">/test</router-link>
    </div>
</template>
<script>
    export default {
        name: 'HelloWorld',
        data() {
            return {}
        }
    }
</script>

3,我們在創建一個名為 Test.vue 的組建,內容如下

<style scoped="scoped">

</style>
<template>
    <div class="test">
        <router-link to="/">回到首頁</router-link>
    </div>
</template>
<script type="text/javascript">
    export default {
        name: "Test",
        data() {
            return {}
        }
    }
</script>

4,修改 src/router/index.js 路由文件如下,特別注意這里要將 mode 設置為 history 模式,目前預渲染只支持該種模式

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '../components/HelloWorld'
import Test from '../components/Test'

Vue.use(Router)

export default new Router({
    mode: 'history',
    routes: [
        {
            path: '/',
            name: 'HelloWorld',
            component: HelloWorld
        },
        {
            path: '/test',
            name: 'Test',
            component: Test
        }
    ]
})

5,這樣我們就實現了兩個互相跳轉的路由,我們可以 使用 npm run dev 命令啟動項目測試一下 (src 目錄結構如下)

6,測試無誤后,我們下載預加載插件 prerender-spa-plugin

npm install prerender-spa-plugin -D

7,我們修改 build/webpack.prod.conf.js 配置文件,將預渲染插件加入進去 (我們一般會將網站的首頁 和 一些變動不大的頁面做預渲染,變動頻繁的頁面不適合改插件)

const PrerenderSpaPlugin = require('prerender-spa-plugin')

plugins: [
        // 配置 prerender-spa-plugin 預渲染插件
        // 生成文件的路徑,此處需要與 webpack 打包地址一致,所以直接使用 config.build.assetsRoot
        // 數組為 需要預渲染的 路由,基本上是首頁或者 變動不大的列表頁等等,目前只支持 h5 history 方式
        new PrerenderSpaPlugin(
            path.join(config.build.assetsRoot),
            ['/', '/test']
        ),
       ......

8,完成上面的步驟我們就可以開始編譯項目了

npm run build

9,編譯后的 dist 目錄結構如下,其中 index.html 對應路由 '/', test/index.html 對應路由 '/test',我們可以打開看看,里面的內容很多 

10,注意,不要直接把 index.html 拖動到瀏覽器訪問,那樣會有路徑的問題,我們可以搭建一個靜態服務器來測試打包后的項目是否有效

11,我們本着一事不煩二主的原則,就直接使用 node 的 express 框架 搭建一個靜態服務器做測試使用

npm i express -D

12,我們在項目根目錄下創建一個腳本 server.js,內容如下

const path = require('path')
const express = require('express')

const app = express();
app.use(express.static(path.join(__dirname, 'dist')))
app.listen(8080)

 

13,我們在 package.json 文件中添加啟動腳本,下面代碼標紅的部分為 添加的內容

"scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "build": "node build/build.js",
    "server": "node server.js"
  },

14,啟動靜態服務器

npm run server

15,在瀏覽器中輸入 localhost:8080 訪問打包生成后的頁面,一切 OK

  

16,優缺點分析

優點:簡單易上手,相對於一些需要服務器渲染的方式如 vue 官方的 vue-ssr,該方法最終將代碼打包成靜態資源,可以部署到任何服務器上,不依賴於服務器就能滿足 SEO 的要求

缺點:只支持 h5 history,並且不太適合變動較頻繁的頁面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM