SEO与Angular和ASP.NET MVC(不是SPA)

时间:2013-09-26 12:20:47

标签: asp.net-mvc angularjs seo asp.net-mvc-routing web-crawler

我有一个使用ASP.NET MVC和AngularJS的混合架构。

我使用ASP.NET MVC进行路由,所以我没有单个页面应用程序。

我在我的ASP视图中使用init()方法将C#ViewModel注入角度控制器:

@model AddictLive.Core.ViewModel.Mobile.ViewModels.MovieViewModel
@using Newtonsoft.Json

<div ng-controller="MovieController" ng-init="init(@Html.Raw(JsonConvert.SerializeObject(Model)))">
     ...
</div> 

要在我的Angular控制器中获取我的ViewModel,我使用:

$scope.init = function (movieViewModel) {
    $scope.property1= movieViewModel.property1;
    $scope.property2= movieViewModel.property2;
};

在这种情况下,我遇到了SEO问题,因为即使我的ViewModel是加载服务器端,页面内容也是由Angular动态加载的。

当google bot扫描我的页面时,所有变量总是在这里({{variable}}或ng-repeat =“电影中的电影”)。

我在网上找到的所有解决方案都基于标签#!对于单页应用程序,但我的网站不是单页应用程序。

我使用以下方法找到了{{variable}}的解决方案:

<span ng-bind="variable">@Model.myVariable</span>

但是我有ng-repeat和ng-include的问题,因为我不能使用razor @Model。

我已经读过隐藏div下的所有内容对谷歌搜索引擎优化都不是一个好习惯,所以它也不是一个选项。

有谁知道我的问题的解决方案?

由于

1 个答案:

答案 0 :(得分:0)

我没有直接的解决方案,但建议。我了解到,几乎不可能创建对用户和搜索引擎有益的网站。像ajax和按需加载这样的主题是针对用户的,对搜索引擎来说也是坏事,反过来也是如此。例如这么多页面只有搜索引擎的文本,对用户来说太无聊了。

我建议使用不错的网址制作单独的目标网页。在目标网页的顶部,您可以采取一些措施来提高转化率,例如:播放搜索按钮或任何及以下为搜索引擎放置内容。然后使用以下内容使您的用户页面无法访问Google:

<meta name="robots" content="nofollow,noindex" />

创建两个不同的页面:一个用于您的用户,另一个用于搜索引擎。这保证您不必做任何妥协。