我使用 durandal 2.0 编写了一个 SPA,我使用 HTML5 pushstate 进行导航更改。我已经根据谷歌的规范设置了一切。我不包括hashabangs /#!在我的 URL 中,我使用的是元片段标记。
<meta name="fragment" content="!">
我正在使用无头浏览器,幻象 JS 为谷歌机器人提供我的 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 视图和站点的图像预览中?此外,在谷歌搜索结果中查看缓存时,我得到一个空白页面,查看源代码呈现的是常规页面,而不是预期的完全呈现的 HTML。例如:
http://webcache.googleusercontent.com/search?q=cache:https://insureflo.com
在这一点上,我已经阅读并阅读了规范,我相信我已经满足了爬取 AJAX 应用程序的要求,并且真的可以使用一些帮助来解决这个问题。我在这里错过了什么吗?谢谢!