我有一个使用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下的所有内容对谷歌搜索引擎优化都不是一个好习惯,所以它也不是一个选项。
有谁知道我的问题的解决方案?
由于
答案 0 :(得分:0)
我没有直接的解决方案,但建议。我了解到,几乎不可能创建对用户和搜索引擎有益的网站。像ajax和按需加载这样的主题是针对用户的,对搜索引擎来说也是坏事,反过来也是如此。例如这么多页面只有搜索引擎的文本,对用户来说太无聊了。
我建议使用不错的网址制作单独的目标网页。在目标网页的顶部,您可以采取一些措施来提高转化率,例如:播放搜索按钮或任何及以下为搜索引擎放置内容。然后使用以下内容使您的用户页面无法访问Google:
<meta name="robots" content="nofollow,noindex" />
创建两个不同的页面:一个用于您的用户,另一个用于搜索引擎。这保证您不必做任何妥协。