成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

動態(tài)網(wǎng)站SEO解決方案經(jīng)驗匯總

Yu_Huang / 3146人閱讀

摘要:動態(tài)網(wǎng)站解決方案匯總先擼擼幾個概念單頁面應(yīng)用,基于框架開發(fā)的項目很多都屬于單頁面應(yīng)用。搜索引擎優(yōu)化,指通過對網(wǎng)站進行站內(nèi)優(yōu)化修復(fù)和站外優(yōu)化,從而提高網(wǎng)站的網(wǎng)站關(guān)鍵詞排名以及公司產(chǎn)品的曝光度。為了防止進程掛掉,可以使用來啟動,。

動態(tài)網(wǎng)站 SEO解決方案匯總

先擼擼幾個概念:

SPA:單頁面應(yīng)用,基于vue框架開發(fā)的項目很多都屬于單頁面應(yīng)用。

SSR :server side rendering, 服務(wù)端渲染。

SEO:搜索引擎優(yōu)化,指通過對網(wǎng)站進行站內(nèi)優(yōu)化、修復(fù)和站外優(yōu)化,從而提高網(wǎng)站的網(wǎng)站關(guān)鍵詞排名以及公司產(chǎn)品的曝光度。

Prerender:預(yù)渲染,Prerender.io是基于Node.js的程序,它可以讓你的JavaScript網(wǎng)站支持搜索引擎,社交媒體,并且它兼容所有的JavaScript框架和庫。它采用PhantomJS渲染JavaScript的網(wǎng)頁然后呈現(xiàn)為HTML。此外,我們可以實現(xiàn)的prerender服務(wù)層來緩存訪問過的頁面,這將大大提高性能。(省事兒)

Nuxt:是一個基于 Vue.js 的通用應(yīng)用框架,預(yù)設(shè)了利用Vue.js開發(fā)服務(wù)端渲染的應(yīng)用所需要的各種配置,可以為基于 Vue.js 的應(yīng)用提供生成對應(yīng)的靜態(tài)站點的功能。

Next:對標的是 React的通用應(yīng)用框架,預(yù)設(shè)了React.js 開發(fā)服務(wù)端渲染的應(yīng)用所需要的各種配置。

技術(shù)選型

結(jié)合現(xiàn)有項目框架選用,時間成本,學(xué)習(xí)成本進行合適的評估

從自身能力出發(fā) 如果涉及太多的服務(wù)端處理的東西 可以考慮運維層進行處理采用prerender

業(yè)務(wù)應(yīng)用場景,業(yè)務(wù)線比較復(fù)雜工期較短的時候 建議自己進行PrerenderIo 的部署,使用自己的服務(wù)器進行對爬蟲頁面進行緩存。

三個技術(shù)選型優(yōu)劣對比

Next => React 文檔大部分是英文的 配置項簡單易上手,部署方便,大型的官網(wǎng)項目比較適合,用戶交互復(fù)雜的時候采用Next 進行項目開發(fā)。

Nuxt => Vue 基本是Next的翻版,語法也是Next語法,大坑的地方是在 大多數(shù)穩(wěn)定的項目是1.4.2的版本 現(xiàn)有2.X的版本 基本完全不兼容老版本。

渲染效率比較低,業(yè)務(wù)復(fù)雜的時候 編譯速度十分慢。十分慢

版本跨度大的適合兼容性低。

PhantomJS 原理就是通過Nginx配置,將搜索引擎的爬蟲請求轉(zhuǎn)發(fā)到一個node server,再通過PhantomJS來解析完整的HTML。

可以做為一整套通用服務(wù),所有的SPA頁面基本不需要二次重構(gòu)。

缺點是受網(wǎng)絡(luò)波動制約性比較強,

適合復(fù)雜項目短時間進行收錄處理

需要網(wǎng)絡(luò)層的權(quán)限 需要和運維進行溝通。

整體還是結(jié)合當(dāng)前需求的場景 和自身的條件來進行選擇,短時間高效完成需求。

相關(guān)收錄文章:

Nuxt
Next
Prerender + vuejs SEO最佳實踐 百度爬蟲 + 谷歌收錄 親測成功Prerender.io
前端渲染與 SEO 優(yōu)化踩坑 小記
用PhantomJS來給AJAX站點做SEO優(yōu)化
一個PhantomJS任務(wù)腳本

首先,我們需要一個叫spider.js的文件,用于phantomjs 解析網(wǎng)站。

"use strict";

// 單個資源等待時間,避免資源加載后還需要加載其他資源
var resourceWait = 500;
var resourceWaitTimer;
// 最大等待時間
var maxWait = 5000;
var maxWaitTimer;
// 資源計數(shù)
var resourceCount = 0;
// PhantomJS WebPage模塊
var page = require("webpage").create();
// NodeJS 系統(tǒng)模塊
var system = require("system");
// 從CLI中獲取第二個參數(shù)為目標URL
var url = system.args[1];
// 設(shè)置PhantomJS視窗大小
page.viewportSize = {
    width: 1280,
    height: 1014
};
// 獲取鏡像
var capture = function(errCode){
    // 外部通過stdout獲取頁面內(nèi)容
    console.log(page.content);
    // 清除計時器
    clearTimeout(maxWaitTimer);
    // 任務(wù)完成,正常退出
    phantom.exit(errCode);
};
// 資源請求并計數(shù)
page.onResourceRequested = function(req){
    resourceCount++;
    clearTimeout(resourceWaitTimer);
};
// 資源加載完畢
page.onResourceReceived = function (res) {
    // chunk模式的HTTP回包,會多次觸發(fā)resourceReceived事件,需要判斷資源是否已經(jīng)end
    if (res.stage !== "end"){
        return;
    }
    resourceCount--;
    if (resourceCount === 0){
        // 當(dāng)頁面中全部資源都加載完畢后,截取當(dāng)前渲染出來的html
        // 由于onResourceReceived在資源加載完畢就立即被調(diào)用了,我們需要給一些時間讓JS跑解析任務(wù)
        // 這里默認預(yù)留500毫秒
        resourceWaitTimer = setTimeout(capture, resourceWait);
    }
};
// 資源加載超時
page.onResourceTimeout = function(req){
    resouceCount--;
};
// 資源加載失敗
page.onResourceError = function(err){
    resourceCount--;
};
// 打開頁面
page.open(url, function (status) {
    if (status !== "success") {
        phantom.exit(1);
    } else {
        // 當(dāng)改頁面的初始html返回成功后,開啟定時器
        // 當(dāng)?shù)竭_最大時間(默認5秒)的時候,截取那一時刻渲染出來的html
        maxWaitTimer = setTimeout(function(){
            capture(2);
        }, maxWait);
    }
});

進行測試=> phantomjs spider.js "https://www.baidu.com/"

命令服務(wù)化

響應(yīng)搜索引擎爬蟲的請求,我們需要將此命令服務(wù)化,通過node起個簡單的web服務(wù)

var express = require("express");
var app = express();
// 引入NodeJS的子進程模塊
var child_process = require("child_process");
app.get("/", function(req, res){
    // 完整URL
    var url = req.protocol + "://"+ req.hostname + req.originalUrl;
    console.log(req,req.hostname)
    // 預(yù)渲染后的頁面字符串容器
    var content = "";
    // 開啟一個phantomjs子進程
    var phantom = child_process.spawn("phantomjs", ["spider.js", url]);
    
    // 設(shè)置stdout字符編碼
    phantom.stdout.setEncoding("utf8");
    // 監(jiān)聽phantomjs的stdout,并拼接起來
    phantom.stdout.on("data", function(data){
        content += data.toString();
    });
    // 監(jiān)聽子進程退出事件
    phantom.on("exit", function(code){
        switch (code){
            case 1:
                console.log("加載失敗");
                res.send("加載失敗");
                break;
            case 2:
                console.log("加載超時: "+ url);
                res.send(content);
                break;
            default:
                res.send(content);
                break;
        }
    });
    
});
app.listen(3002)

運行node server.js,此時我們已經(jīng)有了一個預(yù)渲染的web服務(wù)啦,接下來的工作便是將搜索引擎爬蟲的請求轉(zhuǎn)發(fā)到這個web服務(wù),最終將渲染結(jié)果返回給爬蟲。
為了防止node進程掛掉,可以使用nohup來啟動,nohup node server.js &。
通過Nginx配置,我們可以輕松的解決這個問題。

# 定義一個Nginx的upstream為spider_server
upstream spider_server {
  server localhost:3000;
}
# 指定一個范圍,默認 / 表示全部請求
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;
  # 當(dāng)UA里面含有Baiduspider的時候,同時可以加其他的頭信息進行轉(zhuǎn)發(fā) 流量Nginx以反向代理的形式,將流量傳遞給spider_server
  if ($http_user_agent ~* "Baiduspider") {
    proxy_pass  http://spider_server;
  }
}
參考鏈接:
https://www.mxgw.info/t/phant...
http://imweb.io/topic/560b402...
https://icewing.cc/linux-inst...
https://www.jianshu.com/p/2bb...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40417.html

相關(guān)文章

  • 動態(tài)網(wǎng)站SEO解決方案經(jīng)驗匯總

    摘要:動態(tài)網(wǎng)站解決方案匯總先擼擼幾個概念單頁面應(yīng)用,基于框架開發(fā)的項目很多都屬于單頁面應(yīng)用。搜索引擎優(yōu)化,指通過對網(wǎng)站進行站內(nèi)優(yōu)化修復(fù)和站外優(yōu)化,從而提高網(wǎng)站的網(wǎng)站關(guān)鍵詞排名以及公司產(chǎn)品的曝光度。為了防止進程掛掉,可以使用來啟動,。 動態(tài)網(wǎng)站 SEO解決方案匯總 先擼擼幾個概念: SPA:單頁面應(yīng)用,基于vue框架開發(fā)的項目很多都屬于單頁面應(yīng)用。 SSR :server side rend...

    UsherChen 評論0 收藏0
  • 收集整理適用博客建站免費開源Wordpress主題-簡約好看的WP主題

    摘要:最重要的就是找一個適合自己的主題了。事實上,免費主題也非常多,而且很多的免費主題在功能上和界面美觀上已經(jīng)大大超過了付費的主題。加上這些主題都是開源的,基本上可以在上找得到源碼,安全性是沒有問題,主題的作者也在不斷更新當(dāng)中。WordPress最重要的就是找一個適合自己的主題了。好一點的WordPress主題基本上都是要收費的,而且價格還不便宜,這導(dǎo)致了不少的新手朋友們很為難。而有時我們僅僅根據(jù)...

    番茄西紅柿 評論0 收藏2637
  • 個人博客全新UI:我心中你最美

    摘要:那個月就是對著和的文檔寫出來了網(wǎng)站的前后端,也是第一次買服務(wù)器備案網(wǎng)站做反向代理讀文檔學(xué)做,懷念那些時光,讓現(xiàn)在的網(wǎng)站有了基礎(chǔ)。因此,管理系統(tǒng)聽歌臺被抽離成了單獨的應(yīng)用,后臺利用做反向代理,用二級域名記性訪問。 不知道你是否也有想過完全用自己的代碼實現(xiàn)自己的個人博客?定制專屬 UI、定制專屬邏輯、在信息爆炸的時代真正地沉淀下屬于自己的東西。我也曾經(jīng)歷了同樣的糾結(jié),最終下定決心做了自己的...

    oliverhuang 評論0 收藏0
  • 前端渲染與SEO優(yōu)化踩坑小記

    摘要:前言在網(wǎng)站頁面后端渲染的時代,開發(fā)者只需要按照規(guī)范制作搜索引擎友好的頁面便可以快速讓搜索引擎收錄自己網(wǎng)站的各個頁面。 前言 在網(wǎng)站頁面后端渲染的時代,開發(fā)者只需要按照規(guī)范制作搜索引擎友好的頁面便可以快速讓搜索引擎收錄自己網(wǎng)站的各個頁面。 隨著前后端技術(shù)的更新,越來越多的前端框架進入開發(fā)者們的視野,網(wǎng)站的前后分離架構(gòu)越來越得到開發(fā)者們的喜愛與認可。 后端只提供數(shù)據(jù)接口、業(yè)務(wù)邏輯與持久化服...

    wums 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<