动态网站SEO解决方案履历汇总

动态网站 SEO处理方案汇总

先撸撸几个观点:

  • SPA:单页面运用,基于vue框架开辟的项目许多都属于单页面运用。
  • SSR :server side rendering, 效劳端衬着。
  • SEO:搜索引擎优化,指经由过程对网站举行站内优化、修复和站外优化,从而进步网站的网站关键词排名以及公司产物的曝光度。
  • Prerender:预衬着,Prerender.io是基于Node.js的顺序,它能够让你的JavaScript网站支撑搜索引擎,交际媒体,而且它兼容一切的JavaScript框架和库。它采纳PhantomJS衬着JavaScript的网页然后呈现为HTML。另外,我们能够完成的prerender效劳层来缓存访问过的页面,这将大大进步机能。(省事儿)
  • Nuxt:是一个基于 Vue.js 的通用运用框架,预设了应用Vue.js开辟效劳端衬着的运用所须要的种种设置,能够为基于 Vue.js 的运用供应天生对应的静态站点的功用。
  • Next:对标的是 React的通用运用框架,预设了React.js 开辟效劳端衬着的运用所须要的种种设置。

手艺选型

  • 连系现有项目框架选用,时候本钱,进修本钱举行适宜的评价
  • 从本身才能动身 假如触及太多的效劳端处置惩罚的东西 能够斟酌运维层举行处置惩罚采纳prerender
  • 营业运用场景,营业线比较庞杂工期较短的时候 发起本身举行PrerenderIo 的布置,运用本身的效劳器举行对爬虫页面举行缓存。

三个手艺选型好坏对照

  • Next => React 文档大部分是英文的 设置项简朴易上手,布置轻易,大型的官网项目比较合适,用户交互庞杂的时候采纳Next 举行项目开辟。
  • Nuxt => Vue 基础是Next的翻版,语法也是Next语法,大坑的处所是在 大多数稳固的项目是1.4.2的版本 现有2.X的版本 基础完全不兼容老版本。

    • 衬着效力比较低,营业庞杂的时候 编译速率非常慢。非常慢
    • 版本跨度大的合适兼容性低。
  • PhantomJS 道理就是经由过程Nginx设置,将搜索引擎的爬虫要求转发到一个node server,再经由过程PhantomJS来剖析完全的HTML。

    • 能够做为一整套通用效劳,一切的SPA页面基础不须要二次重构。
    • 瑕玷是受收集波动限制性比较强,
    • 合适庞杂项目短时候举行收录处置惩罚
    • 须要收集层的权限 须要和运维举行沟通。

团体照样连系当前需求的场景 和本身的前提来举行挑选,短时候高效完成需求。

相干收录文章:

Nuxt

Next

Prerender + vuejs SEO最好实践 百度爬虫 + 谷歌收录 亲测胜利
Prerender.io

前端衬着与 SEO 优化踩坑 小记

用PhantomJS来给AJAX站点做SEO优化

一个PhantomJS使命剧本

起首,我们须要一个叫spider.js的文件,用于phantomjs 剖析网站。

"use strict";

// 单个资本等待时候,防备资本加载后还须要加载其他资本
var resourceWait = 500;
var resourceWaitTimer;
// 最大等待时候
var maxWait = 5000;
var maxWaitTimer;
// 资本计数
var resourceCount = 0;
// PhantomJS WebPage模块
var page = require('webpage').create();
// NodeJS 体系模块
var system = require('system');
// 从CLI中猎取第二个参数为目的URL
var url = system.args[1];
// 设置PhantomJS视窗大小
page.viewportSize = {
    width: 1280,
    height: 1014
};
// 猎取镜像
var capture = function(errCode){
    // 外部经由过程stdout猎取页面内容
    console.log(page.content);
    // 消灭计时器
    clearTimeout(maxWaitTimer);
    // 使命完成,一般退出
    phantom.exit(errCode);
};
// 资本要求并计数
page.onResourceRequested = function(req){
    resourceCount++;
    clearTimeout(resourceWaitTimer);
};
// 资本加载终了
page.onResourceReceived = function (res) {
    // chunk情势的HTTP回包,会屡次触发resourceReceived事宜,须要推断资本是不是已end
    if (res.stage !== 'end'){
        return;
    }
    resourceCount--;
    if (resourceCount === 0){
        // 当页面中悉数资本都加载终了后,截取当前衬着出来的html
        // 因为onResourceReceived在资本加载终了就立即被调用了,我们须要给一些时候让JS跑剖析使命
        // 这里默许预留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 {
        // 当改页面的初始html返回胜利后,开启定时器
        // 当抵达最大时候(默许5秒)的时候,截取那一时候衬着出来的html
        maxWaitTimer = setTimeout(function(){
            capture(2);
        }, maxWait);
    }
});

举行测试=> phantomjs spider.js 'https://www.baidu.com/'

敕令效劳化

相应搜索引擎爬虫的要求,我们须要将此敕令效劳化,经由过程node起个简朴的web效劳

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)
    // 预衬着后的页面字符串容器
    var content = '';
    // 开启一个phantomjs子历程
    var phantom = child_process.spawn('phantomjs', ['spider.js', url]);
    
    // 设置stdout字符编码
    phantom.stdout.setEncoding('utf8');
    // 监听phantomjs的stdout,并拼接起来
    phantom.stdout.on('data', function(data){
        content += data.toString();
    });
    // 监听子历程退出事宜
    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,此时我们已有了一个预衬着的web效劳啦,接下来的事情就是将搜索引擎爬虫的要求转发到这个web效劳,最终将衬着效果返回给爬虫。
为了防备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;
  # 当UA内里含有Baiduspider的时候,同时能够加其他的头信息举行转发 流量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…

    原文作者:师宁丶
    原文地址: https://segmentfault.com/a/1190000019237462
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞