AngularJS内容和谷歌
AngularJS content and Google
最近我看到一些文章说谷歌现在抓取网站并呈现CSS和Javascript。谷歌自己的文章示例:http://googlewebmastercentral.blogspot.co.uk/2014/05/understanding-web-pages-better.html
我在Angular中有一个单页应用程序设置,在路由上使用HTML5模式。我的index.html
中的ng-view
是基于如下URL填充的:
app.config(function($routeProvider, $locationProvider){
$locationProvider.html5Mode(true);
$routeProvider.when("/", {
templateUrl: "/views/dashboard.html"
}).when("/portfolio", {
templateUrl: "/views/portfolio.html"
});
});
谷歌现在应该转到www.example.com/portfolio
,执行从views/portfolio.html
引入内容的javascript,并能够读取所有内容,对吗?
根据我读过的那些文章,这就是应该发生的事情。这篇文章特别详细地解释了Angular:https://weluse.de/blog/angularjs-seo-finally-a-piece-of-cake.html
问题来了。当我使用Google Webmaster Tools和Fetch
或Fetch and Render
功能来查看Google如何查看我的页面时,它不会呈现JS,只是在我的index.html
中显示初始HTML。
它有效吗?我做错什么了吗?我该如何测试它?
正如我在评论中提到的,希望这个答案能提供更多我的意思。
因此,当您申报html5Mode
时,还应包括hashPrefix
:
$locationProvider
.html5Mode(true)
.hashPrefix('!');
然后,在您的<head>
中,包括以下标签:
<meta name="fragment" content="!">
这里发生的事情是,你为历史API提供了一个后备措施,这意味着对于所有使用兼容浏览器访问的用户(基本上是现在的所有浏览器),他们将看到:
http://example.com/home/
只有在IE9这样的恐龙浏览器上,他们才会看到:
http://example.com/#!/home/
现在,这是在现实生活中,有真实的人作为访客。你特别询问了使用机器人的谷歌对其进行索引的情况。他们会尝试将example.com/home/
作为服务器上的实际目的地(意思是/home/index.html
),但这显然不存在。通过提供上面的<meta>
标签,您已经向机器人程序提供了一个提示,让其转到网站的?_escaped_fragment
版本(如index.html?_escaped_fragment=home
),并将其与实际谷歌搜索中的/home/
URL相关联。
它完全在后端,所有访问您网站的访问者仍然会看到干净的URL,这只是必要的,因为Angular在后台使用了location.hash,这在服务器端是看不到的。总而言之,您的实际用户不会受到影响,也不会有丑陋的URL,除非他们使用的浏览器不支持历史API。对于这些用户,你所做的就是让网站开始为他们工作(就像以前一样,它会被破坏)。
希望这能有所帮助!
更新
由于您使用的是MEAN堆栈,所以您也可以使用一个已经存在很长时间的不同方向,即使用HTML快照。有一些npm将提供快照(意思是渲染后的静态HTML),这些快照可以从服务器上显示的位置提供。这项技术有点过时,但它从2012年开始就存在了,并被证明是有效的。
当我做这件事的时候,我使用了grunt html快照,但还有其他的。你甚至可以使用PhantomJS来制作快照,尽管我从来没有这样做过。
- 从AngularJs获取谷歌地图对象的正确方法是什么
- 谷歌地图没有显示在带有angularjs的第二个部分视图上
- 在AngularJS应用程序中加载JSON(加载谷歌电子表格)
- 防止谷歌索引AngularJS路由
- 如何使用angularjs延迟加载谷歌jsapi图表
- 谷歌地图在angularjs中懒惰加载动态地理坐标更新
- AngularJS内容和谷歌
- AngularJS的谷歌地图-点击标记时,InfoWindow没有设置在正确的位置
- AngularJS-谷歌Chrome扩展中的动态链接断开
- 模型没有在谷歌地图监听器-angularjs中更新
- 以这种方式将谷歌图表与AngularJS集成可靠吗
- AngularJS与角度谷歌地图:添加标记通过fomr和查找我
- 信息窗口未刷新:AngularJS和谷歌地图
- 在点击处理程序中获取标记:AngularJS+谷歌地图
- angularjs超过最大缩放后的谷歌地图缩放地图
- AngularJS在谷歌地图中点击时打开窗口
- 将谷歌地图(在指令中定义)与AngularJS居中
- AngularJS谷歌地图(ng-map)图标网址不起作用
- AngularJS谷歌图表:图表范围过滤器
- 谷歌AngularJS框架——值得冒险