javascript - 使用 node.js 提供来自 Backbone.js 应用程序的内容以搜索爬虫以进行 SEO

标签 javascript node.js backbone.js seo

要么我的 google-fu 让我失望了,要么真的没有太多人这样做。如您所知,Backbone.js 有一个致命弱点——它无法将它呈现的 html 提供给诸如 googlebot 之类的页面爬虫,因为它们不运行 JavaScript(尽管考虑到它的 Google 拥有他们的资源、V8 引擎以及一个发人深省的事实: JavaScript 应用程序正在兴起,我希望这有一天会发生)。我知道谷歌有一个 hashbang 变通政策,但这只是一个坏主意。另外,我正在使用 PushState。这对我来说是一个极其重要的问题,我希望对其他人也是如此。 SEO 是不容忽视的东西,因此对于许多需要或依赖它的应用程序来说,它不能被考虑。

输入 node.js。我才刚刚开始进入这种热潮,但似乎有可能让客户端上存在的相同 Backbone.js 应用程序与 node.js 手牵手的服务器上。然后 node.js 将能够将 Backbone.js 应用程序呈现的 html 提供给页面爬虫。这似乎可行,但我正在寻找对 node.js 更有经验的人,甚至更好的人,真正做到这一点的人,为我提供建议。

我需要采取哪些步骤才能允许我使用 node.js 将我的 Backbone.js 应用程序提供给网络爬虫?此外,我的 Backbone 应用程序使用了一个用 Rails 编写的 API,我认为这会让这不那么令人头疼。

编辑:我没有提到我已经有一个用 Backbone.js 编写的生产应用程序。我希望将此技术应用于该应用程序。

最佳答案

首先,让我添加一个免责声明,我认为使用 node.js 是一个坏主意。第二个免责声明:我做过类似的黑客攻击,但只是为了自动化测试,而不是爬虫。

说完这些,我们走吧。如果您打算在服务器上运行客户端应用程序,则需要在服务器上重新创建浏览器环境:

  1. 最明显的是,您缺少 DOM(文档对象模型) - 基本上是已解析 HTML 文档之上的 AST。 node.js 的解决方案是 jsdom .

  2. 但这还不够。您的浏览器还公开 BOM(浏览器对象模型) - 访问浏览器功能,例如 history.pushState。这就是棘手的地方。有两种选择:可以尝试弯曲phantomjscasperjs运行您的应用程序,然后从其上刮下 HTML。它很脆弱,因为您运行的是一个巨大的完整 WebKit 浏览器,并且 UI 部分被锯掉了。

  3. 另一个选项是Zombie - 这是 Javascript 中浏览器功能的轻量级重新实现。根据它支持pushState的页面,但我的经验是浏览器模拟还远未完成 - 但是尝试一下,看看你能走多远。

关于javascript - 使用 node.js 提供来自 Backbone.js 应用程序的内容以搜索爬虫以进行 SEO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12445896/

相关文章:

node.js - Mongodb 和 Express.js : Automatically creating the db and collections based on Models

javascript - 如何更改 JointJS 中自定义对象的属性?

javascript - 使用backbone和Express渲染模板

javascript - 我可以将逻辑运算符放在 document.querySelectorAll 中吗?如果是这样,如何?

javascript - 如何在 native react 中切换抽屉导航器?

javascript - 通过子数组处理数组

javascript - 使用 Firebase 进行 Shopify 身份验证?

javascript - 在 View 中使用 C# MVC 多个动态模型

eclipse - 如何在 Eclipse 中获得 Node.js 的代码完成?

backbone.js - Backbone Marionette JS 路由器的工作原理