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

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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
當前位置: 首頁 - 科技 - 知識百科 - 正文

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

來源:懂視網 責編:小采 時間:2020-11-27 21:54:14
文檔

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

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

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

4.坑太多,留坑,晚點更。

2.靜態化

在 Nuxt.js 執行 generate 靜態化打包時,動態路由會被忽略。

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

需要動態路由先生成靜態頁面,你需要指定動態路由參數的值,并配置到 routes 數組中去。

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

運行打包,即可看見打包出來的頁面。

但是如果路由動態參數的值是動態的而不是固定的,應該怎么做呢?

使用一個返回 Promise 對象類型 的 函數;
使用一個回調是 callback(err, params) 的 函數。

// 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
 }
 })
 })
 }
 }
}

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

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

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

優勢:

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

  • 如果動態路由參數多的話不適用。
  • 3.預渲染prerender-spa-plugin

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

    $ 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打包的一致。
     // 下面這句話非常重要!!!
     // 這個目錄只能有一級,如果目錄層次大于一級,在生成的時候不會有任何錯誤提示,在預渲染的時候只會卡著不動。
     staticDir: path.join(__dirname,'dist'),
     // 對應自己的路由文件,比如a有參數,就需要寫成 /a/param1。
     routes: ['/', '/product','/about'],
     // 這個很重要,如果沒有配置這段,也不會進行預編譯
     renderer: new Renderer({
     inject: {
     foo: 'bar'
     },
     headless: false,
     // 在 main.js 中 document.dispatchEvent(new Event('render-event')),兩者的事件名稱要對應上。
     renderAfterDocumentEvent: 'render-event'
     })
     }),
     ],
     };
     }
    }
    

    在main.js中添加:

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

    注意:router中必須設置 mode: “history” 。

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

    優勢:

  • 改動小,引入個插件就完事;
  • 不足:

  • 無法使用動態路由;
  • 只適用少量頁面的項目,頁面多達幾百個的情況下,打包會很很很慢;
  • 4.使用Phantomjs針對爬蟲做處理

    Phantomjs是一個基于webkit內核的無頭瀏覽器,即沒有UI界面,即它就是一個瀏覽器,只是其內的點擊、翻頁等人為相關操作需要程序設計實現。

    雖然“PhantomJS宣布終止開發”,但是已經滿足對Vue的SEO處理。

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

     

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

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

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

    如果見到在命令行里出現了一推html,那恭喜你,你已經征服PhantomJS啦。

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

    部署上線

    線上要安裝 node pm2 phantomjs ,nginx相關配置:

    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;
     }
     }
    }
    
    

    優勢:

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

  • 部署需要node服務器支持;
  • 爬蟲訪問比網頁訪問要慢一些,因為定時要定時資源加載完成才返回給爬蟲;
  • 如果被惡意模擬百度爬蟲大量循環爬取,會造成服務器負載方面問題,解決方法是判斷訪問的IP,是否是百度官方爬蟲的IP。
  • 總結

    如果構建大型網站,如商城類,別猶豫,直接上SSR服務器渲染,當然也有相應的坑等你,社區較成熟,英文好點,一切問題都迎刃而解。

    如果只是個人博客、公司官網這類,其余三種都可以。

    如果對已用SPA開發完成的項目進行SEO優化,而且支持node服務器,請使用 Phantomjs 。

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

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

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

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

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产九区 | 国产青草视频在线观看 | 国产一级视频 | 一级a毛片免费观看久久精品 | 日韩欧美一区二区三区在线视频 | 欧美亚洲国产日韩一区二区三区 | 欧美亚洲国产精品第一页 | 久久不射电影网 | 久久久久88色偷偷免费 | 亚洲欧美精品成人久久91 | 最新中文字幕第一页 | 亚洲综合一区二区精品久久 | 夜夜操网| 亚洲欧美日韩成人 | 欧美日韩亚洲区久久综合 | 国产在线看不卡一区二区 | 午夜日韩精品 | 久久久影院亚洲精品 | 九九啪| 欧美激情国产日韩精品一区18 | 亚洲最新视频在线观看 | 视频二区 素人 欧美 日韩 | 自拍偷自拍亚洲精品被多人伦好爽 | 日韩 欧美 亚洲 | 欧美日本一区二区三区 | 91精品一区二区 | 欧美在线免费观看视频 | 久久综合影院 | 国产一区二区不卡免费观在线 | 91在线精品亚洲一区二区 | 日本一道在线 | 国产国语高清在线视频二区 | 全黄毛片 | 久久久国产高清 | 久久亚洲精品国产精品婷婷 | 五月天婷婷基地 | 国产一区二区日韩欧美在线 | 99久久国产综合精品麻豆 | 国内视频一区二区三区 | 国产精品资源网站在线观看 | 日韩一区二区三区在线播放 |