ajax - 针对 ajax 调用的 Google 搜索优化

标签 ajax search indexing

我的网站上有一个页面,其中列出了经常更新的内容。该列表是通过 jsonp 调用服务器、获取 json 并将其转换为 html 创建的。快速而流畅。

不幸的是,Google 无法将其编入索引。在阅读了如何根据 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

当谷歌这样调用它时

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

我必须提供 html 快照。

为什么要更换?和 # ? 创建html快照看起来很麻烦。仅提供简单的链接就足够了吗?就我而言,如果谷歌只索引事物页面,我会很高兴。

最佳答案

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

现在,当 Googlebot 在链接中看到该 URL 时,不会转到 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 项。)

当用户更改页面时(如果适用),您还应该更新哈希以反射(reflect)当前页面。您可以简单地设置 location.hash='#!page=<em>n</em>'; ,但我建议使用优秀的 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。

关于ajax - 针对 ajax 调用的 Google 搜索优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4794495/

相关文章:

javascript - 如何将 View 内的javascript变量传递给php中的 Controller

magento - 如何将我的 Magento 迷你搜索表单移动到模板标题中的另一个位置?

search - Solr 中按自定义分数排序的排序不一致

indexing - Solr 结果分组错误。字段 'vendor' 的意外文档值类型 SORTED_SET(预期=排序)

python - Ajax:无法将 Json 对象发送到 Bottle Web 服务

javascript - 使用 MySQL Community Server 和 jQuery AJAX 的 RESTful Web 服务

javascript - 当使用通过 AJAX 设置的 $_GET[] 全局变量时,If 语句总是证明为假

c# - 使用 C# 显示相关内容的最佳方式

mysql - 多列索引结合唯一索引效率

python - numpy 中一个数组的多个索引列表