通常情况下,如果我不希望Google抓取某个网页,我会将该网页添加到我的robots.txt文件中,如下所示:
User-agent: *
Disallow: /my-page
要阻止Google为该网页编制索引,我会从sitemap.xml
移除该网页,将以下元标记添加到网页的<head>
:
<meta name="robots" content="noindex">
现在,如果我使用AngularJS来处理单个页面应用程序的所有路由,那么如何阻止Google索引和/或抓取路由? Angular为每条路线的ng-view提供内容,因此<head>
中的信息在每条路线上保持不变。在这种情况下,我认为我不能添加元标记。
答案 0 :(得分:3)
如果您的根模块放在<html>
标记(<html ng-app="myApp">
)上,则可以修改<head>
中的所有属性。这样,您就可以为每个页面动态设置机器人<meta>
。您可以使用根模块中的$routeChangeSuccess事件执行此操作。如果您使用的是ui-router,则可以在路径上设置“data”属性,您可以在每次状态更改时读入该属性。您也可以使用$ rootScope从其他模块更新此值,但这不是一个好习惯。最好的方法是从子控制器/指令向您的根模块广播更改。
我有一个动态更改页面<title>
的示例,但它有点复杂,因为此应用程序正在手动引导。但是,假设<html>
标记上有ng-app =“”和ng-controller =“”指令。
以下是<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}}">
这样的内容。