我们有一个使用HTML5路由的AngularJS站点。我刚刚做了一些测试,"Fetch as 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_=,它确实工作得很好。然而,谷歌机器人从来没有试图用这个参数爬行我们的网站,所以它从来没有爬行过快照。我们是不是错过了什么?我们是否应该在我们的Nginx conf上为Google机器人添加代理检测?像这样的东西?
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
干杯,
伊拉克利斯
发布于 2014-12-18 18:13:22
我将根据我们在上个月开发HTML5模式的SPA的经验,尝试回答您的问题。
我如何让谷歌机器人使用?_escaped_fragment_=而不是直接链接。
这实际上很简单,但很容易被忽视。事实上,有两种不同的方法可以让谷歌机器人尝试escaped_fragment。第一种方法是在非HTML5模式下运行站点。这意味着您的URL将采用以下形式:
Googlebot识别#!并使用更改后的URL向您的服务器进行第二次调用:
http://my.domain.com/base/?_escaped_fragment_=some/path/on/website
然后你就可以随心所欲地处理了。让Googlebot尝试_escaped_fragment_模式的第二种方法是在您提供给机器人的索引页面上包含以下元标记:
<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.
在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
这是我的域名上的一个随机页面。当然,这是一个很好的示例页面!
发布于 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快照?
不是的。就是不要。出于不同的原因:
发布于 2015-10-05 19:30:12
谷歌在我们的站点urls中查找#!,然后获取#!之后的所有内容,并将其添加到urls查询参数中。一些开发人员用真实数据创建基本的html页面,并在爬行时从服务器端提供这些页面。那么,为什么我们不在具有_escaped_fragment_.的服务端使用PhantomJS呈现相同的页面呢有关更多详细信息,请阅读此blog。
https://stackoverflow.com/questions/24446065
复制相似问题