2

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

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

  2. 我可以从他们的用户代理在服务器端检测流行的网络爬虫,如谷歌、雅虎、必应、Facebook,但我怀疑会有一些我错过的网络爬虫。

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

4

1 回答 1

4

正如 elias94xx 在他的评论中所建议的那样,解决这一困境的一个可靠方法是利用 Google 的“AJAX 抓取”。简而言之,谷歌告诉网络社区“看起来我们不会真正为你呈现你的 JS 代码,但如果你想为我们在服务器端呈现它,我们会尽最大努力让你轻松。” 他们使用两个基本概念来做到这一点:漂亮的 URL => 丑陋的 URL 翻译和 HTML 快照。

1) Google 实现了一种语法,Web 开发人员可以使用该语法来指定仍然可以抓取的客户端 URL。这些“漂亮的 URL”的语法,正如 Google 所说的那样,是:www.example.com?myquery#!key1=value1&key2=value2.

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

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


可以在此处找到漂亮 => 丑陋 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

于 2013-01-06T17:42:53.300 回答