asp.net mvc – 包含元关键字和描述等SEO信息的策略
我想知道什么,如果有一个,是在ASP.NET MVC(我正在使用v3 RC)视图中包含SEO内容(如元描述和关键字)的最佳实践。 我最初的计划是创建一个动作filter,全局应用于动作,从数据存储中提取相关数据并将其作为viewdata传递给视图。
我的问题是:1)您是否预见到这种方法有任何问题? 2)还有更合适的方法吗? 3)在这里使用什么是合适的数据存储 – 我应该从数据库中提取(或者如果数据可用则缓存),使用资源文件,配置文件等?
提前致谢,
J.P
我将在我的控制器操作上使用属性,并在方法OnExecutingAction
中将它们添加到我的基本控制器中的OnExecutingAction
。
把它放在控制器而不是视图中的动机是它实际上比关于视图的更多信息。 并且在返回不同类型的格式(如json或xml)时可以使用它。
调节器
class MyController { [MetaKeywords("hello,world,something,else")] [MetaDescription("Tells you how to greet the world")] ActionResult Hello() { return View(); } }
您始终可以使用资源文件而不是纯字符串。
在基础控制器中 :
protected override void OnActionExecuting(ActionExecutingContext filterContext) { var keywords = filterContext.ActionDescriptor.GetCustomAttributes(typeof(MetaKeywordsAttribute), false); if (keywords.Length == 1) ViewData["MetaKeywords"] = keywords.Value; var description = filterContext.ActionDescriptor.GetCustomAttributes(typeof(MetaDescriptionAttribute), false); if (description.Length == 1) ViewData["MetaDescription"] = description.Value; base.OnActionExecuting(filterContext); }
在你的布局中
以下是您的问题的答案:=)
1)您是否预见到这种方法有任何问题?
不。 这是一个很好的方法。
2)还有更合适的方法吗?
刚给你一个替代品。
3)在这里使用什么是合适的数据存储 – 我应该从数据库中提取(或者如果数据可用则缓存),使用资源文件,配置文件等?
我会用纯文本(如果你不需要支持多种语言),或者在资源文件中。 除非更改视图或控制器(无论如何都需要重新编译),否则通常不会更改此信息。 因此,不需要更动态的来源。
另一种方法是简单地在_Layout.cshtml中使用:
@ViewBag.Title
在您的视图中,您可以为每个视图单独定义相应的标题/描述/关键字:
例如在Home / Index.cshtml中使用:
@{ ViewBag.Title = "Home page title | samplePage.com"; ViewBag.MetaDescription = "Home page meta description"; ViewBag.MetaKeywords = "meta keywords keyword home page"; }
将可选部分添加到布局页面:
@RenderSection("ExtraHeadContent", required: false)
现在,您可以使用@section在任何内容页面上定义元标记:
@{ Layout = "~/Views/Shared/_Layout.cshtml"; } @section ExtraHeadContent { } The main content
请参阅Marcin Doboz的带有默认内容的可选剃刀部分 。
如果您使用母版页,则可以创建内容占位符以容纳关键字和描述,您可以在模型中的数据上在视图上呈现这些关键字和描述。 模型中的数据可以直接来自数据库字段,也可以来自基于其他东西生成它的帮助程序!
母版页:
视图:
1)您是否预见到这种方法有任何问题?
没有。
2)还有更合适的方法吗?
我会为此编写一个辅助方法,或者使用子操作以及Html.Action
帮助程序,因为您将从数据库中提取数据。
3)在这里使用什么是合适的数据存储 – 我应该从数据库中提取(或者如果数据可用则缓存),使用资源文件,配置文件等?
这取决于您的网站正在做什么,如何组织,存储的信息在哪里,……