model-view-controller – 使用JavaScript生成的HTML可以抓取网站的最少冗余方法是什么?

阅读Google’s policy on making Ajax-generated content crawlable后,除了许多开发人员的博客文章和Stackoverflow Q& A主题的线程,我得出的结论是,没有办法使一个网站只有JavaScript / Ajax生成的HTML可抓取。我目前工作的网站没有获得其大量的内容索引。我们的非索引内容的所有表示层是通过从基于Ajax的Web服务调用返回的JSON生成HTML来构建的,因此我们认为Google不会对内容编制索引。那是对的吗?

唯一的解决方案似乎是为搜索引擎(特别是Google)提供一个“后退”版本的网站,其中所有的HTML和内容都将按照传统的方式在服务器端生成。对于启用了JavaScript的客户端,似乎我们可以使用与现在基本相同的方法:使用JavaScript从异步加载的JSON生成HTML。

回顾一下,我的理解是,如上所述,应用DRY principle创建可抓取的Ajax生成的网站的当前最佳实践是使用可以在客户端和服务器端使用相同模板的模板引擎。对于启用了JavaScript的客户端,客户端模板引擎(例如mustache.js)会将从服务器发送的JSON数据转换为其模板文件副本定义的HTML。对于禁用JavaScript的搜索抓取工具和客户端,同一模板引擎(例如mustache.java)的服务器端实现将类似地对其相同精确模板文件的副本进行操作以输出HTML。

如果这个解决方案是正确的,那么这与前端重型网站4或5年前使用的方法有什么不同,其中网站本质上必须维护模板代码的两个副本,为启用JavaScript的用户提供一个副本(几乎所有人)和另一个副本(例如在FreeMarkerVelocity)搜索引擎和浏览器没有启用JavaScript(几乎没有人)?似乎应该有一个更好的方法。

这是否意味着需要维护两个模板模型层,一个在客户端,一个在服务器端?将这些客户端模板与前端MVC(MV / MVVC)框架(如Backbone.js,Ember.jsYUI App Library)相结合有何好处?这些解决方案如何影响维护成本?最好不要在开发团队的技术栈中引入更多的框架(一个新的模板引擎和前端MVC框架)来做这件事情?有没有办法做这个更少冗余?

如果该解决方案不正确,那么是否有一些我们缺少的东西,可以用我们的JavaScript来保持我们现有的异步HTML-from-JSON结构并获得索引,所以我们不需要引入新的东西到架构堆栈?当业务需要改变时,我们真的不需要更新表示层的两个版本。

为什么我没有想到这个!只需使用http://phantomjs.org.它是一个无头的webkit浏览器。你只需建立一组动作来抓取UI,并在你想要的每个状态下捕获html。 Phantom可以将捕获的html转换为.html文件,并将它们保存到您的Web服务器。

整个事情将是自动的每个构建/提交(PhantomJS是命令行驱动)。您编写的用于抓取UI的JS代码会在您更改UI时中断,但它不应该比自动化UI测试更糟,它只是Javascript,因此您可以使用jQuery选择器来抓取按钮并单击它们。

如果我不得不解决SEO问题,这肯定是我原型的第一个方法。爬行和保存,宝贝。是的先生。

http://stackoverflow.com/questions/10213185/whats-the-least-redundant-way-to-make-a-site-with-javascript-generated-html-cra

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:model-view-controller – 使用JavaScript生成的HTML可以抓取网站的最少冗余方法是什么?