谷歌没有正确缓存我的AJAX可抓取应用程序
Google Not Properly Caching My AJAX Crawlable Application?
我使用 durandal 2.0 编写了一个 SPA,并使用 HTML5 pushstate 进行导航更改。我已经根据谷歌的规范设置了所有内容。我不包括哈沙邦/#!在我的 URL 中,相反,我使用的是元片段标签。
<meta name="fragment" content="!">
我正在使用一个无头浏览器,phantom JS来为谷歌机器人提供我的AJAX应用程序的完全渲染的HTML。在 MVC 中,我正在检测 ?_escaped_fragment_= 并执行 302 重定向到提供完全呈现的 HTML 的 URL。该部分工作正常,要进行测试,请导航到此处:https://insureflo.com/?_escaped_fragment_=,您将看到重定向,以及我的网站 https://insureflo.com 完全呈现的HTML内容。
我有一个站点地图,里面有我所有的网址,包括根目录。尽管如此,谷歌仍然无法正确缓存或抓取我的应用程序,并且仍然显示该应用程序的加载页面。我的印象是您可以使用 pushstate 并依靠元片段元标记供谷歌解析,并自动将escaped_fragment包含在 URL 中。
但是,在网站管理员工具中作为谷歌机器人获取时,我得到以下响应:
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 应用程序的要求,并且确实可以使用一些帮助来解决这个问题。我在这里错过了什么吗?谢谢!
在尝试做同样的事情时,我发现了很多事情。
-
网站站长工具中的"以 Google 身份抓取"会告诉您存在重定向,但不会遵循它。
-
要让 Google Bot 在抓取过程中实际跟踪重定向,您必须在网站站长工具中同时拥有要重定向到的网站。
-
如果您希望Google从站点地图抓取您的网站并执行_escaped_fragment_则站点地图中的链接必须采用以下格式:
http://yourlink.com/#!/stuff
我在我的博客上有更详细的文章
http://mark.stratmann.me/articles/the-great-ajax-seo-saga
我今天能够让网站在获取中正确显示为谷歌。万一其他人遇到这种情况,谷歌不喜欢被重定向不止一次,所以当你检测到escaped_fragment_查询字符串时,在我的情况下,在 MVC 中你需要直接在该页面上呈现内容,重定向到带有 302 的 HTML 快照页面可能会导致我的经验出现问题。所以我只是在主控制器方法中检测到它,如果我检测到查询字符串,则呈现快照内容。希望这对其他人有所帮助。
另一个注意事项是确保元片段不存在于您的 HTML 快照中,我已经犯了这个错误。
- 如何使用AJAX和JSON从一个页面抓取PHP变量到另一个页面
- AJAX/JS:抓取多个输入字段而不刷新或点击按钮,php会回显该值
- JS/Ajax:抓取输入字段值,无需刷新或点击按钮
- jQuery 在使用 ajax 时抓取错误的形式
- 如何使 AJAX 网站可抓取
- 如何使用 ajax 一次抓取一页,返回下一页链接并再次访问
- 如何使用 php 抓取基于 javascript 和 ajax 的网页数据
- .done() 函数在抓取本地 JSON 文件时未在 AJAX 调用返回的承诺上运行
- 抓取 ajax 加载的内容中的值会导致出现白页
- 700 由 AJAX 引起的 Google 抓取错误
- 谷歌没有正确缓存我的AJAX可抓取应用程序
- 如何阻止机器人抓取我的基于AJAX的URL's
- web抓取-点击ajax调用,然后抓取页面(可以在python中完成)
- 用ajax抓取一个稍后显示的列表
- PHP AJAX MySql抓取数据单选按钮
- 抓取已经'回声'从AJAX调用到PHP
- 我如何使AJAX从MVC中的控制器中抓取数据?
- Ajax请求-抓取/加载仅Div Id
- 用Ajax抓取json数据
- 如何使用node.js与ASP和AJAX抓取网站