4

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

我希望这些内容也由服务器呈现,以便 Google 可以抓取和索引我的所有内容和链接。

我知道,为了不被google禁止,动态页面和服务器渲染页面的内容必须几乎相同。

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

所以我想到了 PhantomJS。我想要的是,当我从 google 获得 _escaped_fragment_ 参数时,我使用 PhantomJS 打开没有该参数的页面,然后从 PhantomJS 将其呈现为 HTML 并将其从服务器返回给 Google。这样,我不必为任何东西创建两个不同的页面。

我知道我也可以将 Handlebars 用于服务器端模板,但无论如何我都必须编写两次代码。

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

谢谢!!!

4

1 回答 1

10

是的你可以。

将以下内容添加到您的 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。

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

于 2012-08-05T11:46:03.017 回答