如何创建使用Javascript路由器的可索引网站?

时间:2013-01-06 08:19:23

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

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

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

  2. 我可以通过用户代理检测服务器端的Google,Yahoo,Bing,Facebook等热门网络抓取工具,但我怀疑会遗漏一些网络抓取工具。

  3. 哪种方式看起来更方便,或者您有什么想法&amp;这种网站可以制作索引的经验吗?

1 个答案:

答案 0 :(得分:4)

正如elias94xx在他的评论中所说,解决这一难题的一个可靠方法就是利用谷歌的“AJAX抓取”。简而言之,谷歌告诉网络社区“看起来我们不会为你实际渲染你的JS代码,但如果你想为我们渲染服务器端,我们会尽力让你轻松实现。”他们用两个基本概念来做到这一点:漂亮的URL =&gt;丑陋的URL翻译和HTML快照。

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

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

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


可以在此处找到pretty =&gt;丑陋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