我们大量使用骨干来渲染我们的页面。所有数据都作为json从服务器传递,html在客户端上创建,带有主干和小胡子。 这对SEO造成了很大的问题。我计划解决这个问题的一种方法是检测请求是否来自机器人,并使用类似HtmlUnit的内容在服务器上呈现页面并将其吐出。 会喜欢一些替代想法。还想知道我打算做的是否存在缺陷。
答案 0 :(得分:5)
使用Progressive Enhancement和Unobtrusive JavaScript建立您的网站。
当您执行重要的Ajax操作时,请使用the history API。
然后,您拥有所有内容的真实网址,Google就不会成为问题。
答案 1 :(得分:4)
我不一定喜欢你唯一的选择是重做一切以满足广泛的最佳实践。有充分的理由考虑使用一种不引人注目的Javascript方法来做事情,但也许有一个很好的理由你这样做是一个JS所需的网站。让我们假装有。
如果您正在使用动态填充的客户端模板执行Backbone.js应用程序,我想到的最佳方法是在下面的链接中。基本上,它等于告诉无头浏览器运行一组导航命令来查看所有用户/产品/页面,并出于SEO原因在每一步保存静态html文件。
What's the least redundant way to make a site with JavaScript-generated HTML crawlable?
答案 2 :(得分:3)
在我正在尝试覆盖所有基础的项目中,我正在努力工作..骨干驱动的客户端,pushstate uris,可收藏的页面,以及尽可能的html后备。我采用的方法是使用Mustache作为模板,将它们分解为我的主干视图的漂亮小组件,并以原始格式将它们提供给客户端。当请求页面时,可以在服务器上处理模板以生成整页和主干附加到它想要控制的元素。
这不是一个简单的设置,但到目前为止我没有遇到任何障碍,我没有复制任何模板。我必须为每个可用的url创建一个页面包装器模板,因为Mustache不做“包装器”但我认为我应该能够通过服务器上的一些额外编码来消除这些。
计划是能够将一些组件作为接口所需的纯js,一些由服务器呈现,并在需要时使用js进行增强。
答案 3 :(得分:0)
使用google ajax抓取方案有利有弊 - 我将它用于社交网站(http://beta.playup.com),结果好坏参与...
我写了一个宝石来透明地处理这个作为ruby用户的机架中间件(gem install google_ajax_crawler)(https://github.com/benkitzelman/google-ajax-crawler)
在http://thecodeabode.blogspot.com.au/2013/03/backbonejs-and-seo-google-ajax-crawling.html
了解相关信息总结是,即使我成功地将渲染的dom快照发布到请求的搜索引擎,并且我可以看到使用Google抓取的网站管理员工具,如网站的11,000页,我发现Google更倾向于对应用进行分类各种状态(url)作为同一页面的版本,而不是单独的索引。尝试搜索beta.playup.com - 即使呈现的内容在网址之间发生根本变化,也只会列出一个索引... ....
答案 4 :(得分:0)
如果您使用的是node.js,请使用rendr
使用Node.js在客户端和服务器上呈现Backbone.js应用程序。