【问题标题】:Google Not Properly Caching My AJAX Crawlable Application?Google 没有正确缓存我的 AJAX 可抓取应用程序?
【发布时间】:2013-09-13 16:07:53
【问题描述】:

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

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

我正在使用无头浏览器,幻象 JS 来为 google bot 提供我的 AJAX 应用程序的完全呈现的 HTML。在 MVC 中,我正在检测 ?_escaped_fragment_= 并执行 302 重定向到为完全呈现的 HTML 提供服务的 URL。这部分工作正常,要测试它,请在此处导航:https://insureflo.com/?_escaped_fragment_=,您将看到重定向,以及我的网站 https://insureflo.com 的完全呈现的 HTML 内容。

我有一个站点地图,其中包含我的所有 URL,包括根。尽管如此,谷歌仍然不会正确缓存或抓取我的应用程序,并且仍然显示应用程序的加载页面。我的印象是,您可以使用 pushstate 并依靠元片段元标记供 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 视图和网站的图像预览中?此外,在 google 搜索结果中查看缓存时,我得到一个空白页面,并且查看源呈现的是常规页面,而不是预期的完全呈现的 HTML。例如:

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

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

【问题讨论】:

    标签: javascript jquery html ajax seo


    【解决方案1】:

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

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

    【讨论】:

    • 嘿!!,我一步一步遇到了和你一样的问题 :)。我什至在使用 Durandal + pushstate。我会尝试在不重定向的情况下返回 html,看看这是否解决了问题,但是......在快照中包含元标记有什么问题?
    【解决方案2】:

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

    1. 网站管理员工具中的 Fetch as Google 会告诉您有重定向但不会跟随它。

    2. 要让 Google Bot 在抓取过程中真正遵循重定向,您还必须在网站管理员工具中拥有被重定向到的网站。

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

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

    我的博客上有更详细的文章

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

    【讨论】:

      猜你喜欢
      • 2014-05-30
      • 1970-01-01
      • 2017-04-05
      • 2013-08-11
      • 2023-03-15
      • 2016-09-11
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      相关资源
      最近更新 更多