针对ajax调用的Google搜索优化

时间:2011-01-25 14:16:48

标签: ajax search indexing

我的网站上有一个页面,其中列出了经常更新的内容。这个列表是通过jsonp调用服务器创建的,让json返回并将其转换为html。快速而光滑。

不幸的是,谷歌无法为其编制索引。在阅读了如何根据Google's AJAX crawling guide完成这项工作之后,我有点困惑,需要一些澄清和确认:

ajax页面只需要实现规则,对吧? 我目前有一个像

这样的休息网址
[site]/base/junkets/browse.aspx?page=1&rows=18&sidx=ScoreAll&sord=desc&callback=jsonp1295964163067

这需要成为:

[site]/base/junkets/browse.aspx#page=1&rows=18&sidx=ScoreAll&sord=desc&callback=jsonp1295964163067

当google称之为

[site]/base/junkets/browse.aspx#!page=1&rows=18&sidx=ScoreAll&sord=desc&callback=jsonp1295964163067

我必须提供html快照。

为什么要更换? #? 创建HTML快照似乎非常麻烦。只提供简单的链接就足够了吗?在我的情况下,如果谷歌只对事物页面编制索引,我会很高兴。

2 个答案:

答案 0 :(得分:4)

看起来你误解了AJAX抓取指南。 #!表示法将用于指向您的AJAX应用程序所在的页面的链接,而不是用于您的应用程序调用的服务的URL。例如,如果我转到example.com/app/访问您的应用,那么您可以通过链接到example.com/app/#!page=1来进行网页抓取。

现在,当Googlebot在链接中看到该网址时,而不是转到example.com/app/#!page=1 - 这意味着发出example.com/app/请求(回想一下哈希从未发送到服务器) - 它会请求example.com/app/?_escaped_fragment_=page=1。如果请求中存在_escaped_fragment_,您就知道要返回内容的静态HTML版本。

为什么所有这些都必要? Googlebot不会执行脚本(也不知道如何索引您的JSON对象),因此在脚本运行和加载内容后,它无法知道用户面前的内容。因此,您的服务器必须大量生成用户最终在AJAXy版本中看到的HTML版本。

那你接下来的步骤是什么?

首先,或者更改指向您的应用程序的链接以包含#!page=1(或其他),或者将<meta name="fragment" content="!">添加到您应用的HTML中。 (参见AJAX crawling guide的第3项。)

当用户更改页面时(如果这是适用的),您还应该更新哈希以反映当前页面。您只需设置location.hash='#!page=n';,但我建议您使用优秀的jQuery BBQ plugin来帮助您管理网页的哈希值。 (这样,如果用户在地址栏中手动更改了散列,您可以监听散列的更改。)警告:当前发布的BBQ版本(1.2.1)不支持AJAX可抓取URL,但是最新版本在Git master(1.3pre)可以,所以你需要grab it here。然后,只需设置AJAX可抓取选项:

$.param.fragment.ajaxCrawlable(true);

第二次,您必须向example.com/app/添加一些服务器端逻辑,以检测查询字符串中是否存在_escaped_fragment_,并返回静态HTML版本页面,如果它在那里。这是Google对creating HTML snapshots的指导可能有所帮助的地方。听起来你可能想要追求选项3.除了JSON之外,您还可以修改服务以输出HTML。

答案 1 :(得分:0)

我或多或少地放弃了这一点。如果你想让goolge为你的目录编制索引,那么在服务器上生成html并在html bdoy中提供html似乎别无选择。

我甚至尝试添加一个包含.net用户控件的部分,该控件实现了一个简单的html版本的目录。但谷歌也设法忽略..

所以最后我的目录已经解除了调整。 :(