javascript - 如何制作一个使用 Javascript 路由器的可索引网站?

标签 javascript web-applications backbone.js seo web-crawler

我一直在开发一个使用 Backbone.js 路由器的项目,所有数据都是由 javascript 通过 Restful 请求加载的。我知道没有办法检测服务器端是否启用了 Javascript,但以下是我认为使该网站可索引的场景:

  1. 我可以为 sitemap.xml 上的每个链接附加一个查询字符串,并且可以放置 <script>标签来检测 Javascript 是否启用。服务器使用可索引数据呈现此页面,当用户访问此页面时,我可以手动初始化 Backbone.js 路由器。然而问题是我需要执行 sql 查询来在服务器端呈现可索引数据,如果访问者不是机器人,它将导致额外的负载。当用户在某处共享网站的 URL 时,它不会是可索引页面,网络爬虫可能无法识别该 URL 的内容。网络爬虫搜索页面中的额外字符串可能会让用户感到厌烦。

  2. 我可以从服务器端的用户代理中检测到 Google、Yahoo、Bing、Facebook 等流行的网络爬虫,但我怀疑我会错过一些网络爬虫。

哪种方式看起来更方便,或者您有任何想法和经验来使此类网站可索引吗?

最佳答案

正如 elias94xx 在他的评论中所建议的,解决这一困境的一个可靠解决方案是利用 Google 的“AJAX 抓取”。简而言之,Google 告诉网络社区“我们不会实际为您渲染 JS 代码,但如果您想为我们在服务器端渲染它,我们将尽最大努力让您轻松完成。”他们通过两个基本概念来做到这一点:漂亮的 URL => 丑陋的 URL 翻译和 HTML 快照。

1) Google 实现了一种语法,网络开发人员可以使用该语法来指定仍可被抓取的客户端 URL。 Google 称之为“漂亮网址”的语法是:www.example.com?myquery#!key1=value1&key2=value2

当您使用具有该格式的网址时,Google 不会尝试抓取该具体网址。相反,它会抓取等效的“丑陋 URL”:www.example.com?myquery&_escaped_fragment_=key1=value1%26key2=value2。由于该 URL 具有 ? 而不是 #,这当然会导致对您的服务器的调用。然后,您的服务器可以使用“HTML 快照”技术。

2) 该技术的基础是让您的 Web 服务器运行一个 headless JS 运行器。当 Google 从您的服务器请求“丑陋的 URL”时,服务器会在 headless 运行程序中加载您的 Backbone 路由器代码,并生成(然后返回给 Google)与在客户端运行时生成的代码相同的 HTML .


可以在这里找到 Pretty=>ugly URL 的完整解释: https://developers.google.com/webmasters/ajax-crawling/docs/specification

可以在此处找到 HTML 快照的完整说明: https://developers.google.com/webmasters/ajax-crawling/docs/html-snapshot

哦,虽然到目前为止一切都是基于 Google,但 Bing/Yahoo 也采用了这种语法,如 Squidoo 所示:
http://www.squidoo.com/ajax-crawling

关于javascript - 如何制作一个使用 Javascript 路由器的可索引网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14180512/

相关文章:

javascript - 使用 AngularJS 添加到 json 对象

javascript - Bootstrap 下拉菜单在悬停时无法正常工作

hibernate - 最佳实践 Hibernate 乐观锁定和 Web 应用程序

web-applications - 如何从 Java EE Web 应用程序枚举 HTTP 监听器

php - 用于在后台更新 mysql 数据库的守护程序软件

javascript - 主干光环事件发射

javascript - 是否有一个 jQuery 函数可以查找元素的悬停计数?

javascript - 使用ripple时PhoneGap错误

用coffeescript保存backbone.js

javascript - 在集合上设置属性 - backbone js