詳解處理Vue單頁(yè)面應(yīng)用SEO的另一種思路
vue-meta-info 官方地址: monkeyWangs/vue-meta-info
(設(shè)置vue 單頁(yè)面meta info信息,如果需要單頁(yè)面SEO,可以和 prerender-spa-plugin形成更優(yōu)的配合)
單頁(yè)面應(yīng)用在前端正大放光彩。三大框架 Angular、Vue、React,可謂婦孺皆知。隨著單頁(yè)面應(yīng)用的普及,人們?cè)诟惺芷鋷?lái)的完美的用戶體驗(yàn),極強(qiáng)的開(kāi)發(fā)效率的同時(shí),也似乎不可避免的要去處理 SEO 的需求。
本文主要針對(duì) vue 2.0 單頁(yè)面 Meta SEO 優(yōu)化展開(kāi)介紹:
其實(shí)解決SEO問(wèn)題不一定非得用服務(wù)端渲染來(lái)處理,服務(wù)端渲染對(duì)于剛接觸 vue 的新手來(lái)說(shuō),并不是那么友好,雖然已有官方 SSR 中文文檔。但是對(duì)于一個(gè)已經(jīng)開(kāi)發(fā)完畢的 vue 項(xiàng)目去接 SSR 無(wú)論是從工作量還是技術(shù)角度來(lái)說(shuō),都是一種挑戰(zhàn)。不過(guò)這些怎么能難得到偉大的前端程序員!
如果您調(diào)研服務(wù)器端渲染(SSR)只是用來(lái)改善少數(shù)營(yíng)銷頁(yè)面(例如 /, /about, /contact 等)的 SEO,那么您可能需要預(yù)渲染。無(wú)需使用 web 服務(wù)器實(shí)時(shí)動(dòng)態(tài)編譯 HTML,而是使用預(yù)渲染方式,在構(gòu)建時(shí) (build time) 簡(jiǎn)單地生成針對(duì)特定路由的靜態(tài) HTML 文件。優(yōu)點(diǎn)是設(shè)置預(yù)渲染更簡(jiǎn)單,并可以將您的前端作為一個(gè)完全靜態(tài)的站點(diǎn)。
如果您使用 webpack,您可以使用 prerender-spa-plugin 輕松地添加預(yù)渲染。它已經(jīng)被 Vue 應(yīng)用程序廣泛測(cè)試。
預(yù)渲染為SEO提供了另一種可能,簡(jiǎn)單的來(lái)說(shuō),預(yù)渲染就是當(dāng)vue-cli構(gòu)建的項(xiàng)目進(jìn)行npm run build 的時(shí)候,會(huì)按照路由的層級(jí)進(jìn)行動(dòng)態(tài)渲染出對(duì)應(yīng)的html文件。
// webpack.conf.js
var path = require('path')
var PrerenderSpaPlugin = require('prerender-spa-plugin')
module.exports = {
// ...
plugins: [
new PrerenderSpaPlugin(
// 編譯后的html需要存放的路徑
path.join(__dirname, '../dist'),
// 列出哪些路由需要預(yù)渲染
[ '/', '/about', '/contact' ]
)
]
}
最終會(huì)生成類似于這樣的目錄結(jié)構(gòu)

而里面的內(nèi)容都會(huì)被渲染成了靜態(tài)的 html 文件

相對(duì)于之前的可能只有
<html> <head> <meta charset="utf-8"> <title>tangeche-pc</title> </head> <body> <div id="app"></div> <!-- built files will be auto injected --> <script type="text/javascript" src="/app.js"></script></body> </html>
可以直觀的發(fā)現(xiàn),預(yù)渲染的作用。
有了預(yù)渲染,我們可以解決很多方面的SEO的問(wèn)題,但是有時(shí)候我們也會(huì)需要Meta信息的變化,比如 title 比如 Meta keyWords 或者是 link...
這里安利一下vue-meta-info 一個(gè)可以動(dòng)態(tài)設(shè)置meta 信息的vue插件如果需要單頁(yè)面SEO,可以和 prerender-spa-plugin形成更優(yōu)的配合。
vue-meta-info 是一個(gè)基于 vue 2.0 的插件,它會(huì)讓你更好的管理你的 app 里面的 meta 信息。你可以直接 在組件內(nèi)設(shè)置 metaInfo 便可以自動(dòng)掛載到你的頁(yè)面中。如果你需要隨著數(shù)據(jù)的變化,自動(dòng)更新你的 title、meta 等信息,那么用此 插件也是再合適不過(guò)了。 當(dāng)然,有時(shí)候我們也可能會(huì)遇到讓人頭疼的 SEO 問(wèn)題,那么使用此插件配合 prerender-spa-plugin 也是再合適不過(guò)了
1.安裝
yarn:
yarn add vue-meta-info
2. npm:
npm install vue-meta-info --save
2.全局引入 vue-meta-info
import Vue from 'vue' import MetaInfo from 'vue-meta-info' Vue.use(MetaInfo)
3.組件內(nèi)靜態(tài)使用 metaInfo
<template>
...
</template>
<script>
export default {
metaInfo: {
title: 'My Example App', // set a title
meta: [{ // set meta
name: 'keyWords',
content: 'My Example App'
}]
link: [{ // set link
rel: 'asstes',
href: 'https://assets-cdn.github.com/'
}]
}
}
</script>
4.如果你的 title 或者 meta 是異步加載的,那么你可能需要這樣使用
<template>
...
</template>
<script>
export default {
name: 'async',
metaInfo () {
return {
title: this.pageName
}
},
data () {
return {
pageName: 'loading'
}
},
mounted () {
setTimeout(() => {
this.pageName = 'async'
}, 2000)
}
}
</script>
寫(xiě)到這里,大家應(yīng)該都明白了我所說(shuō)的 SEO 的另一種思路是什么了,preRender + metaInfo
可以才一定層次上去解決 SEO 問(wèn)題,這種方式優(yōu)點(diǎn)就是代碼侵入性最低,開(kāi)發(fā)成本最少。但是也是有弊端的:
- 不能很好地處理用戶獨(dú)特性路由: 比如有個(gè)路由是 /my-profile, 預(yù)渲染可能不會(huì)很好用, 因?yàn)檫@個(gè)內(nèi)容頁(yè)是根據(jù)用戶信息變化的,所以頁(yè)面內(nèi)容也不是唯一確定的. 你可能會(huì)使用類似于這樣的路由路徑 /users/:username/profile,但是這樣也是不合適的.
- 經(jīng)常變動(dòng)的文件
- 需要預(yù)渲染成千上萬(wàn)的路由文件: 這個(gè)可能會(huì)導(dǎo)致你編譯時(shí)間.....額,可能你會(huì)編譯很長(zhǎng)時(shí)間
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue定時(shí)器設(shè)置和關(guān)閉頁(yè)面時(shí)關(guān)閉定時(shí)器方式
這篇文章主要介紹了vue定時(shí)器設(shè)置和關(guān)閉頁(yè)面時(shí)關(guān)閉定時(shí)器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
如何在基于vue-cli的項(xiàng)目自定義打包環(huán)境
本篇文章主要介紹了在基于vue-cli的項(xiàng)目自定義打包環(huán)境,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
基于Vue實(shí)現(xiàn)樹(shù)形穿梭框的示例代碼
這篇文章主要為大家介紹了如何利用Vue實(shí)現(xiàn)一個(gè)樹(shù)形穿梭框,elementUI和ant-d組件庫(kù)的穿梭框組件效果都不是很好,所以本文將利用一個(gè)新的插件來(lái)實(shí)現(xiàn),需要的可以參考一下2022-04-04
vue.js的簡(jiǎn)單自動(dòng)求和計(jì)算實(shí)例
今天小編就為大家分享一篇vue.js的簡(jiǎn)單自動(dòng)求和計(jì)算實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
vue composition-api 封裝組合式函數(shù)的操作方法
在 Vue 應(yīng)用的概念中,“組合式函數(shù)”(Composables) 是一個(gè)利用 Vue 的組合式 API 來(lái)封裝和復(fù)用有狀態(tài)邏輯的函數(shù),這篇文章主要介紹了vue composition-api 封裝組合式函數(shù)的操作方法,需要的朋友可以參考下2022-10-10

