【问题标题】:Prevent Google indexing an AngularJS route防止 Google 索引 AngularJS 路由
【发布时间】:2015-03-13 15:10:29
【问题描述】:

通常,如果我不想让 Google 抓取页面,我会像这样将该页面添加到我的 robots.txt 文件中:

User-agent: *
Disallow: /my-page

为防止 Google 将该页面编入索引,我将从我的 sitemap.xml 中删除该页面,并将以下元标记添加到该页面的 <head>

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

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

【问题讨论】:

    标签: javascript html angularjs seo robots.txt


    【解决方案1】:

    如果您的根模块放在&lt;html&gt; 标记(&lt;html ng-app="myApp"&gt;)上,您可以修改&lt;head&gt; 中的所有属性。这允许您为每个页面动态设置机器人&lt;meta&gt;。您可以使用根模块中的 $routeChangeSuccess 事件来做到这一点。如果您使用的是 ui-router,您可以在路由上设置一个“数据”属性,您可以在每次状态更改时读取该属性。您也可以使用 $rootScope 从其他模块更新此值,但这不是一个好习惯。最好的方法是从子控制器/指令广播对根模块的更改。

    我有一个动态更改页面&lt;title&gt; 的示例,但它有点复杂,因为这个应用程序是手动引导的。但是,假设&lt;html&gt; 标签上有一个 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

    这是&lt;title&gt; 绑定:https://github.com/danmindru/angular-boilerplate-study/blob/master/src/index.html#L4

    但是,Google 并不擅长读取这些属性,因此您必须使用预渲染服务来确保 googlebot 将解析 &lt;meta name="robots" content="noindex"&gt; 而不是 &lt;meta name="robots" content="{{index}}"&gt; 之类的东西。

    【讨论】:

    • 谢谢。我的应用程序已经为 SEO 进行了预渲染,并且我总是将根模块放在 html 标签上,所以这应该可以正常工作。
    猜你喜欢
    • 2014-10-28
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    相关资源
    最近更新 更多