2015-03-13 40 views
2

通常情況下,如果我不希望谷歌抓取網頁,我會的頁面添加到我的robots.txt文件,像這樣:阻止谷歌索引的AngularJS路線

User-agent: * 
Disallow: /my-page 

爲了防止谷歌索引該頁面,我就從我sitemap.xml刪除頁面下面的元標記添加到網頁的<head>

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

現在,如果我用AngularJS來處理所有路由單個頁面的應用程序,你如何阻止谷歌索引和/或者抓取路線? Angular爲每條路線帶來ng視圖中的內容,因此<head>中的信息在每條路線上都保持不變。我不認爲我可以在這種情況下添加元標記。

回答

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並不擅長閱讀這些屬性,因此您必須使用預渲染服務t o確保googlebot將解析<meta name="robots" content="noindex">而不是<meta name="robots" content="{{index}}">之類的內容。

+0

謝謝。我的應用程序已經預渲染SEO,我總是把根模塊放在html標籤上,所以這應該可以正常工作。 – Coop 2015-03-15 15:30:24