vue單頁面如何通過prerender-spa-plugin插件進(jìn)行SEO優(yōu)化
prerender-spa-plugin插件只能對(duì)靜態(tài)的頁面做預(yù)渲染實(shí)現(xiàn)SEO優(yōu)化,如果是后臺(tái)請(qǐng)求的數(shù)據(jù)需要做SSR處理,例如商品詳情頁,可使用Vue SSR,詳細(xì)參考我的另一篇博客:VueSSR的一些理解和詳細(xì)配置
一、前言
之前雖然一直有看過SEO相關(guān)的文章,但是一直沒去實(shí)踐過,然后突然技術(shù)總監(jiān)要求要對(duì)咱們的官網(wǎng)做個(gè)SEO的優(yōu)化。
于是才正式動(dòng)手搞這玩意。地址:火石創(chuàng)造官網(wǎng)
首頁用的根目錄的index.html
/bluebook頁面用的bluebook目錄下的index.html。
對(duì)于搜索引擎蜘蛛的工作原理就不再詳細(xì)的復(fù)述了,網(wǎng)上相關(guān)博客很多。
大致講講自己對(duì)單頁面應(yīng)用的SEO不友好的地方的理解吧。
對(duì)于單頁面應(yīng)用,只有一個(gè)html文件,是所有頁面的載體,vue通過js控制路由然后渲染出對(duì)應(yīng)的頁面,而搜索引擎蜘蛛是不會(huì)去執(zhí)行頁面的js的,導(dǎo)致搜索引擎蜘蛛只能收錄index.html一個(gè)頁面,在百度中就搜索不到相關(guān)的子頁面的內(nèi)容。這會(huì)引起兩個(gè)問題
1. 收錄的頁面少了,點(diǎn)擊量之類的也就少了;
2. 不能對(duì)對(duì)應(yīng)的頁面做TDK(title, keywords, description)不同的配置,這個(gè)可以配合vue-meta-info插件生成。
那么,要想解決這個(gè)問題,html文檔就不能通過js生成,目前了解到的有兩種方法,vue的ssr渲染(官方文檔)和prerender-spa-plugin插件實(shí)現(xiàn)(詳細(xì)配置)。SSR目前沒有條件去嘗試,所以選了個(gè)較為簡(jiǎn)便的第二種方法。
二、過程
prerender-spa-plugin的配置其實(shí)很簡(jiǎn)單。就下面一個(gè)配置就行了。
主要講講集成的gu過程中遇到的坑:
1. 路由mode必須是history;
2. 新的html已經(jīng)生成了,但是點(diǎn)擊菜單跳不進(jìn)去那個(gè)html,還是用的js渲染的。
解決:
1.將根目錄的index.html也設(shè)計(jì)成預(yù)渲染頁面; 2. 在最外層的<router-view></router-view>外加一個(gè)<div id="app"></div>(渲染節(jié)點(diǎn))
3. mode由hash改成history布到服務(wù)器上刷新頁面會(huì)404。nginx需要更改配置
location / { try_files $uri $uri/ /index.html; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
4. 打開頁面之后,切換其他非預(yù)渲染頁面不渲染內(nèi)容了。
解決:
在預(yù)渲染出來的頁面組件里面加一個(gè)<div id="app"></div>。因?yàn)関ue是掛在在div idwe為app的節(jié)點(diǎn)上的,把主頁通過插件預(yù)渲染之后,自然沒了這個(gè)div,自然就渲染不出來了。
目前只有以上收獲,有新的進(jìn)展再更新。
補(bǔ)充:
1. 只有a標(biāo)簽,才能跳進(jìn)預(yù)渲染頁面,router-link或者$router.push跳轉(zhuǎn)會(huì)被js代理渲染;
2. 如detail/:id或者user/:id這種動(dòng)態(tài)路由也是可以使用預(yù)渲染的,prerender-spa-plugin插件中配置['/detail']即可,當(dāng)然,這個(gè)預(yù)渲染頁面肯定是沒內(nèi)容的,會(huì)在訪問的時(shí)候生成真是的數(shù)據(jù)。 這個(gè)有誤,貌似處理不了動(dòng)態(tài)頁面...
3. prerender-spa-plugin的新版本是依賴的谷歌的瀏覽器的,利用谷歌的無頭瀏覽器,在不打開瀏覽器的情況下,渲染編譯出html。但是谷歌瀏覽器又一兩百兆,在window環(huán)境還好,但是到服務(wù)器上,通過jekins去編譯,或者直接在服務(wù)器上執(zhí)行npm run build會(huì)失敗。這時(shí)候跳過安裝谷歌瀏覽器,翻墻去谷歌下個(gè)linux版本的瀏覽器,然后在服務(wù)器上安裝,一般安裝好之后會(huì)默認(rèn)在/usr/lib中,代碼里面也不需要在prerender-spa-plugin配置中配置puppeteer.launch的executablePath(可執(zhí)行路徑),會(huì)默認(rèn)去/usr/lib中尋找。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue2.0 axios前后端登陸攔截器(實(shí)例講解)
下面小編就為大家?guī)硪黄猇ue2.0 axios前后端登陸攔截器(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10vue實(shí)現(xiàn)密碼顯示與隱藏按鈕的自定義組件功能
本文通過兩種思路給大家介紹vue實(shí)現(xiàn)密碼顯示與隱藏按鈕的自定義組件功能,感興趣的朋友跟隨小編一起看看吧2019-04-04使用Vue如何寫一個(gè)雙向數(shù)據(jù)綁定(面試常見)
這篇文章主要介紹了使用Vue如何寫一個(gè)雙向數(shù)據(jù)綁定,在前端面試過程中經(jīng)常會(huì)問到,文中主要實(shí)現(xiàn)v-model,v-bind 和v-click三個(gè)命令,其他命令也可以自行補(bǔ)充。需要的朋友可以參考下2018-04-04vue中關(guān)于redirect(重定向)初學(xué)者的坑
這篇文章主要介紹了vue中關(guān)于redirect(重定向)初學(xué)者的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08vue+element?UI?文字加下劃線長度多出一點(diǎn)點(diǎn)的問題
這篇文章主要介紹了vue+element?UI?文字加下劃線長度多出一點(diǎn)點(diǎn)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08vue cli3.0打包上線靜態(tài)資源找不到路徑的解決操作
這篇文章主要介紹了vue cli3.0打包上線靜態(tài)資源找不到路徑的解決操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08