spa应用seo优化方案(arm服务器)

news/2024/5/9 8:30:26/文章来源:https://blog.csdn.net/cpa0701/article/details/108498486

最近公司需要对网页进行seo优化,奈何项目为vue的spa应用,没那么方便改造,所以记录一下优化经历

目录

      • 一、非SSR项目进行seo优化有以下五种方案:
      • 二、文件编写
      • 三、arm环境中nodejs环境搭建
      • 四、arm环境下安装谷歌或火狐浏览器
      • 五、nginx配置
      • 六、用pm2管理nodejs服务
      • 七、专门针对seo生成网页

一、非SSR项目进行seo优化有以下五种方案:

  1. ssr服务端渲染:项目所使用的的微前端框架需要使用window对象,无法实现

  2. 使用puppeteer,slimerjs搭建nodejs服务,通过nginx判断请求头是否为爬虫,是则指向通过puppeteer拉取html并返回html的地址,否则指向正常页面
    在这里插入图片描述

  3. 通过php或jsp开发简易网站,只包含需要进行seo优化的内容的,通过nginx判断请求头是否为爬虫,是则指向seo页面,否则指向正常页面

  4. 预渲染,只能生成静态文件,对于有动态加载数据的页面不支持,不采用

  5. nuxt,和ssr方案一样,不适合
    所以将采用puppeteer这种方案

二、文件编写

ssr文件:

const puppeteer = require('puppeteer');
const Cacheman = require('cacheman');
const md5 = require('md5');
let browserWSEndpoint = null;
const FilecCache = new Cacheman('htmls', {// 缓存3个小时ttl: 60 * 60 * 3,engine: 'file',
});async function ssr (url) {let browser = null;let urlMd5 = md5(url);// 是否命中缓存var hitByCache = await FilecCache.get(urlMd5);if (hitByCache) {console.log(hitByCache)return hitByCache;}if (browserWSEndpoint) {try {browser = await puppeteer.connect({browserWSEndpoint});} catch (e) {browserWSEndpoint = null;browser = null;}}if (!browserWSEndpoint) {browser = await puppeteer.launch({headless: true,ignoreHTTPSErrors: true,args: [// Required for Docker version of Puppeteer'--no-sandbox','--disable-setuid-sandbox',]});browserWSEndpoint = await browser.wsEndpoint();}const start = Date.now();const page = await browser.newPage();// 1. 监听网络请求await page.setRequestInterception(true);page.on('request', req => {// 2. 忽略不必要的请求,如图片,视频样式等等const whitelist = ['document', 'script', 'xhr', 'fetch'];if (!whitelist.includes(req.resourceType())) {return req.abort();}// 3. 其它请求正常继续req.continue();});try {// networkidle0 等待直到500ms内没有请求了await page.goto(url, {waitUntil: 'networkidle0'});} catch (err) {console.error(err);throw new Error('page.goto/waitForSelector timed out.');}const html = await page.content(); // 获取HTML结构// 写入缓存await FilecCache.set(urlMd5, html.results);await browser.close();const ttRenderMs = Date.now() - start;console.info(`Headless rendered page in: ${ttRenderMs}ms`);return {html, ttRenderMs};
}module.exports = {ssr}

server.js文件:

var express = require('express');
var {createProxyMiddleware} = require('http-proxy-middleware');
var app = express();
var server = require('http').createServer(app);
var history = require('connect-history-api-fallback');
var {ssr} = require('./ssr.js');
var listenPort = 3000;
// const proxy = {
//     '/static/assets': {
//         target: 'https://www.ccyunchina.com',
//         changeOrigin: true
//     },
// };
//
// for (let key in proxy) {
//     app.use(key, createProxyMiddleware(proxy[key]));
// }
const staticFileMiddleware = express.static('dist');
app.use(function (req, res, next) {var UA = req.headers['user-agent'];var isStaticDir = false;// 判断是否是爬虫, 排除资源目录的请求if (UA && !isStaticDir) {// 生成本地访问链接var requestUrl = req.protocol + '://' + req.hostname + req.originalUrl;(async () => {try {var results = await ssr(requestUrl);res.send(results.html);} catch (e) {console.log('ssr failed', e);res.status(500).send('Server error');}})();return;}next();
});// 先
app.use(staticFileMiddleware);// 如果资源没命中会继续、经过history rewirte后
app.use(history({disableDotRule: true,verbose: true
}));// 再次处理
app.use(staticFileMiddleware);
server.listen(listenPort, function () {console.log('Spider app listening on port 3000!');
});

三、arm环境中nodejs环境搭建

  1. uname -a查看服务器是否是64位的
  2. 64位的安装v8版本,32位的安装v7版本
    在这里插入图片描述
    wget https://npm.taobao.org/mirrors/node/v14.9.0/node-v14.9.0-linux-arm64.tar.xz
  3. 下载下来后运行xz -d /usr/local/node-v14.10.0-linux-arm64.xztar -xvf /usr/local/node-v14.10.0-linux-arm64.tar进行解压和编译
  4. 修改 ~/.bashrc。在文末加入一句 export PATH=/usr/local/node-v14.10.0-linux-arm64/bin:$PATH改变环境变量或网上的文章是用软链接的方式,将bin文件的node、npm加入的原本的环境变量的文件夹里面去
  5. node -v测试一下

四、arm环境下安装谷歌或火狐浏览器

注意puppeteer是使用的谷歌内核,如果要使用火狐内核,需要改用puppeteer-firefox,参考链接

yum -y install firefox火狐安装
谷歌arm64版本可以参考网址下载(https://fedora.pkgs.org/32/fedora-aarch64/chromium-80.0.3987.163-1.fc32.aarch64.rpm.html)

五、nginx配置

设置map

map $http_user_agent $is_bot {default 0;~*bot 1;~*spider 1;'Yahoo! Slurp China' 1;'Mediapartners-Google' 1;'YisouSpider' 1;
}

修改location

location / {error_page 418 =200 @bots;if ($is_bot) {return 418;}add_header Cache-Control no-store;root dist/;index index.html;#proxy_pass   http://127.0.0.1:3000;try_files $uri $uri/ /index.html;
}
location @bots {rewrite ^/(.*) http://$server_name:3000 permanent;
}

这里自己的爬虫服务用nodejs启动的是3000端口

六、用pm2管理nodejs服务

pm2得到使用可以参考这边文章https://www.jianshu.com/p/e15fd72727fe

七、专门针对seo生成网页

可以使用beetle搭建一个简陋的网页,页面只返回需要给爬虫爬取的数据,不需要任何样式或逻辑,通过第五步设置的nginx转发在配置相同的路由即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_868683.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET网站版本自动更新程序及代码[转]

1、自动更新程序主要负责从服务器中获取相应的更新文件,并且把这些文件下载到本地,替换现有的文件。达到修复Bug,更新功能的目的。用户手工点击更新按钮启动更新程序。已测试。2、环境VS2008,采用C#.NET和ASP.NET实现。3、服务器&…

WebApi托管静态网站(Owin 自托管静态网站)

我们在使用WebApi对外提供简单Api的时候,有时候往往需要同步提供一些简单的静态页面给用户,例如OAuth认证服务,提供一个授权界面等。如果我们单独架设网站,将会导致调用我们自己的接口出现跨域访问,出现IE8及以下浏览器…

那些网站够安全吗?

近日, CSDN 社区网站数据库泄露 ,近 600 万用户真实账号密码外泄。该事件横扫整个中文互联网,并且随后又爆出 多玩游戏 800 万用户资料被泄露 ,另有传言人人网、开心网、天涯社区、世纪佳缘、百合网等社区都有可能成为黑客下一个目…

5个在线的网站测试和验证工具

网站上线前的测试和验证是非常重要的一个环节,验证的意思是检查网站的页面和其他数据是否符合标准规范,设计规范的网站在各种浏览器上表现会一致而且良好。 为了帮助你执行这些测试和验证,今天我们列表了5个在线的工具。 Pingdom Tools Ping…

使用GitHub建立个人网站

使用GitHub建立个人网站 1 Git简介 2 为什么使用Github Pages 3 创建Github Pages 3.1 安装git工具. 3.2 两种pages模式 3.3 创建步骤 3.4 常用命令 4 使用Jekyll搭建博客 4.1 什么是jekyll 4.2 jekyll本地环境搭建 4.3 jekyll目录结构 4.4 Jekyll-Bootstrap创建博客 4.5 Je…

cnzz统计网站

cnzz是由国际著名风险投资商IDG投资的网络技术服务公司,是中国互联网目前最有影响力 CNZZ网站首页的免费流量统计技术服务提供商,专注于为互联网各类站点提供专业、权威、独立的第三方数据统计分析。同时,CNZZ拥有全球领先的互联网数据采集、…

网站防止攻击

1、什么是XSS XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。XSS属于被动式的攻击&#…

如何防止你的网站被攻击?

避免网站被攻击,其实是可以提前预防的,那么要如何预防呢? 1、关闭不必要的端口和服务 2、安装杀毒软件或者是防火墙来抵御攻击。 3、定期修改账户密码,尽量设置的复杂些,不要使用弱密码。 4、日常维护的时候要注意&…

网站前端开发--css篇

Ⅰ 全局:global.css 全局样式为全站公用,为页面样式基础,页面中必须包含。 结构:layout.css 页面结构类型复杂,并且公用类型较多时使用。多用在首页级页面和产品类页面中。 私有:style.css 独立页面所使用的…

scrapy爬取途牛网站旅游数据

描述:采取了scrapy框架对途牛网旅游数据进行了爬取,刚开始练手,所以只爬了四个字段用作测试,分别是景点名称、景点位置、景点开放时间、景点描述,爬取结果存的是json格式。 部分数据: 部分代码&#xf…

网站数据统计分析之一:日志收集原理及其实现

网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析、百度统计 和 腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于javascript的。本文将简要分析这种数据收集的原理&#…

WordPress建站后必做的几项优化

欢迎大家访问我的个人博客网站:风挽青个人博客 1、修改上传文件大小限制 wordpress上传文件一般都有限制,通常为2M,在一些情况下会不够用,所以自然是提升它的上传文件限制大小。 找到php.ini文件,然后修改其中的几个…

实现基于LNMP的电子商务网站

一、环境准备 yum安装mariadb、 mariadb-mysql、php-fpm、Nginx 并开启服务 二、 1、下载开源的购物商城软件包,解压到/data/test文件夹下,可自定义 unzip 2、修改用户和属组为nobody chown nobody . chgrp -R nobody . 三、 1、修改Nginx配…

SEOmoz开放Open Site Explorer工具API

SEOmoz是SEO行业知名站点,上周SEOmoz推出了外链分析工具Open Site Explorer。今天很高兴告诉大家,Open Site Explorer开始免费开放API了。 英文过得去的可以看原文的介绍:Launching the SEOmoz Free API and Enough Power to Build Open Site…

商机无限!在政府门户网站升级改造中掘金

作者: 王凤霞 2007-10-31 内容导航: 政府网站升级改造高潮已经全... 第1页: 政府网站升级改造高潮已经全面到来 第2页: 政府门户网站升级改造中商机无限 第3页: 政府门户网站升级改造的新特点 第4页: …

超级鹰模拟登录古诗文网站

源码分享: 下面是超级鹰的源码,可以从他们的网站下载,我作了一点修改

网站出现403 Forbidden错误的原因以及怎么解决的方法

这几天刚接手一批新做的网站,在访问网站的时候,会时不时的出现403 Forbidden错误,浏览器会给出403 Forbidden错误提示,在打开Access Error中列出的URL之后, 出现以下错误: 403 Forbidden Access to this resource on t…

说说大型高并发高负载网站的系统架构(更新)

此文系转载,如需转载请保留出处:俊麟 Michael’s blog (http://www.toplee.com/blog/?p71) Trackback Url : http://www.toplee.com/blog/wp-trackback.php?p71 鄙人先后在CERNET做过拨号接入,在Yahoo&3721搞过搜索前端,在…

高并发高流量网站架构

Web2.0 的兴起,掀起了互联网新一轮的网络 创业大潮。以用户为导向的新网站建设概念,细分了网站功能和用户群,不仅成功的造就了一大批新生的网站,也极大的方便了上网的人们。但 Web2.0 以用户为导向的理念,使得新生的网…

一个厂商网站的SQL安全检测 (啊D、明小子)

鄙人今年20,七年前也就是我初一的时候钻研过一段时间的攻防技术,但是由于年纪尚小不懂代码而且以学业为重放弃了继续钻研。 前几天学校一学弟开群拉有兴趣的同学进入,我又想到了过去学到的那些东西,突然又有了感觉,不能…