如何使用Node.js服务从Backbone.js的应用内容搜索爬虫的搜索引擎优化(Using no

2019-07-31 14:42发布

无论是我的谷歌福失败我还是真的没有太多的人这样做呢。 如你所知,Backbone.js的有一个致命的弱点 - 它不能起到它呈现给网页爬虫的HTML如Googlebot的,因为它们不运行JavaScript(虽然考虑到其谷歌用自己的资源,V8发动机,以及发人深省的事实: JavaScript应用程序都在上升,我希望这一天发生)。 我知道,谷歌有一个hashbang变通政策,但它只是一个坏主意。 另外,我使用pushState的。 这是一个非常重要的问题,对我来说,我会想到它是为其他人。 SEO是什么,是不容忽视的,因此不能被认为对于许多应用,在那里,要求或依赖于它。

输入node.js中 我才刚刚开始进入这个热潮,但它似乎可能有客户端上存在相同的Backbone.js的应用程序在服务器手拉手node.js中上 随后的node.js将能够满足来自Backbone.js的应用呈现给网页爬虫HTML。 这似乎是可行的,但我要找的人谁是更经历了Node.js的,甚至更好,别人谁实际上已经这样做了,帮我出这一点。

什么步骤我需要让我用node.js的为我的Backbone.js的应用网络爬虫? 另外,我的骨干应用程序消耗上所写的,我认为将使这个少头疼的Rails的API。

编辑:我忘了,我已经写在Backbone.js的生产应用。 我期待这一技术应用到应用程序。

Answer 1:

首先,我要补充的一个声明,我认为这用途的node.js的是一个坏主意。 其次免责声明:我已经做过类似的黑客,但只是进行自动测试,不是爬虫的目的。

有了这样的方式,让我们去。 如果你打算运行服务器的客户端应用程序,你需要重新创建服务器上的浏览器环境:

  1. 最明显的是,你错过的DOM(文档对象模型) - 基本上您解析HTML文档顶部的AST。 这Node.js的解决方案是jsdom 。

  2. 这不过是不够的。 您的浏览器也暴露了BOM(浏览器对象模型) -进入浏览器功能,比如,例如, history.pushState 。 这是它得到棘手。 有两种选择:你可以试着弯曲phantomjs或casperjs运行你的应用程序,然后刮HTML关闭它。 因为你正在运行与锯掉UI部件一个巨大的全WebKit浏览器这是脆弱的。

  3. 另一种选择是僵尸 -这是轻量级重新实现在Javascript的浏览器功能。 根据页面支持pushState的,但我的经验是,浏览器仿真还远远没有完成 - 但试一试,看看你走多远。



Answer 2:

我将它留给你来决定是否推你的渲染引擎在服务器端是一个明智的决定。

由于是的NodeJS建立在V8(Chrome的引擎),它会运行JavaScript,像Backbone.js的。 创建你的模型等等会在完全相同的方式来完成。

当然,环境的NodeJS缺乏DOM。 因此,这是你需要重建的一部分。 我相信最流行的模块是:

https://github.com/tmpvar/jsdom

一旦你拥有的NodeJS可访问DOM API,您只需建立自己的节点,你会为一个典型的浏览器客户端(也许使用jQuery),并与呈现的HTML服务器响应请求(通过$(“MYDOM”)。HTML()或类似)。



Answer 3:

我相信你可以采取后备策略类型的方法。 考虑会用JavaScript发生什么关闭,链接点击VS上JS。 您的网页上做任何可以被抓取应该有一定的合理回落过程JavaScript时关闭。 你的链接应该总是有链接到服务器中的href,默认动作应该发生的事情用JavaScript来预防。

我不会说这是骨干的责任必然。 我的意思是唯一骨干可以帮你这里修改您的网址时,页面的变化,并为你的模型/集是客户端和服务器端。 我相信的意见和路由器将是严格的客户端。

什么可以做,虽然是有或没有注入的内容让你的网页玉和部分渲染从客户端或服务器端。 通过这种方式,同一页面可以在任一方式来呈现。 也就是说,如果您更换页面的一大块,并更改URL,那么你抓住可以从相同的模板,如果有人直接去该页面的HTML。

当您的服务器收到请求应该直接带你到该页面而不是通过主入口点和负载骨干,并操纵它的页面,并在用户与URL计划的方式进行设置。

我想你应该能够仅仅通过在你的应用程序重新安排事情有点实现这一目标。 没有真正的重写只是一个良好的量走动的事情。 您可能需要编写一个控制器,这将有助于你的html文件的内容注入或不注入。 这将有助于让你的骨干应用,它需要夫妇从模型中的数据的HTML。 就像我说的,当你直接打通过快递/ node.js中定义的路由器链接那些那些同样可以用模板



Answer 4:

这是我的东西待办事项列表上我们的应用程序做的事:有Node.js的解析骨干路由(存储在内存中的应用程序启动时),在最起码的服务主要页面模板直行HTML的任何东西很可能是开销太大/处理,当你考虑成千上万的用户打你的网站的BE。

我相信主干应用程序,如发现生活怎样只为像谷歌爬虫机器人做这种方式很好,但。 您还需要这种局面的事情,如Facebook喜欢在Facebook发出了一个履带式阅读你的OG:标签。



Answer 5:

工作方案是到处使用骨干https://github.com/Morriz/backbone-everywhere但它强迫你使用节点作为后端。

另一种方法是使用服务器和前端上相同的模板。 前端负载胡子模板中使用require.js文本插件和服务器也使得使用相同的小胡子模板的页面。

另外除了是在JavaScript代码也呈现自举模块的数据作为JSON数据要由骨干立即用于填充模型和集合。



Answer 6:

基本上你需要决定它是什么,你的服务:它是一个真正的应用程序(即东西,可以站在作为一个专门的桌面应用程序的替代),或者是它的内容呈现(即经典的“网页” )? 如果你关心搜索引擎优化,很可能是它实际上是后者(“内容网站”),并在这种情况下,“单页应用”的模式是不恰当的; 你真正想要的“逐步升级的网站”的模式,而不是(查找这样的短语是“不显眼的JavaScript”,“渐进增强”和“自适应网页设计”)。

要放大一点,“服务器只发送序列化的数据和客户端完成所有渲染”只有在“真正的应用程序”的情况适当。 对于“内容网站”的情况下,适当的模式是“服务器中所做的主要渲染,客户端使得它看起来更好,做一些小规模的渲染,以避免破坏性的页面转换时可能”。

而且,顺便说一句,那渐进增强手段“确保用户可以看到没有得到任何比谁使用文本到语音的盲人用户更好的”反对的是政治上的不满,而不是对现实的表达。 逐步只要你想他们从高端渲染系统用户的角度增强网站可以像花哨。



文章来源: Using node.js to serve content from a Backbone.js app to search crawlers for SEO