索引 angularjs 应用程序 - Googlebot 模拟与 site:domain
Indexing angularjs app - Googlebot-simulation vs site:domain
我最近使用 Angularjs
创建了一个网页,我目前正在尝试使用 pushstate
将其编入索引 Google。
我做了相当多的研究,发现我可以在 Google Webmaster tools
中使用 Googlebot-simulater
来模拟对我网站的 Google 访问,看看机器人如何查看我的网页与用户看到的内容。
这里的结果看起来不错,Google
看到的东西和我的用户完全一样,所有 pages/subpages 的状态都是 partially
或 fully
。
我今天早上得知要查看 Google
在我的网站上看到的内容的另一种方式是通过谷歌搜索 site:domainname
。这是所有 pages/subpages Google
具有 cached
的列表,通过单击不同的链接,您可以看到显示相应页面的视图。
这是我是否有点担心自己错过了什么,因为无论 partially
/fully
状态如何,当我查看我的页面时,我的页面来自 Goolgebot-simulation
页面(使用第二种方法),页面都是空白的。
这是我第一次索引网页,我已经尝试了几天,但没有任何运气。有没有人可以告诉我我在做什么 wrong/missin,或者至少指出正确的方向?还是我应该再耐心一点?
一些信息:
pushstate
与索引您的页面无关;它只是在那里操纵浏览器历史记录,模拟 URI 更改,而实际上 SPA(单页应用程序又名。您的 Angular 应用程序)在内部路由而不重新加载页面。 (Angular 也称之为 HTML5 模式)
Javascript 和 Googlebot:
虽然 google-bot(或任何其他搜索爬虫)基本上只是一个无头浏览器,没有 运行 您的页面 JavaScript 代码的功能,但它不会看到动态生成的内容。
为了索引 SPA 并将动态内容传送给爬虫,您需要提供动态生成页面的静态 HTML 快照并将其提供给机器人。
如果您不使用静态 HTML 快照,google 机器人看到的唯一东西就是
<html>
<body>
<div ui-view="mainContent"></div>
</body>
更多信息:
https://support.google.com/webmasters/answer/174992?hl=en
为了生成这些快照,您可以使用多种 SPA 索引服务之一,例如 https://prerender.io/(如果您自己托管则免费;或付费托管版本)。他们所做的是启动带有 JS-Support (phantomjs) 的浏览器,然后打开所有提供的 URL(通过静态列表、爬行、sitemap.xml ...)运行 页面上的所有 JavaScript 代码,等待页面完成(通过超时或您必须触发的特定事件),然后保存页面的静态版本(=快照)。
为了确保机器人找到那些你必须处理的快照并提供 escaped_fragment
,默认情况下它是 # 或者你用 <meta name="fragment" content="!">
覆盖它,如果 # 已经在其中使用你的申请。
如果你使用prerender.io提供的中间件(我和项目无关,只是用它)很多难的东西已经解决了。
这里有更多信息:https://developers.google.com/webmasters/ajax-crawling/docs/specification?hl=en
Johannes Ferner 的回答不正确。过去是这样,Google 更新他们的文档真的很慢,但他们已经正式宣布他们确实可以处理 AJAX 页面而不需要 HTML 快照,只要你是使用推送状态。 Bing 已跟进并处理推送状态。
例如,搜索 site:yoamoseguros.com 并检查那里的缓存结果。该页面是在 Angular 中构建的,使用 AJAX 和 pushstates 完全加载,显示和索引都很好。
并忽略损坏的页面,几天前我做了一个失败的部署,完全损坏的重定向把一切都搞砸了,Google 在我有机会删除之前有时间索引损坏的页面他们。有一次他们快速索引了我的东西... :/
因此,如果您正在使用 pushstates(html5 模式开启)并且您的页面未被 Google 正确显示,那么还有其他事情正在发生。检查您的 robots.txt,您是否阻止 Google 读取 js 文件或图像等静态内容?它需要访问这样的文件才能正确索引页面。
此外,请确保您的片段只是“#”而不是“#!”。在后一种情况下,Google 将假定您要使用 html 快照并尝试找到它们,但可能会失败。因此,如果您想使用更简单的 pushstate 版本,请确保您没有使用“#!”。
最后一点,Facebook 不 支持推送状态。所以 Facebook 仍然需要快照(或者只是 index.html 中的硬编码 og 标签,具体取决于您拥有的内容类型)。
我最近使用 Angularjs
创建了一个网页,我目前正在尝试使用 pushstate
将其编入索引 Google。
我做了相当多的研究,发现我可以在 Google Webmaster tools
中使用 Googlebot-simulater
来模拟对我网站的 Google 访问,看看机器人如何查看我的网页与用户看到的内容。
这里的结果看起来不错,Google
看到的东西和我的用户完全一样,所有 pages/subpages 的状态都是 partially
或 fully
。
我今天早上得知要查看 Google
在我的网站上看到的内容的另一种方式是通过谷歌搜索 site:domainname
。这是所有 pages/subpages Google
具有 cached
的列表,通过单击不同的链接,您可以看到显示相应页面的视图。
这是我是否有点担心自己错过了什么,因为无论 partially
/fully
状态如何,当我查看我的页面时,我的页面来自 Goolgebot-simulation
页面(使用第二种方法),页面都是空白的。
这是我第一次索引网页,我已经尝试了几天,但没有任何运气。有没有人可以告诉我我在做什么 wrong/missin,或者至少指出正确的方向?还是我应该再耐心一点?
一些信息:
pushstate
与索引您的页面无关;它只是在那里操纵浏览器历史记录,模拟 URI 更改,而实际上 SPA(单页应用程序又名。您的 Angular 应用程序)在内部路由而不重新加载页面。 (Angular 也称之为 HTML5 模式)
Javascript 和 Googlebot:
虽然 google-bot(或任何其他搜索爬虫)基本上只是一个无头浏览器,没有 运行 您的页面 JavaScript 代码的功能,但它不会看到动态生成的内容。
为了索引 SPA 并将动态内容传送给爬虫,您需要提供动态生成页面的静态 HTML 快照并将其提供给机器人。
如果您不使用静态 HTML 快照,google 机器人看到的唯一东西就是
<html>
<body>
<div ui-view="mainContent"></div>
</body>
更多信息: https://support.google.com/webmasters/answer/174992?hl=en
为了生成这些快照,您可以使用多种 SPA 索引服务之一,例如 https://prerender.io/(如果您自己托管则免费;或付费托管版本)。他们所做的是启动带有 JS-Support (phantomjs) 的浏览器,然后打开所有提供的 URL(通过静态列表、爬行、sitemap.xml ...)运行 页面上的所有 JavaScript 代码,等待页面完成(通过超时或您必须触发的特定事件),然后保存页面的静态版本(=快照)。
为了确保机器人找到那些你必须处理的快照并提供 escaped_fragment
,默认情况下它是 # 或者你用 <meta name="fragment" content="!">
覆盖它,如果 # 已经在其中使用你的申请。
如果你使用prerender.io提供的中间件(我和项目无关,只是用它)很多难的东西已经解决了。
这里有更多信息:https://developers.google.com/webmasters/ajax-crawling/docs/specification?hl=en
Johannes Ferner 的回答不正确。过去是这样,Google 更新他们的文档真的很慢,但他们已经正式宣布他们确实可以处理 AJAX 页面而不需要 HTML 快照,只要你是使用推送状态。 Bing 已跟进并处理推送状态。
例如,搜索 site:yoamoseguros.com 并检查那里的缓存结果。该页面是在 Angular 中构建的,使用 AJAX 和 pushstates 完全加载,显示和索引都很好。
并忽略损坏的页面,几天前我做了一个失败的部署,完全损坏的重定向把一切都搞砸了,Google 在我有机会删除之前有时间索引损坏的页面他们。有一次他们快速索引了我的东西... :/
因此,如果您正在使用 pushstates(html5 模式开启)并且您的页面未被 Google 正确显示,那么还有其他事情正在发生。检查您的 robots.txt,您是否阻止 Google 读取 js 文件或图像等静态内容?它需要访问这样的文件才能正确索引页面。
此外,请确保您的片段只是“#”而不是“#!”。在后一种情况下,Google 将假定您要使用 html 快照并尝试找到它们,但可能会失败。因此,如果您想使用更简单的 pushstate 版本,请确保您没有使用“#!”。
最后一点,Facebook 不 支持推送状态。所以 Facebook 仍然需要快照(或者只是 index.html 中的硬编码 og 标签,具体取决于您拥有的内容类型)。