在那里声明,为了使爬虫能够索引html5应用程序,必须使用#来实现路由!在URL中.在角度html5mode(true)中,我们摆脱了URL的这个散列部分.我想知道这是否会阻止抓取工具索引我的网站.
解决方法
重要提示:Google和Bing都可以在没有HTML快照的情况下抓取基于AJAX的内容
我知道,你链接到的文档说不然,但大约一两年前他们正式宣布他们处理AJAX内容而不需要HTML快照,只要你使用pushstates,但很多文档都很旧,很遗憾没有更新.
使用pushstates的SEO
AJAX抓取开箱即用的要求是您使用pushstates更改URL.这正是Angular中的html5mode(以及许多其他框架所做的).当pushstates开启时,爬虫将等待ajax调用完成,并且javascript会在它们编制索引之前更新页面.您甚至可以更新路由器中的页面标题甚至元标记等内容,它将正确编制索引.从本质上讲,您不需要做任何事情,在这种情况下,服务器端和客户端呈现的站点之间没有区别.
需要说明的是,很多SEO分析工具(如Moz)会在使用pushstates的页面上发出警告.那是因为那些工具(以及他们的代表,如果你和他们交谈)在撰写时并不是最新的,所以忽略它们.
最后,确保在执行此操作时不使用下面的片段元标记.如果你有这个标记,爬虫会认为你想要使用非pushstates方法,事情可能会搞砸.
没有pushstates的SEO
没有理由不使用带有Angular的pushstates,但如果不这样做,则需要遵循问题中链接的指南.简而言之,您在服务器上创建html的快照,然后使用片段元标记将您的url片段更改为“#!”代替 ”#”.
<Meta name="fragment" content="!" />
当抓取工具找到这样的页面时,它会删除网址的片段部分,而是使用参数_escaped_fragment_请求网址,您可以提供快照页面作为响应.为爬虫提供正常的静态页面以进行索引.
请注意,只有在您想要触发此行为时才应使用片段元标记.如果您正在使用pushstates并希望页面以这种方式编制索引,请不要使用此标记.
此外,在Angular中使用快照时,您可以启用html5mode.在html5mode中,片段是隐藏的,但它仍然在技术上存在,并且仍会触发相同的行为,假设已设置片段元标记.
警告 – Facebook爬虫
虽然Google和Bing都会毫无问题地抓取您的AJAX页面(如果您使用的是pushstates),Facebook则不会. Facebook不了解ajax内容,仍然需要特殊的解决方案,例如专门为facebook bot(用户代理facebookexternalhit / 1.1)提供的html快照.
编辑 – 我应该提一下,我已经部署了所有这些版本的网站.使用html5mode,片段元标记和快照,没有任何快照,只依赖于pushstate-crawling.除了如上所述的pushstates和Facebook之外,一切正常.