ruby-on-rails - 在 Ruby On Rails 上使用 PhantomJS 进行动态页面的服务器端渲染

标签 ruby-on-rails dynamic seo server-side phantomjs

我制作了一个 90% 是 Javascript 的网页。所有网站都是动态呈现的。

我希望此内容也由服务器呈现,以便 Google 可以抓取我的所有内容和链接并将其编入索引。

我知道为了不被google封禁,动态页面的内容必须和服务器呈现的页面几乎一致。

我不想编写两个不同的页面(在这种情况下,一个来自带有 Handlebars 的客户端,另一个来自带有 ERB 的服务器)。

于是我想到了PhantomJS。我想要的是,当我从谷歌获得 _escaped_fragment_ 参数时,我打开没有 PhantomJS 的页面,我将其从 PhantomJS 呈现为 HTML,并将其从服务器返回给谷歌。这样,我就不必为任何内容创建两个不同的页面。

我知道我也可以将 Handlebars 用于服务器端模板,但无论如何我都必须对所有内容进行两次编码。

有谁知道如何用 PhantomJS 完成这个?有没有其他方法可以不重复逻辑和代码两次并让 Google 为网站编制索引?

谢谢!!!

最佳答案

是的,你可以。

将以下内容添加到您的 Javascript 密集型页面

<meta name="fragment" content="!">

当 Google bot 找到这个标签时,它会发出一个新的 http GET 请求。这次,它会将 ?_escaped_fragment_= 添加到您的 URL。

因此,如果您使用 Javascript 的网页位于:

www.mysite.com/mypage

Google 将使用以下 URL 发出新的 GET:

www.mysite.com/mypage?_escaped_fragment_=

在您的 Ruby GET 处理程序中,您只需使用未转义的 URL 调用 PhantomJs(只需进行字符串替换)。在您的 PhantomJs javascript 代码中,等待页面呈现,然后使用常规 javascript 提取 HTML 并将其返回给您的 Ruby GET 处理程序,您将在其中简单地使用 HTML 文本字符串响应 GET。

这样您就不必编写两次代码。该解决方案是通用的,可以对任何内容进行快照。

关于ruby-on-rails - 在 Ruby On Rails 上使用 PhantomJS 进行动态页面的服务器端渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10857385/

相关文章:

ruby-on-rails - 在不使用屏幕的情况下在后台运行 ruby​​ 脚本

javascript - 动态网页? (HTML DOM, js)

web-crawler - 提交的 URL 被 robots.txt 阻止

css - 添加一个按钮到 <%= link_to_add_fields "Add A Present", f, :presents %> in Rails?

mysql - 根据连接表中记录的存在对记录进行排序

ruby-on-rails - Rails foo= 与 foo_id=

html - 屏幕阅读器找不到弹出窗口

c# - 如何使用反射和抽象对象动态加载类?

seo - TYPO3 - 在自定义扩展的详细 View 上覆盖和添加元标记(来自 tx_metaseo)

html - 什么更容易访问,文本缩进 : -9999px or just using an img with an alt tag?