Page 414 - AngularJS权威教程
P. 414
394 第 30 章 AngularJS 和 IE 浏览器
在我们的Angular应用中,需要根据我们所使用的URL风格让Google以不同的方式处理应用
站点。
30.4.1 hashbang语法
Google最初编写Ajax采集规范就是为了使用hashbang语法传送URL,这是一个为JS应用程序
创建永久链接的原始方法。
这需要在应用路由中使用hashPrefix(默认的)配置我们的应用:
angular.module('myApp', [])
.configure(['$location', function($location) {
$location.hashPrefix('!');
}]);
30.4.2 HTML5 路由模式
新的HTML5 pushState并不以相同的方式工作:它会修改浏览器的URL和历史记录。为了让
Angular应用“欺骗”搜索机器人,可以在header中添加一个简单的元素:
<meta name="fragment" content="!">
这个元素会让Google蜘蛛使用新的爬行规范来抓取你的站点。当它遇到这个标签时,它会使
用?_escaped_fragment=标签重新访问站点,而不是采用标准的抓取站点的方式。
假设要在$location服务中使用HTML5模式,可以像这样设置页面以使用httml5Mode:
angular.module('myApp', [])
.configure(['$routeProvider', function($routeProvider) {
$routeProvider.html5Mode(true);
}]);
查询字符串中有了_escaped_fragment_后,我们可以让后端服务器提供静态的HTML而不是
客户端应用。
现在,后端服务器可以检测请求中是否包含_escaped_fragment_字段,如果包含,我们将
提供静态HTML而不是纯Angular应用。
还可以使用代理实现这个功能,比如Apache或者Nginx,或者是一个后端服务。
如何设置超出了本书的范畴,然而,我们会使用一个NodeJS应用来讨论如何设
置它们。
30.5 服务端处理 SEO 的选项
有许多选项可以使我们的站点更好地支持搜索引擎优化(Search Engine Optimization,SEO)。
我们将会使用三种不同的方式演示如何从服务器端交付应用:
使用Node/Express中间件;
使用Apache重写URL;
使用Ngnix代理URL。