国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

基于Vue SEO的四種方案(小結(jié))

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:54:14
文檔

基于Vue SEO的四種方案(小結(jié))

基于Vue SEO的四種方案(小結(jié)):前言:眾所周知,Vue SPA單頁面應(yīng)用對SEO不友好,當(dāng)然也有相應(yīng)的解決方案,下面列出幾種最近研究和使用過的SEO方案,SRR和靜態(tài)化基于Nuxt來說。 1.SSR服務(wù)器渲染; 2.靜態(tài)化; 3.預(yù)渲染prerender-spa-plugin; 4.使用Phantomjs針對爬蟲做處理。
推薦度:
導(dǎo)讀基于Vue SEO的四種方案(小結(jié)):前言:眾所周知,Vue SPA單頁面應(yīng)用對SEO不友好,當(dāng)然也有相應(yīng)的解決方案,下面列出幾種最近研究和使用過的SEO方案,SRR和靜態(tài)化基于Nuxt來說。 1.SSR服務(wù)器渲染; 2.靜態(tài)化; 3.預(yù)渲染prerender-spa-plugin; 4.使用Phantomjs針對爬蟲做處理。

根據(jù)github nuxt上的 issue第1552條 提示,要將 v-if 改為 v-show 語法。

4.坑太多,留坑,晚點(diǎn)更。

2.靜態(tài)化

在 Nuxt.js 執(zhí)行 generate 靜態(tài)化打包時(shí),動(dòng)態(tài)路由會(huì)被忽略。

-| pages/
---| index.vue
---| users/
-----| _id.vue

需要?jiǎng)討B(tài)路由先生成靜態(tài)頁面,你需要指定動(dòng)態(tài)路由參數(shù)的值,并配置到 routes 數(shù)組中去。

// nuxt.config.js
module.exports = {
 generate: {
 routes: [
 '/users/1',
 '/users/2',
 '/users/3'
 ]
 }
}

運(yùn)行打包,即可看見打包出來的頁面。

但是如果路由動(dòng)態(tài)參數(shù)的值是動(dòng)態(tài)的而不是固定的,應(yīng)該怎么做呢?

使用一個(gè)返回 Promise 對象類型 的 函數(shù);
使用一個(gè)回調(diào)是 callback(err, params) 的 函數(shù)。

// nuxt.config.js
import axios from 'axios'

export default {
 generate: {
 routes: function () {
 return axios.get('https://my-api/users')
 .then((res) => {
 return res.data.map((user) => {
 return {
 route: '/users/' + user.id,
 payload: user
 }
 })
 })
 }
 }
}

現(xiàn)在我們可以從 /users/_id.vue 訪問的 payload ,如下所示:

async asyncData ({ params, error, payload }) {
 if (payload) return { user: payload }
 else return { user: await backend.fetchUser(params.id) }
}

如果你的動(dòng)態(tài)路由的參數(shù)很多,例如商品詳情,可能高達(dá)幾千幾萬個(gè)。需要一個(gè)接口返回所有id,然后打包時(shí)遍歷id,打包到本地,如果某個(gè)商品修改了或者下架了,又要重新打包,數(shù)量多的情況下打包也是非常慢的,非常不現(xiàn)實(shí)。

優(yōu)勢:

  • 純靜態(tài)文件,訪問速度超快;
  • 對比SSR,不涉及到服務(wù)器負(fù)載方面問題;
  • 靜態(tài)網(wǎng)頁不宜遭到黑客攻擊,安全性更高。
  • 不足:

  • 如果動(dòng)態(tài)路由參數(shù)多的話不適用。
  • 3.預(yù)渲染prerender-spa-plugin

    如果你只是用來改善少數(shù)營銷頁面(例如 /, /about, /contact 等)的 SEO,那么你可能需要預(yù)渲染。無需使用 web 服務(wù)器實(shí)時(shí)動(dòng)態(tài)編譯 HTML,而是使用預(yù)渲染方式,在構(gòu)建時(shí) (build time) 簡單地生成針對特定路由的靜態(tài) HTML 文件。優(yōu)點(diǎn)是設(shè)置預(yù)渲染更簡單,并可以將你的前端作為一個(gè)完全靜態(tài)的站點(diǎn)。

    $ cnpm install prerender-spa-plugin --save

    vue cli 3 vue.config.js 配置:

    const PrerenderSPAPlugin = require('prerender-spa-plugin');
    const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
    const path = require('path');
    module.exports = {
     configureWebpack: config => {
     if (process.env.NODE_ENV !== 'production') return;
     return {
     plugins: [
     new PrerenderSPAPlugin({
     // 生成文件的路徑,也可以與webpakc打包的一致。
     // 下面這句話非常重要!!!
     // 這個(gè)目錄只能有一級,如果目錄層次大于一級,在生成的時(shí)候不會(huì)有任何錯(cuò)誤提示,在預(yù)渲染的時(shí)候只會(huì)卡著不動(dòng)。
     staticDir: path.join(__dirname,'dist'),
     // 對應(yīng)自己的路由文件,比如a有參數(shù),就需要寫成 /a/param1。
     routes: ['/', '/product','/about'],
     // 這個(gè)很重要,如果沒有配置這段,也不會(huì)進(jìn)行預(yù)編譯
     renderer: new Renderer({
     inject: {
     foo: 'bar'
     },
     headless: false,
     // 在 main.js 中 document.dispatchEvent(new Event('render-event')),兩者的事件名稱要對應(yīng)上。
     renderAfterDocumentEvent: 'render-event'
     })
     }),
     ],
     };
     }
    }
    

    在main.js中添加:

    new Vue({
     router,
     render: h => h(App),
     mounted () {
     document.dispatchEvent(new Event('render-event'))
     }
    }).$mount('#app')
    

    注意:router中必須設(shè)置 mode: “history” 。

    打包出來可以看見文件,打包出文件夾 /index.html ,例如: about => about/index.html ,里面有html內(nèi)容。

    優(yōu)勢:

  • 改動(dòng)小,引入個(gè)插件就完事;
  • 不足:

  • 無法使用動(dòng)態(tài)路由;
  • 只適用少量頁面的項(xiàng)目,頁面多達(dá)幾百個(gè)的情況下,打包會(huì)很很很慢;
  • 4.使用Phantomjs針對爬蟲做處理

    Phantomjs是一個(gè)基于webkit內(nèi)核的無頭瀏覽器,即沒有UI界面,即它就是一個(gè)瀏覽器,只是其內(nèi)的點(diǎn)擊、翻頁等人為相關(guān)操作需要程序設(shè)計(jì)實(shí)現(xiàn)。

    雖然“PhantomJS宣布終止開發(fā)”,但是已經(jīng)滿足對Vue的SEO處理。

    這種解決方案其實(shí)是一種旁路機(jī)制,原理就是通過Nginx配置, 判斷訪問的來源UA是否是爬蟲訪問,如果是則將搜索引擎的爬蟲請求轉(zhuǎn)發(fā)到一個(gè)node server,再通過PhantomJS來解析完整的HTML,返回給爬蟲。

     

    具體代碼戳這里: vue-seo-phantomjs 。

    要安裝全局 phantomjs ,局部 express ,測試:

    $ phantomjs spider.js 'https://www.baidu.com'

    如果見到在命令行里出現(xiàn)了一推html,那恭喜你,你已經(jīng)征服PhantomJS啦。

    啟動(dòng)之后或者用postman在請求頭增加 User-Agent 值為 Baiduspider ,效果一樣的。

    部署上線

    線上要安裝 node pm2 、 phantomjs ,nginx相關(guān)配置:

    upstream spider_server {
     server localhost:3000;
    }
    
    server {
     listen 80;
     server_name example.com;
     
     location / {
     proxy_set_header Host $host:$proxy_port;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
     if ($http_user_agent ~* "Baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator|bingbot|Sosospider|Sogou Pic Spider|Googlebot|360Spider") {
     proxy_pass http://spider_server;
     }
     }
    }
    
    

    優(yōu)勢:

  • 完全不用改動(dòng)項(xiàng)目代碼,按原本的SPA開發(fā)即可,對比開發(fā)SSR成本小不要太多;
  • 對已用SPA開發(fā)完成的項(xiàng)目,這是不二之選。
  • 不足:

  • 部署需要node服務(wù)器支持;
  • 爬蟲訪問比網(wǎng)頁訪問要慢一些,因?yàn)槎〞r(shí)要定時(shí)資源加載完成才返回給爬蟲;
  • 如果被惡意模擬百度爬蟲大量循環(huán)爬取,會(huì)造成服務(wù)器負(fù)載方面問題,解決方法是判斷訪問的IP,是否是百度官方爬蟲的IP。
  • 總結(jié)

    如果構(gòu)建大型網(wǎng)站,如商城類,別猶豫,直接上SSR服務(wù)器渲染,當(dāng)然也有相應(yīng)的坑等你,社區(qū)較成熟,英文好點(diǎn),一切問題都迎刃而解。

    如果只是個(gè)人博客、公司官網(wǎng)這類,其余三種都可以。

    如果對已用SPA開發(fā)完成的項(xiàng)目進(jìn)行SEO優(yōu)化,而且支持node服務(wù)器,請使用 Phantomjs 。

    很少寫文章,這是我這個(gè)月對Vue SEO方案的探索,寫的不對的地方請指出,謝謝理解~

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    基于Vue SEO的四種方案(小結(jié))

    基于Vue SEO的四種方案(小結(jié)):前言:眾所周知,Vue SPA單頁面應(yīng)用對SEO不友好,當(dāng)然也有相應(yīng)的解決方案,下面列出幾種最近研究和使用過的SEO方案,SRR和靜態(tài)化基于Nuxt來說。 1.SSR服務(wù)器渲染; 2.靜態(tài)化; 3.預(yù)渲染prerender-spa-plugin; 4.使用Phantomjs針對爬蟲做處理。
    推薦度:
    標(biāo)簽: VUE 幾種 方案
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 成人国内精品久久久久影院 | 欧美日韩高清一区二区三区 | 久久亚洲一区二区 | 精品一区 二区三区免费毛片 | 日本不卡视频一区二区 | 国产拍拍拍免费视频网站 | 91久久青草精品38国产 | 久久久影院亚洲精品 | 国产精品视频免费一区二区三区 | 久久一次| 欧美国产视频 | 久久频道毛片免费不卡片 | 一级一级特黄女人精品毛片视频 | 国产中出 | 亚洲欧美视频在线 | 国产精品不卡 | 免费看日产一区二区三区 | 亚洲第一网站在线观看 | 国产成人久久久精品毛片 | 亚洲三区视频 | 亚洲欧洲视频在线 | 亚洲欧美日韩中另类在线 | 国产精品视_精品国产免费 国产精品视频第一区二区三区 | 精品日韩欧美一区二区三区 | 亚洲高清色| 欧美在线看欧美视频免费网站 | 国产美女视频黄a视频免费全过程 | 欧美日一区二区三区 | 欧美色人阁 | 全免费a级毛片免费看不卡 日本二区在线观看 | 欧美韩国日本一区 | 国产高清免费在线观看 | 中文字字幕码一二三区 | 日本我不卡 | 国产一区二区三区免费 | 在线播放一区 | 欧美在线视频观看 | 亚洲免费网站 | 亚洲欧美日韩三级 | 欧美成人看片一区二区三区尤物 | 天天做天天爱夜夜爽毛片毛片 |