Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用Angular和ASP.NET MVC进行SEO(非SPA)_Asp.net Mvc_Angularjs_Seo_Asp.net Mvc Routing_Web Crawler - Fatal编程技术网

Asp.net mvc 使用Angular和ASP.NET MVC进行SEO(非SPA)

Asp.net mvc 使用Angular和ASP.NET MVC进行SEO(非SPA),asp.net-mvc,angularjs,seo,asp.net-mvc-routing,web-crawler,Asp.net Mvc,Angularjs,Seo,Asp.net Mvc Routing,Web Crawler,我有一个使用ASP.NETMVC和AngularJS的混合架构 我使用ASP.NET MVC进行路由,因此我没有一个单页应用程序 我在ASP视图中使用init()方法将C#ViewModel注入angular controller,如下所示: @model AddictLive.Core.ViewModel.Mobile.ViewModels.MovieViewModel @using Newtonsoft.Json <div ng-controller="MovieController

我有一个使用ASP.NETMVC和AngularJS的混合架构

我使用ASP.NET MVC进行路由,因此我没有一个单页应用程序

我在ASP视图中使用init()方法将C#ViewModel注入angular controller,如下所示:

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

<div ng-controller="MovieController" ng-init="init(@Html.Raw(JsonConvert.SerializeObject(Model)))">
     ...
</div> 
在这种情况下,我遇到了一个SEO问题,因为页面内容是按角度动态加载的,即使我的ViewModel是加载服务器端

当google机器人扫描我的页面时,所有变量始终在这里({variable}}或ng repeat=“movie in movies”)

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

我找到了{{variable}}的解决方案,如下所示:

<span ng-bind="variable">@Model.myVariable</span>
@Model.myVariable
但我对ng repeat和ng include有问题,因为我不能使用razor@Model

我已经读到,隐藏div下的所有内容对于谷歌搜索引擎优化来说都不是一个好的做法,所以它也不是一个选项

有人知道我的问题的解决办法吗


谢谢

我没有直接的解决办法,只有一个建议。我了解到,创建对用户和搜索引擎有益的网站几乎是不可能的。像ajax和按需加载这样的主题对用户来说是有害的,对搜索引擎来说是有害的,反之亦然。e、 如此多的网页只有搜索引擎的文本,这对用户来说太无聊了

我建议使用漂亮的URL创建单独的登录页。在登录页面的顶部,您可以做一些事情来提高转化率,例如,播放搜索按钮或其他内容,然后在下方放置搜索引擎的内容。然后使用以下工具使您的用户页面在google中不可见:

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


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

嗨,塞巴斯蒂安。非常感谢你的回答。如果我看一下这个google链接:我在“这个方案是否打开了隐藏的大门”中看到了这个参数图:出于这个原因,HTML快照必须包含与最终用户在浏览器中看到的内容相同的内容。为了做出同样的回应,我读了这篇文章:但我在.net中找不到实现WebBrowser的解决方案:/当然,但这不是我的意思,假设你只有一家拥有ajax视图的鞋店,你想为阿迪达斯获得一个好的排名。你可以做一个登录页。在登录页面上,你会为你的用户显示没有ajax的畅销书,下面你会写一篇关于阿迪达斯的无聊文章。深度链接直接指向“例如。在这种情况下,您向所有代理(浏览器、搜索引擎)提供相同的内容。您也可以将其混合使用,如此处:,看到左侧的这条无聊的文字!好的,Sebastian,我明白您的意思,谢谢。在我的环境中,我有一个页面列出了所有电视节目(页面使用ng repeat和angular)。由于angular,所有指向电视节目页面的链接对google(ajax)都不可见。在某些情况下,您建议我使用ASP.NET MVC(服务器端)重做此页面?不幸的是,正如我在第一条消息中所解释的,我的所有页面都使用angular制作,而且重做所有内容的时间都很长:(不,我建议混合使用。保留你的列表并为谷歌添加一些链接。我认为这对我的用户来说会很奇怪。他们会在页面上看到电视节目列表和其他不一定想说太多的链接。你认为有可能使用css显示无吗?我担心如果这些链接被删除,谷歌不会重视它们你藏起来了吗?
<meta name="robots" content="nofollow,noindex" />