我一直在开发一个使用 Backbone.js 路由器的项目,所有数据都是由 javascript 通过 Restful 请求加载的。我知道没有办法检测服务器端是否启用了 Javascript,但以下是我认为使该网站可索引的场景:
我可以为 sitemap.xml 上的每个链接附加一个查询字符串,并且可以放置
<script>
标签来检测 Javascript 是否启用。服务器使用可索引数据呈现此页面,当用户访问此页面时,我可以手动初始化 Backbone.js 路由器。然而问题是我需要执行 sql 查询来在服务器端呈现可索引数据,如果访问者不是机器人,它将导致额外的负载。当用户在某处共享网站的 URL 时,它不会是可索引页面,网络爬虫可能无法识别该 URL 的内容。网络爬虫搜索页面中的额外字符串可能会让用户感到厌烦。我可以从服务器端的用户代理中检测到 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/