1

我有一个使用 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 问题,因为页面内容是由 Angular 动态加载的,即使我的 ViewModel 是加载服务器端。

当 google bot 扫描我的页面时,所有变量总是在这里({{variable}} 或 ng-repeat="movie in movies")。

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

我找到了这样的 {{variable}} 解决方案:

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

但我对 ng-repeat 和 ng-include 有问题,因为我不能使用剃须刀 @Model。

我已经读过隐藏 div 下的所有内容对于 google seo 来说都不是一个好习惯,所以它也不是一个选项。

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

谢谢

4

1 回答 1

0

我对你没有直接的解决方案,只有一个建议。我了解到几乎不可能创建对用户和搜索引擎有益的网站。ajax 和按需加载等主题对用户不利,对搜索引擎不利,反之亦然。例如,很多页面只有搜索引擎的文本,这对用户来说太无聊了。

我建议使用漂亮的网址制作单独的登录页面。在登录页面的顶部,您可以做一些事情来提高转化率,例如播放搜索按钮或其他任何内容,然后在下方放置搜索引擎的内容。然后让你的用户页面对谷歌不可见:

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

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

于 2013-09-26T15:11:51.547 回答