导航:首页 > 网站优化 > nodejsseo

nodejsseo

发布时间:2020-08-30 05:53:21

1、百度蜘蛛爬node.js做的网站,爬到的是解析过的网页还是js代码?

如果没有对蜘蛛ua进行判断跳转;用户看到的页面是什么,蜘蛛看到的页面就是什么;SEO是前端页面的优化,也就是服务器返回的HTML页面

2、react 号称可以服务端渲染 这个服务端一定要是 nodejs 写的么

1. 你的理解些许问题。你直接输出的 html 是没法和 react 的 js component 直接绑定的。应为 react 内部是 vdom 方式做对比然后改变页面的。你看见用 react 生成的 html 上面有很多的 id 没有。哪些都是用来定位和 js component 的关系的。你自己生成的肯定没有。所谓 server rendering ,就是在后端做这个事情。

2. 因为前端是 js 。所以后端也用 js 的话这个 component 是可以重用的。不然就只能在 py 里面跑个 v8.然后 renderToString 把 html 搞出来然后再拼进模版里。

3. 我没有用过 py 。但是按照 2 的思路应该是可以的。

ps>> 其实问题在于为啥你一定要做 server rendering. seo 的话现在的爬虫大部分都有处理 js 的能力。真不行就专为 seo 做个页面让他爬。没必要这么折腾。

3、学习angularjs 要先学习 nodejs 吗

下面简单的说下采用这个架构的优缺点吧!其实间接的也就是谈谈NodeJS和AngularJS的优缺点了。

NodeJS 优点:
1. 我们选择 NodeJS,是因为它简单,高性能,正好我们的服务端只提供RESTfull API,而且我们都很喜欢NodeJS,所以也就使用它了,当然如果选择其他技术也可以做的很好;

2. 至于数据库,和NodeJS完美结合的当然是Mongodb,数据格式都是完全匹配,而且Mongodb的性能也是很不错的,楼上有人对于 Mongodb 数据量大了有些疑问,我们现在的数据量已经很大了,表示暂时还没有遇到过瓶颈,但是Mongodb也很好的提供了数据库集群,我们随时都在为今后做准备;

NodeJS 缺点:
1. 遭遇很多人吐槽甚至放弃使用的肯定是异步回调,到处callback让人受不了,其实可以使用一些同步的Mole来弥补这个缺陷,如:async、 when,但是我们没有使用

2. 事务的支持不是特别好,正好这个功能对于我们产品来说不是很重要。

AngularJS的优点:

1. 我觉得是目前为止最好的前端MVC或者MVVM框架,基本上包含了所有我们需要的功能;

AngularJS的缺点:
1. 有人说SEO,的确这是一个缺点,这是所有前端MVC框架的缺点,但是也有解决方案,我们把外部需要SEO的页面都独立成一个站点了,这个独立的站点使用Express的服务端进行渲染的,而且这些页面也都是展示文字的,没有必要用到SPA;

2. 兼容性也是个缺点,我们目前对IE9及以下版本支持都不是很友好,甚至惨不忍睹,由于时间和精力有限,没法做很多兼容,但是我们相信,为了使用更好的产品,用户愿意为我们升级浏览器。

4、phantomjs不能实现seo优化吗

腾讯问卷所有动态内容,全部由Ajax接口提供。
众所周知,大部分的搜索引擎爬虫都不会执行JS,也就是说,如果页面内容由Ajax返回的话,搜索引擎是爬取不到部分内容的,也就无从做SEO了。
先来看看效果

去年一整年,搜索引擎收录都少得可怜。
更致命的是,被收录的页面,其搜索引擎里面显示的标题是最原始的html标题,权重如此高的地方,却被收录了一个没什么用的标题。
在去年年底完成实施了预渲染服务后,收录量蹭蹭蹭的起来了,并且收录的标题也都全部正常了。
而这所有的一切,除了Nginx接入层的配置是需要改动业务代码外,其他全部都是旁路机制。也就是说,自己做一套,可以给所有同类型业务共用,同时不会影响现有业务的任何代码任何流程。

PhantomJS来解围
Ajax无法做SEO这个问题,困扰了我很久,后来发现PhantomJS这东西能在服务端解析HTML,瞬间这个问题不再是问题。
PhantomJS is a headless WebKit scriptable with a JavaScript API. It has fast andnative support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.
准备一个PhantomJS任务脚本
这里我命名为spider.js。
通过PhantomJS命令直接执行即可在终端中看到渲染后的html结构

Shell

1

phantomjs spider.js 'http://wj.qq.com/'

命令服务化
什么意思呢,因为上面是一个命令,没法很好的响应搜索引擎爬虫的请求,估我们要把他服务化。
PhantomJS自带一个Web Server Mole,但总是不稳定,如前面文章所说时不时会假死。
我们就通过Node给他起一个简单的Web服务。
旁路服务
我们现在已经有了一个能跑预渲染的Web服务了,剩下就是要将搜索引擎爬虫的流量导入到这个预渲染的服务中,同时把结果再返回给搜索引擎爬虫。
我们使用Nginx这个接入层利器即可轻松解决这个问题。
这个栗子里面仅仅对百度爬虫做了处理,可以自行把爬虫都补完整。

5、学习vue.js,Node.JS 等技术不知道写什么东西

业务需求

最近公司要求开发web版的app,由于app是偏向内容方面,而且带了一个聊天模块,所以一般的多页开发不是很适合,而且主要是手机浏览,对加载速度或者用户体验来说都比较苛刻。调研了很多框架和模式,最后自己东拼西凑搞出来了这么一个玩意。

服务端

毫无疑问使用node,使用typescript可以有效的在编码同时查错,强类型语言写服务端毫无压力。
#app.ts 只贴重要代码 var webpack = require('webpack') var webpackDevMiddleware = require('webpack-dev-middleware') var WebpackConfig = require('./webpack.config') import * as index from "./routes/index"; import * as foo from "./routes/foo"; import * as bar from "./routes/bar"; var app = express(); //启动服务的时候 打包并监听客户端用到的文件,webpackDevMiddleware是开发模式,他会打包js在内存里面,你改了文件,它也会重新打包 app.use(webpackDevMiddleware(webpack(WebpackConfig), { publicPath: '/__build__/', stats: { colors: true } })); //一般的配置项 app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.set('view options', { layout: false }); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(methodOverride()); app.use(express.static(__dirname + '/public')); var env = process.env.NODE_ENV || 'development'; if (env === 'development') { app.use(errorHandler()); } //路由配置 app.get('/', index.index); app.get('/foo', foo.index); app.get('/bar', bar.index); app.listen(3000, function(){ console.log("Demo Express server listening on port %d in %s mode", 3000, app.settings.env); }); export var App = app;
服务端渲染页面
#index.ts import express = require("express") import vueServer = require("vue-server") //服务端渲染vue的插件 var Vue = new vueServer.renderer(); //创建一个服务端的vue export function index(req: express.Request, res: express.Response) { //创建一个组件 var vm = new Vue({ template: ` <p>This is index!</p> ` }); //等待html渲染完成,再返回给浏览器 vueServer.htmlReady是vue-server的自带事件 vm.$on('vueServer.htmlReady', function(html:string) { //这里用的是ejs模板 可以把需要用到的数据设置成window下的全局变量,方便客户端的js访问。 res.render('layout',{server_html:html,server_data:'window.cm_data = {name:"张三"}'}) }); }; #layout.ejs 访问这个SPA的所有url返回的都是这个页面 <meta>标签都可以动态设置,只要传参数进来就可以 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Vue Router Example</title> <style> .v-link-active { color: red; } </style> <script> //定义一些前端需要用到的全局属性,文章ID或用户信息什么的 //index.ts中传过来的是 window.cm_data = {name:"张三"} //前端就能访问到了 <%-server_data%> </script> </head> <body> //这里的id是前端需要用到的一个标识 <div id="app"> <h1>Hello App!</h1> <p> <a v-link="{ path: '/foo' }">Go to Foo</a> <a v-link="{ path: '/bar' }">Go to Bar</a> </p> //router-view是客户端vue-router需要解析的dom //server_html是根据访问url地址生成的html,是做SEO的重点,不加载下面的app.js也可以看到内容 <router-view> <%-server_html%> </router-view> </div> //webpack打包好的js,主要是路由配置 <script src="/__build__/app.js"></script> </body> </html>
客户端
#app.js 这个是/__build__/app.js,可以用es6编写,webpack会转换的 import Vue from './vue.min' //客户端的vue.js import VueRouter from './vue-router.min' //vue的路由插件,配合webpack可以很简单实现懒加载 //懒加载路由 只有访问这个路由才会加载js import Foo from 'bundle?lazy!../../components/foo' //配合webpack的bundle-loader,轻松实现懒加载 import Bar from 'bundle?lazy!../../components/bar' import Index from 'bundle?lazy!../../components/index' var App = Vue.extend({}) Vue.use(VueRouter) var router = new VueRouter({ //这里要好好说一下,一定要设置html5模式,不然前后端URL不统一会发生问题 //比如访问 http://localhost:3000/ 服务端定义是访问index.ts这个路由文件 //如果不是html5模式的话,经过客户端js运行之后会变成http://localhost:3000/#!/ //在比如直接浏览器输入 http://localhost:3000/foo 服务端定义是访问.ts这个路由文件 //如果不是html5模式的话,经过客户端js运行之后会变成 http://localhost:3000/foo/#!/ //设置了html5模式后,加载完js后不会加上#!这2个类似锚点的字符,实现前后端路由统一如果用户刷新浏览器的话,服务端也能渲染出相应的页面。 history: true, //html5模式 去掉锚点 saveScrollPosition: true //记住页面的滚动位置 html5模式适用 }) //定义路由,要和服务端路由路径定义的一样 router.map({ '/' : { component: Index //前端路由定义, }, '/foo': { component: Foo }, '/bar': { component: Bar } }) //启动APP router.start(App, '#app')
需要完善的地方

前后端统一模板,已经找到方法了把html分离出来,node端用fs.readFileSync方法获取,客户端用webpack的raw-loader获取html内容

不放源码都是瞎扯。

6、做SEO如何让文章快速被收录

网站发布的每一篇文章都可以被搜索引擎秒收录,相信这是每一个SEO人员的追求。笔者大家介绍的是如何让百度快速收录网站及文章。希望对大家有所帮助。

一、链接提交

如果是新站,需要现在百度、360和搜狗平台上做站点的提交与验证。

二、原创高质量文章

原创高质量文章是网站的核心。当然可以适当转载与伪原创其他同类型的网站。

三、优质外链

大量优质的外链资源会给网站带来权重的同时,也会吸引大量搜索引擎蜘蛛的光临。另外百度分享按钮也可以吸引蜘蛛很快的光临网站。

四、robots文件禁止收录无效、重复页面

网站很多重复内容,会降低搜索引擎的友好度,试想,如果网站的收录只有那些无用的用户注册页、公司简介等,这样的网站是不会给予权重的。又如,小小课堂网曾经因为WordPress结构问题,导致分页页面被收录,这也会对网站造成不好的影响。

五、定期检查死链

如果搜索引擎的蜘蛛在爬行过程中,遇到各种死链,那一定是非常不友好。所以,定期检测死链,让蜘蛛在我们的网站更顺畅地爬行,才能更快更多收录网站的文章。

六、内链优化

网站内链优化就像在小小课堂网的本篇内容,会融入很多以往的教程,可以让以往的文章被蜘蛛爬行,获得更多文章被收录的机会。

七、定期定量发布文章

网站如果可以做到日更新,一般就可以了。当然如果每天更新很多篇文章也是可以的。切记不要大量采集,网站重复内容过多,可能会引起搜索引擎的降权。

关于是否需要每天在同一时间发文章,从搜索引擎蜘蛛友好度来讲,固定时间发文章,是友好的表现。如果不定期发文章,蜘蛛会不知道您的网站在一天的哪个时间段发文章。

八、网站优秀的结构

在网站大面积使用flash、图片和视频等,一般都不能算是优秀的网站结构,不良的网站结构可能导致蜘蛛不能顺利在网站爬行,是一种对搜索引擎不又好的表现。

网站的URL设计尽量精而短,且最好富有意义,链接中能带有关键词就最好了。

九、内容的时效性

网站内容要有一定的时效性,不能总发一些过时的内容。如站在Windows10的时代,网站却一直在发一些Windows 98的知识。一定要跟上时代的脚步。

十、坚持

就算以上九条您都做的很好,最后一条做不好,前面做的工作全部都会是浪费时间。SEO本来就是一件长期坚持才会出明显效果的事情。

7、nodejs开发的socket聊天室在性能优化方面有哪些可以做的

也就是说 步骤1-步骤2是一个流程,计时器是另外一个流程;
这里提供两种方法去判断步骤1是否完成:
1.在计时器里,每倒数1次就判断是否已经是0(或步骤1是否完成).若完成,则执行步骤2;
2.单独将每个步骤写成方法,封装和该方法返回值与参数列表均相同的委托,设计一个总开关.按下总开关的时候执行步骤1对应的委托,在步骤1的回调函数里执行步骤2,以此类推..而计时器单独写一个计数类,包含开始、暂停和继续的方法,在每个步骤里去实例计数类的对象执行

8、如何利用node解决seo问题

<

9、node 在高并发下的性能优化,各位有哪些好的建议吗

 有高并发优势。
Node.js优点:
1、采用事件驱动、异步编程,为网络服务而设计。其实Javascript的匿名函数和闭包特性非常适合事件驱动、异步编程。
2、Node.js非阻塞模式的IO处理给Node.js带来在相对低系统资源耗用下的高性能与出众的负载能力,非常适合用作依赖其它IO资源的中间层服务。
3、Node.js轻量高效,可以认为是数据密集型分布式部署环境下的实时应用系统的完美解决方案。
4. 有高并发优势。

10、网站优化:所有的js代码放到同一个js文件中好,还是不同的页面根据需要创建不同的js文件好?

网站优化:一个是压缩合并css,js,一个是合并图片和小图标来达到减少请求量的目的;所以当然是所有的js代码放到同一个js文件中好;需要注意的是:
1、只要命名不冲突放一个文件里面完全没问题,初始化代码用一个$(function(){...})包裹着就可以了;
2、不同的页面执行不同的逻辑代码块完全不冲突,关键是知道自己在做什么;
具体做法:
1)比如a.css,b.css,c.css,把里面的内容都复制到一个css中,main.css这样手动就可以合并
压缩的话,网上都有工具来压缩,直接百度 css压缩 就可以了;
2)js大部分是可以直接和css一样手动合并,然后压缩的(压缩方法,和压缩css一样,百度去),不过要注意复制到文件时的顺序,和代码里面的一些规范,不要把依赖什么的搞混了;如果js文件非常多手动处理很麻烦的时候,可能需要借助工具来实现,你可以试着用前端的一些加载器(require,seajs)来做一些优化,达到按需加载的目的,推荐用seajs试试;自动压缩的话,可以用nodejs的grunt来压缩,很好用。

与nodejsseo相关的知识