我们有一个使用HTML5路线的AngularJS网站。我刚做了一些测试“Fetch as Google”运行。结果有点令人困惑:
但是,我们已经准备好Google无法抓取我们的网站了,所以我们已经添加了,所以Google僵尸程序用“?_escaped_fragment_ =”重新访问我们的页面。我们按照这个,https://developers.google.com/webmasters/ajax-crawling/docs/getting-started( “3.处理没有散列片段的页面”。在我们的Nginx配置中,我们有类似的东西:
if ($args ~ "_escaped_fragment_=") {
serve the static HTML snapshots
}
,如果我们自己传递_escaped_fragment_ =,它确实可以正常工作。但是,Google僵尸程序从未试图使用此参数抓取我们的网站,因此它从不抓取快照。我们错过了什么吗?我们是否应该在我们的Nginx配置中为Google bot添加代理检测功能?像这样的东西?
if ($http_user_agent ~* "googlebot|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot|developers\.google\.com") {
server from snapshots
}
如果我们能够更好地理解这一点,那就太棒了,非常感谢你们!
更新
我刚刚读到这个,http://scotch.io/tutorials/javascript/angularjs-seo-with-prerender-io?_escaped_fragment_=tag#caveats。因此,似乎在使用手动工具(Fetch as Google)时,我们应该自己通过#!或?_escaped_fragment_ =在正确的地方。实际上,如果我在我们的案例中传递了?_escaped_fragment_ =,我确实看到了我们创建的HTML快照。
这是真的吗?这是真的如何运作?
更新2 在此主题的底部,Google员工会验证Google网站管理员“抓取为Google”,您需要自己手动传递_escaped_fragment_ =参数,https://productforums.google.com/forum/#!msg/webmasters/fZjdyjq0n98/PZ-nlq_2RjcJ
干杯,
伊拿克里斯
答案 0 :(得分:8)
我将根据我们在上个月开发使用HTML5模式的SPA的经验来回答您的问题。
这实际上非常简单但容易被忽视。实际上,有两种不同的方法可以让Googlebot尝试使用escaped_fragment。第一种方法是以非html5模式运行您的站点。这意味着您的网址格式为:
Googlebot认可#!并使用更改的URL对您的服务器进行第二次调用:
http://my.domain.com/base/?_escaped_fragment_=some/path/on/website
然后您可以按照自己的意愿处理。让Googlebot尝试_escaped_fragment_模式的第二种方法是在您提供给bot的索引页面上包含以下元标记:
<meta name="fragment" content="!">
这将使googlebot每次看到该标记时都会检查该网页的其他版本。有趣的是,您可以将这两种技术结合使用,或者您可以执行我们最终要做的事情,即使用元标记在html5模式下运行。这意味着您的网址将按如下方式进行转义:
http://my.domain.com/base/some/path/on/website?_escaped_fragment_=
有趣的是,机器人不会在片段的末尾添加任何内容。但是,根据您正在运行的Web服务器,您可以使用与&#34; _escaped_fragment _&#34;匹配的模式轻松映射它。文本到备用机器人页面。有关转义片段的详细信息,请转到here。
从 2014年12月18日开始,我们仍然不确定Googlebot是否可以在渲染模式下从SPA中提取任何信息以获取其索引,而不是在javascript中查找要遵循的链接。根据我们的经验,Googlebot会在其索引列表中包含{{}},以便当您尝试使用{{}}填充元信息(说明,关键字,标题等)时,您的网站在Google搜索中会如下所示结果:
<强> {{meta.siteTitle}} 强>
http://my.domain.com/base/some/path/on/website
{{meta.description}}
而不是你所期望的那样:
<强>域强>
http://my.domain.com/base/some/path/on/website
这是我网域上的随机页面。这是一个很好的示例页面!
答案 1 :(得分:1)
Google建议使用hashbang(#!)和_escaped_fragment_ param来提供AJAX网站的HTML快照。
但是,对于新的Google功能,所有Google服务通常都不支持它。
目前,根据经验,我们确信GoogleBot索引网页使用HTML快照和_escaped_fragment_。您可以检查服务器访问日志,以确保Google在您的应用程序上执行此操作。
(目前和经验,谷歌没有官方提供)其他服务,如PageSpeed Insight,网站站长工具解析器,Richsnippet测试工具等:hasbang(#!)不受支持。你必须使用_escaped_fragment _。
没有。只是不要。出于不同的原因:
答案 2 :(得分:0)
Google会在我们的网站网址中查找#!,然后在#!之后搜索所有内容,并将其添加到 _escaped_fragment _ 查询参数中。一些开发人员使用真实数据创建基本的html页面,并在爬行时从服务器端提供这些页面。那么,为什么我们不在具有 _escaped_fragment _ 的服务端使用 PhantomJS 渲染相同的页面。 有关详细信息,请阅读此blog。
答案 3 :(得分:0)
可能有点过时,但为了完整性:
根据statement from May 23, 2014谷歌机器人现在能够“看到你的内容更像现代网络浏览器”。
根据他们的statement from October 14, 2015 Google弃用了AJAX抓取方案。
因此,使用HTML5历史记录API(角度为html5mode)应该对Google没有问题。