我正在阅读this specification,这是Web服务器与搜索引擎搜寻器之间的协议(protocol),该协议(protocol)允许动态创建的内容对搜寻器可见。
在那里声明,为了使搜寻器能够索引html5应用程序,必须在URL中使用#!实现路由。在有角html5mode(true)中,我们摆脱了URL的此哈希部分。我想知道这是否会阻止爬虫将我的网站编入索引。

最佳答案

简短答案-不,html5mode不会破坏您的索引编制,但请继续阅读。

重要说明:Google和Bing都可以在没有HTML快照的情况下抓取基于AJAX的内容

我知道,您链接到的文档另有说明,但是大约一两年前,他们正式宣布只要您使用pushstates,它们就不需要HTML快照即可处理AJAX内容,但是很多文档都是陈旧的,但是很遗憾,它们没有更新。

使用pushstates的SEO

开箱即用地进行AJAX抓取的要求是,您正在使用pushstates更改URL。这就是Angular中的html5mode所做的事情(以及许多其他框架所做的事情)。当pushstates处于启用状态时,爬网程序将等待ajax调用完成并等待javascript更新页面后再对其进行索引。您甚至可以在路由器中更新诸如页面标题甚至元标记之类的内容,它将正确索引。本质上,您无需执行任何操作,在这种情况下,服务器端和客户端渲染的站点之间没有区别。

需要明确的是,许多SEO分析工具(例如Moz)会使用pushstate在页面上发出警告。这是因为这些工具(以及与他们交谈的代表)在撰写本文时尚未更新,因此请忽略它们。

最后,执行此操作时,请确保使用下面的片段元标记来表示而不是。如果具有该标记,则爬网程序会认为您要使用非pushstates方法,可能会导致困惑。

不带推送状态的SEO

没有理由不将推送状态与Angular一起使用,但是如果您不这样做,则需要遵循问题中链接的准则。简而言之,您可以在服务器上创建html的快照,然后使用fragment meta标签将url片段更改为“#!”。代替 ”#”。

<meta name="fragment" content="!" />

当搜寻器找到这样的页面时,它将删除url的片段部分,而是使用_escaped_fragment_参数请求url,然后您可以提供快照页面作为响应。给搜寻器一个正常的静态页面进行索引。

请注意,仅当您要触发此行为时才应使用片段元标记。如果您使用的是pushstate,并希望页面以这种方式编制索引,请不要使用此标记。

另外,在Angular中使用快照时,可以在上启用html5mode。在html5mode中,该片段是隐藏的,但从技术上讲它仍然存在,并且假设设置了片段元标记,它仍会触发相同的行为。

警告-Facebook抓取工具

尽管Google和Bing都将毫无问题地(如果您使用的是pushstates)抓取您的AJAX页面,但Facebook不会。 Facebook不了解ajax内容,但仍需要特殊的解决方案,例如专门为facebook机器人(用户代理facebookexternalhit / 1.1)提供的html快照。

编辑-我可能应该提到我已经使用所有这些版本部署了站点。两者都带有html5mode,片段元标记和快照,并且没有任何快照,仅依赖于pushstate-crawling。除了上面提到的pushstates和Facebook之外,一切都正常。

07-24 09:54