16

我们大量使用主干来渲染我们的页面。所有数据都以 json 格式从服务器传递,html 在客户端上创建,带有骨干和胡须。这给SEO带来了很大的问题。我计划解决这个问题的一种方法是检测请求是否来自机器人,并使用 HtmlUnit 之类的东西在服务器上呈现页面并将其吐出。会喜欢一些替代的想法。也想知道我计划做的事情是否有缺陷。

4

5 回答 5

5

使用Progressive EnhancementUnobtrusive JavaScript构建您的网站。

当您做重要的 Ajax 工作时,请使用历史 API

然后你就有了所有东西的真实网址,谷歌就不会有问题了。

于 2012-05-29T16:38:07.857 回答
4

我不一定喜欢你唯一的答案选择是重做一切以满足广泛的最佳实践。有充分的理由考虑使用不显眼的 Javascript 方法来做事,但作为一个需要 JS 的网站,也许有充分的理由这样做。让我们假设有。

如果您正在使用动态填充客户端模板的 Backbone.js 应用程序,我能想到的最佳方法是在下面的链接中。基本上,这相当于告诉无头浏览器运行一组导航命令以查看所有用户/产品/页面,并出于 SEO 原因在每一步保存一个静态 html 文件。

使 JavaScript 生成的 HTML 可抓取的网站最不冗余的方法是什么?

于 2012-05-29T16:44:00.193 回答
3

在我目前正在从事的一个项目中,我试图涵盖所有基础。骨干驱动的客户端、pushstate uris、可书签页面和 html 后备尽可能。我采用的方法是使用 Mustache 作为模板,将它们分解成漂亮的小组件以供我的主干视图使用,并以原始格式提供给客户端。当请求页面时,可以在服务器上处理模板以生成完整的页面,并将主干附加到它想要控制的元素。

这不是一个简单的设置,但到目前为止我还没有遇到任何障碍,也没有复制任何模板。我不得不为每个可用的 url 创建一个页面包装模板,因为 Mustache 不做“包装”,但我认为我应该能够通过在服务器上进行一些额外的编码来消除这些。

计划是能够在接口需要的地方将一些组件作为纯 js,而一些由服务器渲染并在需要的地方用 js 增强。

于 2012-05-30T05:12:28.677 回答
1

如果您使用的是 node.js,请使用rendr

使用 Node.js 在客户端和服务器上呈现您的 Backbone.js 应用程序。

于 2014-05-19T16:52:44.510 回答
0

使用 google ajax 抓取方案有利有弊 - 我将它用于社交网站 ( http://beta.playup.com ),结果好坏参半……

我写了一个 gem 来透明地处理这个作为 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 更倾向于将应用程序分类为各种状态( urls)作为同一页面的版本,而不是作为单独的索引。尝试搜索 beta.playup.com - 即使呈现的内容在 url 之间发生了根本性的变化,也只列出了一个索引)....

于 2013-03-26T11:29:49.467 回答