Javascript 索引angularjs应用程序-谷歌机器人模拟vs站点:域

Javascript 索引angularjs应用程序-谷歌机器人模拟vs站点:域,javascript,angularjs,indexing,web-crawler,google-crawlers,Javascript,Angularjs,Indexing,Web Crawler,Google Crawlers,我最近使用Angularjs创建了一个网页,目前我正试图通过谷歌使用pushstate对其进行索引 我做了大量的研究,发现我可以使用googlewebmaster工具中的Googlebot模拟器来模拟谷歌对我网站的访问,并查看机器人如何查看我的网页和用户看到的网页 这里的结果看起来不错,Google看到的内容与我的用户完全相同,所有页面/子页面的状态都是部分或完全 今天早上,另一种让我了解的方法是通过谷歌网站:域名来查看谷歌在我的网站上看到的内容。下面是所有页面/子页面的列表Googlehasc

我最近使用
Angularjs
创建了一个网页,目前我正试图通过谷歌使用
pushstate
对其进行索引

我做了大量的研究,发现我可以使用
googlewebmaster工具中的
Googlebot模拟器
来模拟谷歌对我网站的访问,并查看机器人如何查看我的网页和用户看到的网页

这里的结果看起来不错,
Google
看到的内容与我的用户完全相同,所有页面/子页面的状态都是
部分
完全

今天早上,另一种让我了解的方法是通过谷歌
网站:域名
来查看
谷歌
在我的网站上看到的内容。下面是所有页面/子页面的列表
Google
has
cached
,通过单击不同的链接,您可以看到相应页面的显示位置

这里是我有点担心我错过了什么,因为无论
部分
/
完全
状态如何,我的页面都是从
谷歌模拟
获得的,当我查看页面时(使用第二种方法),页面都是空白的

这是我第一次为网页编制索引,我已经尝试了好几天,但没有任何运气。有没有人能告诉我我做错了/错过了什么,或者至少指出了正确的方向?还是我应该耐心一点?

一些信息:

pushstate
与页面索引无关;它只是用来操纵浏览器历史记录,模拟URI的变化,而实际上SPA(单页应用程序,又称Angular应用程序)在内部进行路由,而无需重新加载页面。(Angular也将其称为HTML5模式)

Javascript和谷歌机器人:

虽然GoogleBot(或任何其他搜索爬虫)基本上只是一个无头浏览器,没有运行页面JavaScript代码的功能,但它不会看到动态生成的内容

为了索引SPA并向爬虫提供动态内容,您需要向机器人提供动态生成页面的静态HTML快照

如果你不想使用静态HTML快照,google机器人看到的唯一东西就是

<html>
<body>

<div ui-view="mainContent"></div>

</body>

更多信息:

为了生成这些快照,您可以使用几种SPA索引服务之一,例如(如果您自己托管,则免费;或者付费托管版本)。他们所做的是启动一个支持JS的浏览器(phantomjs),然后打开所有提供的URL(通过静态列表、爬行、sitemap.xml…),运行页面上的所有JavaScript代码,等待页面完成(通过超时或必须触发的某个事件),然后保存静态版本(=快照)这是本页的最后一页

为了确保机器人程序找到这些快照,您必须处理并提供
转义片段
,默认情况下,转义片段将是一个#,或者如果应用程序中已经使用了#,您可以用
覆盖它

如果您使用prerender.io提供的中间件(我与project无关,只是使用它),那么很多困难的事情都已经处理好了


更多信息请点击此处:

约翰内斯·弗纳的回答不正确。过去是这样的,谷歌更新文档的速度非常慢,但他们已经正式宣布,只要您使用pushstates,他们就可以处理AJAX页面,而不需要HTML快照。必应遵循套件,同时也处理美国

例如,搜索网址:yoamoseguros.com并检查那里的缓存结果。页面是以Angular构建的,完全使用AJAX和PushState加载,显示和索引都很好

忽略这些损坏的页面,几天前我做了一次失败的部署,完全破坏了重定向,把一切都搞砸了,在我有机会删除这些损坏的页面之前,谷歌有时间对它们进行索引。有一次他们把我的东西索引得很快…:/


因此,如果您使用的是PushState(HTML5模式打开),而您的页面没有被Google正确显示,那么还有其他问题。检查你的robots.txt,你是否阻止谷歌阅读静态内容,如js文件或图像?它需要访问这样的文件才能正确索引页面

另外,确保你的片段只是“#”而不是“#!”。在后一种情况下,Google会假设您想要使用html快照并尝试查找它们,但可能会失败。因此,如果您想使用更简单的pushstate版本,请确保您没有使用“#!”



最后一点,Facebook不支持推送状态。所以Facebook仍然需要快照(或者只需要index.html中的硬编码og标签,具体取决于您拥有的内容类型)。

我添加了一个悬赏,我的处境与此完全相同。嘿,我一直面临着同样的问题,因此,我一直在尝试组合一个工具来帮助解决这个问题——它预呈现您的站点,使其更为SEO友好,并且不需要后端服务。嘿,Johannes,你能看看我的后续问题吗?我使用预呈现:pushstate与页面索引有关。与散列状态相反,pushstate需要真实的URL,以便可以对页面添加书签并重新加载。其想法是重新创建与硬加载相同的屏幕,但不重新加载。如果SPA addres路径后面没有实际的URL,那么应该使用片段。如果SPA和“REST”匹配,谷歌将不会有问题抓取你的网站,你的用户将得到快速的页面更新。这不再正确。虽然谷歌在更新文档方面进展缓慢,但他们将使用pushstate为网站编制适当的索引,而不需要html快照。