谷歌没有正确缓存我的AJAX可抓取应用程序?

时间:2013-09-10 04:13:20

标签: javascript jquery html ajax seo

我使用durandal 2.0编写了一个SPA,并使用HTML5 pushstate进行导航更改。我根据谷歌规格设置了一切。我不包括hashabangs /#!在我的网址中,我正在使用元片段标记。

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

我正在使用无头浏览器,幻影JS为谷歌机器人提供我的AJAX应用程序的完全呈现的HTML。在MVC中,我正在检测?_escaped_fragment_ =并执行302重定向到提供完全呈现的HTML的URL。该部分工作正常,要对其进行测试,请在此处导航:https://insureflo.com/?_escaped_fragment_=,您将看到我的网站https://insureflo.com的重定向和完全呈现的HTML内容。

我有一个站点地图,其中包含我的所有网址,包括根目录。尽管如此,谷歌仍然无法正确缓存或抓取我的应用程序,仍然显示应用程序的加载页面。我的印象是你可以使用pushstate并依赖于meta片段元标记来解析google,并自动在URL中包含escaped_fragment。

但是,在网站管理员工具中以googlebot格式获取以下回复:

 HTTP/1.1 302 Found
 Cache-Control: private
 Content-Type: text/html; charset=utf-8
 Location: /HtmlSnapshot?url=https%3A%2F%2Finsureflo.com%2F%23
 Server: Microsoft-IIS/8.0
 X-AspNetMvc-Version: 4.0
 X-AspNet-Version: 4.0.30319
 X-Powered-By: ASP.NET
 Date: Sun, 08 Sep 2013 06:59:28 GMT
 Connection: close
 Content-Length: 168

 <html><head><title>Object moved</title></head><body>
 <h2>Object moved to <a href="/HtmlSnapshot?url=https%3A%2F%2Finsureflo.com%2F%23">here</a>.</h2>
 </body></html>

这个302是正确的我相信根据规范,但为什么不索引重定向的内容并在HTMl视图和网站的图像预览中显示?此外,当在谷歌搜索结果中查看缓存时,我得到一个空白页面,并查看源呈现常规页面,而不是按预期完全呈现的HTML。例如:

http://webcache.googleusercontent.com/search?q=cache:https://insureflo.com

此时我已经阅读并阅读了规范,我相信我已经满足了抓取AJAX应用程序的要求,并且可以真正使用一些帮助来解决这个问题。我在这里错过了什么吗?谢谢!

2 个答案:

答案 0 :(得分:1)

我在尝试做同样的事情时发现了很多东西。

  1. 网站管理员工具中的Google抓取方式会告诉您有重定向但不会跟踪它。

  2. 要让Google Bot在抓取过程中实际遵循重定向,您必须将网站重定向到网站站长工具中。

  3. 如果您希望Google从站点地图抓取您的网站并执行_escaped_fragment_,那么您站点地图中的链接必须采用以下格式:

    http://yourlink.com/#!/stuff

  4. 我在

    的博客上写了更详细的内容

    http://mark.stratmann.me/articles/the-great-ajax-seo-saga

答案 1 :(得分:0)

我能够让这个网站在今天的google中正确显示。如果其他人遇到这种情况,谷歌不喜欢被重定向多次,所以当你检测到escaped_fragment_查询字符串时,在我的情况下在MVC中你需要在该页面上呈现内容,重定向到带有302可能会导致我的经验出现问题。所以我只是在主控制器方法中检测它并在检测到查询字符串时呈现快照内容。希望这有助于其他任何人。

另一个注意事项是确保HTML快照中不存在元片段,我已经犯了这个错误。