阻止Google为AngularJS路由编制索引

时间:2015-03-13 15:10:29

标签: javascript html angularjs seo robots.txt

通常情况下,如果我不希望Google抓取某个网页,我会将该网页添加到我的robots.txt文件中,如下所示:

User-agent: *
Disallow: /my-page

要阻止Google为该网页编制索引,我会从sitemap.xml移除该网页,将以下元标记添加到网页的<head>

<meta name="robots" content="noindex">

现在,如果我使用AngularJS来处理单个页面应用程序的所有路由,那么如何阻止Google索引和/或抓取路由? Angular为每条路线的ng-view提供内容,因此<head>中的信息在每条路线上保持不变。在这种情况下,我认为我不能添加元标记。

1 个答案:

答案 0 :(得分:3)

如果您的根模块放在<html>标记(<html ng-app="myApp">)上,则可以修改<head>中的所有属性。这样,您就可以为每个页面动态设置机器人<meta>。您可以使用根模块中的$routeChangeSuccess事件执行此操作。如果您使用的是ui-router,则可以在路径上设置“data”属性,您可以在每次状态更改时读入该属性。您也可以使用$ rootScope从其他模块更新此值,但这不是一个好习惯。最好的方法是从子控制器/指令向您的根模块广播更改。

我有一个动态更改页面<title>的示例,但它有点复杂,因为此应用程序正在手动引导。但是,假设<html>标记上有ng-app =“”和ng-controller =“”指令。

以下是状态更改事件:https://github.com/danmindru/angular-boilerplate-study/blob/master/src/app/_app-main/_app-main.controller.js#L14-L24

以下是广播的监听者:https://github.com/danmindru/angular-boilerplate-study/blob/master/src/app/_app-main/_app-main.controller.js#L38-L40

以下是广播的触发方式:https://github.com/danmindru/angular-boilerplate-study/blob/master/src/app/profile-feature/customer-page/customer-page.controller.js#L12

以下是<title>绑定:https://github.com/danmindru/angular-boilerplate-study/blob/master/src/index.html#L4

但是,Google并不擅长阅读这些属性,因此您必须使用预呈现服务来确保googlebot会解析<meta name="robots" content="noindex">而不是像<meta name="robots" content="{{index}}">这样的内容。