首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用HTML5模式路由在AngularJS站点上爬行谷歌机器人

使用HTML5模式路由在AngularJS站点上爬行谷歌机器人
EN

Stack Overflow用户
提问于 2014-06-27 15:15:58
回答 4查看 15.1K关注 0票数 17

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

然而,我们已经为谷歌无法抓取我们的网站做好了准备,所以我们已经添加了,所以谷歌机器人用“?_escaped_fragment_=”重新访问了我们的页面。我们遵循了这个,https://developers.google.com/webmasters/ajax-crawling/docs/getting-started ( "3.处理没有散列片段的页面“一节)。在我们的Nginx配置中,我们有如下内容:

代码语言:javascript
复制
if ($args ~ "_escaped_fragment_=") {
    serve the static HTML snapshots
}

,如果我们自己传递_escaped_fragment_=,它确实工作得很好。然而,谷歌机器人从来没有试图用这个参数爬行我们的网站,所以它从来没有爬行过快照。我们是不是错过了什么?我们是否应该在我们的Nginx conf上为Google机器人添加代理检测?像这样的东西?

代码语言:javascript
复制
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。所以,看起来在使用手动工具(像Google一样抓取)时,我们应该传递给自己#!或者在正确的地方使用?_escaped_fragment_=。实际上,如果在我们的示例中传递?_escaped_fragment_=,我确实会看到我们创建的HTML快照。

这是真的吗?这真的是它的工作方式吗?

更新2在此帖子的底部,谷歌的一名员工验证,对于谷歌网站管理员“像谷歌一样获取”,您需要自己手动传递_escaped_fragment_=参数https://productforums.google.com/forum/#!msg/webmasters/fZjdyjq0n98/PZ-nlq_2RjcJ

干杯,

伊拉克利斯

EN

回答 4

Stack Overflow用户

发布于 2014-12-18 18:13:22

我将根据我们在上个月开发HTML5模式的SPA的经验,尝试回答您的问题。

我如何让谷歌机器人使用?_escaped_fragment_=而不是直接链接。

这实际上很简单,但很容易被忽视。事实上,有两种不同的方法可以让谷歌机器人尝试escaped_fragment。第一种方法是在非HTML5模式下运行站点。这意味着您的URL将采用以下形式:

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_模式的第二种方法是在您提供给机器人的索引页面上包含以下元标记:

代码语言:javascript
复制
<meta name="fragment" content="!">

这将使googlebot每次看到标签时都会检查网页的另一个版本。有趣的是,您可以同时使用这两种技术,也可以像我们最终所做的那样,在html5模式下使用meta标记运行。这意味着您的URL将按如下方式进行转义:

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

有趣的是,机器人不会将任何东西放在片段的末尾。但是,根据您运行的bot服务器的不同,您可以很容易地将其与"_escaped_fragment_“文本匹配的模式映射到您的备用机器人页面。有关转义片段的更多信息,请访问here

"Fetch as Googlebot“返回我的页面的两个不同版本,源代码带有{{}},呈现的页面看起来是正确的。那是什么意思?

自2014年初以来,谷歌的机器人实际上可以在有限的程度上解释JavaScript。有关更多信息,请阅读google网站管理员here上的官方博客。然而,正如在博客文章中明确指出的那样,这伴随着许多警告。例如:

Googlebot不保证执行所有的code.

  • Googlebot pages.

  • Googlebot version).

  • Googlebot将尝试在
  1. 中查找要遵循的链接,并使用它们来帮助查找更多javascript将通过尽可能多地执行javascript在网站管理员工具中呈现预览(因此,呈现的javascript中缺少{{}}将不一定使用呈现的版本来构建关于您的站点的元信息以用于其索引。

18/12/2014中,我们仍然不确定Googlebot是否真的可以在渲染模式下从中提取任何信息,以用于其索引,而不是在javascript中查找要遵循的链接。根据我们的经验,Googlebot将在其索引列表中包含{{}},以便当您尝试使用{{}}填充元信息(描述、关键字、标题等)时。你的网站在谷歌搜索结果中是这样的:

{{meta.siteTitle}}

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

{{meta.description}}

而不是您所期望的,可能如下所示:

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

这是我的域名上的一个随机页面。当然,这是一个很好的示例页面!

票数 8
EN

Stack Overflow用户

发布于 2014-07-07 21:04:08

搜索引擎的GoogleBot使用_escaped_fragment_,但我们不能确定其他服务

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

但对于新的谷歌功能,所有的谷歌服务都不支持它。

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

(根据经验,谷歌目前还没有提供任何官方服务)其他服务,如PageSpeed洞察、网站管理员工具解析器、Richsnippet测试工具等: hasbang (#!)不受支持。您必须使用_escaped_fragment_。

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

不是的。就是不要。出于不同的原因:

  1. 你不知道网络上的哪些服务/机器人想要解析你的内容,而且你不可能详尽无遗(例如,想一想存在于网络上的所有社交网络使用机器人来创建你的内容片段:你不能逐个处理它们)
  2. 这可以被认为是斗篷:根据同一网址上的用户类型提供不同的版本,这对于搜索引擎优化来说基本上是错误的。
票数 1
EN

Stack Overflow用户

发布于 2015-10-05 19:30:12

谷歌在我们的站点urls中查找#!,然后获取#!之后的所有内容,并将其添加到urls查询参数中。一些开发人员用真实数据创建基本的html页面,并在爬行时从服务器端提供这些页面。那么,为什么我们不在具有_escaped_fragment_.的服务端使用PhantomJS呈现相同的页面呢有关更多详细信息,请阅读此blog

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24446065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档