Google僵尸网站在使用HTML5模式路由的AngularJS网站上进行抓取

Ira*_*lis 17 seo html5 googlebot nginx angularjs

我们有一个使用HTML5路线的AngularJS网站.我刚做了一些测试"Fetch as Google"运行.结果有点令人困惑:

但是,我们已准备好让Google无法抓取我们的网站,因此我们已添加,因此Google僵尸程序会使用"?_escaped_fragment_ ="重新访问我们的网页.我们按照此说明操作,https://developers.google.com/webmasters/ajax-crawling/docs/getting-started("处理没有散列片段的页面"一节).在我们的Nginx配置中,我们有这样的东西:

if ($args ~ "_escaped_fragment_=") {
    serve the static HTML snapshots
}
Run Code Online (Sandbox Code Playgroud)

,如果我们传递_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

}
Run Code Online (Sandbox Code Playgroud)

如果我们能够更好地理解这一点会很棒,非常感谢你!

更新:
我刚看过这个,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 /站长/ fZjdyjq0n98/PZ-nlq_2RjcJ

干杯,
伊拉克利斯

小智 8

我将根据我们在上个月开发使用HTML5模式的SPA的经验来回答您的问题.

如何使用Googlebot?_escaped_fragment_ =而不是直接链接.

这实际上非常简单但容易被忽视.实际上,有两种不同的方法可以让Googlebot尝试使用escaped_fragment.第一种方法是以非html5模式运行您的站点.这意味着您的网址将采用以下格式:

http://my.domain.com/base/#!some/path/on/website

Googlebot认可#!并使用更改的URL对您的服务器进行第二次调用:

http://my.domain.com/base/?_escaped_fragment_=some/path/on/website

然后您可以按照自己的意愿处理.让Googlebot尝试_escaped_fragment_模式的第二种方法是在您提供给bot的索引页面上包含以下元标记:

<meta name="fragment" content="!">
Run Code Online (Sandbox Code Playgroud)

这将使googlebot每次看到标记时都会检查网页的其他版本.有趣的是,您可以将这两种技术结合使用,或者您可以执行我们最终要做的事情,即使用元标记在html5模式下运行.这意味着您的网址将按如下方式进行转义:

http://my.domain.com/base/some/path/on/website?_escaped_fragment_=

有趣的是,机器人不会在片段的末尾添加任何内容.但是,根据您运行的Web服务器,您可以使用与"_escaped_fragment_"文本匹配的模式轻松地将其映射到备用bot页面.有关转义片段的更多信息,请转到此处.

"以Googlebot抓取"会返回我的页面的两个不同版本,包含{{}}的源代码,并且呈现的页面看起来正确.那是什么意思?

谷歌的搜索引擎其实可以解释JavaScript的程度有限,因为2014年初欲了解更多信息,请阅读谷歌网站管理员官方博客条目在这里.但是,正如在博客文章中明确指出的那样,这有很多警告.例如:

  1. Googlebot不保证执行所有javascript代码.
  2. Googlebot会尝试在javascript中查找要关注的链接,并使用它们来帮助查找更多网页.
  3. Googlebot将通过执行尽可能多的javascript来呈现网站管理员工具中的预览(因此在呈现的版本中缺少{{}}).
  4. Googlebot不一定会使用呈现的版本来为您的索引构建有关您网站的元信息.

截至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
这是我网域上的随机页面.一个很好的示例页面!


Cis*_*eur 1

GoogleBot for Search Engine 使用 _escaped_fragment_,但我们无法确定是否适用于其他服务

Google 建议使用 hashbang (#!) 和 _escaped_fragment_ 参数来提供 AJAX 网站的 HTML 快照。

但正如谷歌的新功能一样,所有谷歌服务并不一开始就支持它。

目前,根据经验,我们确信用于索引网页的 GoogleBot 使用 HTML 快照和 _escaped_fragment_。您可以检查您的服务器访问日志,以确保 Google 在您的应用程序上执行了此操作。

(根据目前的经验,Google 没有提供任何官方信息)其他服务,如 PageSpeed Insight、Webmaster Tools 解析器、Richsnippet 测试工具等:不支持 hasbang (#!)。您必须使用_escaped_fragment_。

您是否应该使用用户代理检测来提供 HTML 快照?

不,只是不要。由于不同的原因:

  1. 您只是不知道网络上的哪些服务/机器人想要解析您的内容,并且您无法详尽无遗(例如,考虑网络上现有的所有社交网络都使用机器人来创建您的内容片段:您可以就不一一处理了)
  2. 这可以被视为伪装:根据同一 URL 上的用户类型提供不同的版本,这对于 SEO 来说基本上是错误的。