找回密码
 注册账号

QQ登录

只需一步,快速开始

《泰拉瑞亚下载-1.4.2.3版》 泰拉瑞亚服务器 - MOD模组下载

入驻泰拉战网 新手指引 - 升级 - 师徒

泰拉瑞亚合成表 泰拉卡牌 - 泰拉江湖 - 泰拉刺客

联系泰拉开发组👈进入 积分市场 - 房产交易 - 水晶获取

查看: 3468|回复: 0

vue项目不被百度收录怎么办?

[复制链接]

42

主题

22

回帖

41

广播

年轻力壮

积分
39
泰拉
62
水晶
0
铜钥匙
0
银钥匙
0
金钥匙
0

【江湖新秀】【我是小土豪】【宝剑回鞘】【营养快线】【速递达人】

QQ
发表于 2022-7-30 11:10:10 | 显示全部楼层 |阅读模式
技术交流
文章类型: 实用技巧
涉及领域: VUE 
内容难度: 困难
项目上线了,突然收到说项目不利于百度蜘蛛爬取网页??半路接手项目当时就知道会有这么一个问题,预料之中、预料之中...
采用前后端分离模式,spa单页面应用,打包之后只有一个index.html页面,而且里面什么都没有不利于百度爬取。
那么解决呗。方案有如下:
1、vue.js官网提供SSR服务端渲染(详情见官网),由于项目已经上线使用,如果采用这种模式基本得重构项目,成本高等其他因素。
2、prerender-spa-plugin预渲染,相对较简单安装prerender-spa-plugin直接使用,打包后会生成对应自己的静态文件,可以提高网页访问速度。可以设置mate添加关键字、描述、标题,项目较大的话则不太友好。
3、使用Phantomjs针对爬虫做处理,Phantomjs是一个基于webkit内核的无头浏览器,没有UI界面,它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现。
这种解决方案其实是一种旁路机制,原理就是通过Nginx配置, 判断访问的来源UA是否是爬虫访问,如果是则将搜索引擎的爬虫请求转发到一个node server,再通过PhantomJS来解析完整的HTML,返回给爬虫。
线上要安装 node 、 pm2 、 phantomjs ,nginx相关配置。
部署需要node服务器支持;
爬虫访问比网页访问要慢一些,因为定时要定时资源加载完成才返回给爬虫;
如果被恶意模拟百度爬虫大量循环爬取,会造成服务器负载方面问题,解决方法是判断访问的IP,是否是百度官方爬虫的IP。
综合项目情况采用了prerender-spa-plugin预渲染,改动较小安装直接使用(这里只做了首页的优化)
安装prerender-spa-plugin:
npm install prerender-spa-plugin --save
安装这个网络要稍微稳定好点,可能会安装失败,别灰心继续加油!
npm cache clean --force  // 如果失败清除缓存 再来
装好之后在webpack.prod.conf.js或者vue.config.js中增加配置:
const PrerenderSPAPlugin = require('prerender-spa-plugin');const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;configureWebpack: config => {   if (process.env.NODE_ENV !== 'production') return;   return {          plugins: [                new PrerenderSPAPlugin({                     staticDir: path.join(__dirname, './dist'),                    routes: ['/','/home'], // 需要预渲染的路由                     renderer: new Renderer({                         inject: {                            foo: "bar"                         },                         headless: false,                         renderAfterDocumentEvent: 'render-event'                      })               })          ]        }    }
staticDir里面的dist是输出文件夹名字
routes配置的是你想实现预渲染的路由(可以多个 根据需要)
renderer预渲染提供了三种时机实现,renderAfterDocumentEvent、renderAfterTime、renderAfterElementExists
然后再main.js中修改
new Vue({ router, store, render: function (h) {      return h(App) }, mounted () {//新增        document.dispatchEvent(new Event('render-event'))  }}).$mount('#app');
最后打包出来的文件会根据所配置的路由生成对应的独立文件夹。
注意路由需要采用mode: 'history'模式,不然不能生效。
总之项目开发初期就应该考虑到各种因素而来确定使用什么技术,是否有解决方案。

获得 大天使卡 一张

卡片说明:Demonづ锐少 遇到 [非酋妖妖灵] 被赠与 1 金钥匙.

卡片效果:获得 1 金钥匙

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|友链申请|Archiver|手机版|小黑屋|游芯沙盒 ( 陕ICP备11006283号-1 )

GMT+8, 2024-11-21 14:24 , Processed in 0.108949 second(s), 38 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表