Handlebars.js和SEO

16

我阅读了很多关于JavaScript模板和搜索引擎优化的讨论,但是我还没有找到一个令人满意的答案(可能是文档不全或过时了)。

目前,我正在研究handlebars.js作为客户端模板解决方案,因为我喜欢创建helper函数的可能性。但是对于搜索引擎的索引怎么样呢?爬虫会索引生成的内容(正如预期的那样),还是只有带有丑陋JavaScript伪变量的源代码?我知道有很多关于这个问题的讨论,但是我感觉没有人确切地知道答案。

如果像Google这样的搜索引擎不能正确地索引这些模板,那么为什么要在公共网站上使用它们呢?

这种情况下的另一个问题是:是否可以在服务器端呈现Handlebar.js模板,然后在客户端呈现它们?显然是为了避免所有这些关于SEO的讨论。

6个回答

23
对于客户端的DOM操作,大多数网络机器人(例如Google和其他搜索引擎)不会实时解释JavaScript并解析新渲染的内容进行索引。相反,Google(现在也包括Bing)支持“Google Ajax Crawling Scheme”(https://developers.google.com/webmasters/ajax-crawling/docs/getting-started),基本上规定了以下要求:如果您希望将js渲染的DOM内容索引(例如渲染ajax调用结果),则必须能够:
  1. 通过使用哈希标记 #! 触发异步js渲染(例如http://www.mysite.com/#!my-state),以及
  2. 能够在请求后提供经过js修改的预呈现DOM快照。

如果使用像Backbone.js或Spine这样的客户端MVC框架,则需要提供此服务,如果您想让您的Web应用程序被索引。

通常这意味着你截取了一个由网络爬虫发出的请求(在上面的链接中有解释),并使用无头浏览器(即QT + capybara-webkitHtmlUnit等)在服务器端抓取你的网站,然后将生成的DOM返回给请求的爬虫。
我已经开始使用Ruby创建一个gem来实现这个功能(现在可以接受拉取请求),地址为https://github.com/benkitzelman/google-ajax-crawler
它使用capybara-webkit(以及即将加入的phantomjs)作为rack中间件来完成此操作。

更新:该宝石已发布在RubyGems上,可以作为中间件由任何Rack应用程序使用 gem install google_ajax_crawler。有关使用说明和示例,请参见上面的Github链接。 - Ben
如果你要使用Backbone.js,你必须确保你正在使用路由器吗? - unclejam
如何构建你的JS应用程序在很大程度上并不重要。你可以使用Backbone路由器,或者你也可以在不使用任何框架的情况下操纵DOM - 难点在于确定当你的页面在无头浏览器中达到渲染状态时,你正好在正确的时间拍摄快照。大多数快照框架都会在你的页面上添加某种信号函数,其思想是当你的页面加载/渲染完成时调用它。 - Ben
1
请注意,此内容已被弃用:http://googlewebmastercentral.blogspot.com/2015/10/deprecating-our-ajax-crawling-scheme.html - nikk wong

1

我不了解Handlebar.js,但就我所知,SEO在JavaScript中的内容方面存在一些问题。确保您的内容对搜索引擎可见(使用蜘蛛模拟器进行测试)。通常避免蜘蛛陷阱是正确的方法。希望这能对您有所帮助。


0

搜索引擎不运行JavaScript,因此如果您想要使您的内容被索引,您需要在服务器上渲染您的模板。您可以在Node(服务器端JS)中使用handlebars来在页面请求来自蜘蛛时在那里呈现您的模板。这是更多的工作,但是它是可能的。Github、Google Plus和Twitter都做了类似的事情。


-1

-1
你可以使用远程模板,将模板作为HTML的一部分以便于SEO。

-2
这个机器人是否索引生成的内容(如预期所愿),还是只索引带有丑陋JavaScript伪变量的源代码?
都不是,因为索引器机器人不运行JavaScript,而且您不会将模板作为HTML文档提供。
构建一个可以在没有JavaScript的情况下正常工作的网站,然后在其基础上进行构建

我同意,最好使用像jquery这样在浏览器中修改DOM的JS来工作。这样您就可以兼顾JS的强大效果和语义化的HTML内容。 - GibboK
2
越来越多的证据表明,Googlebot可以执行javascript并解析由Ajax调用生成的内容。 - Otto Allmendinger
这是真实的,直到HTML5将我们从文档转移到应用程序。 - Lodewijk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接