提问者:小点点

ASP.NET mvc-不同的视图在布局页内的<head>中需要不同的元标记


我想停止我的几个页面显示在搜索结果中。我的理解是,我将以下内容添加到页面的部分:

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

问题是我的页面使用了一个通用的布局页面。类似于:

@{
    Layout = "~/Views/Shared/_VanillaLayout.cshtml";
}

布局页面内部是head部分,包含大量链接、脚本和元标记。我不想为可索引和不可索引的页面重复这一点。

从我的研究中我发现:-

  • 有多个节是错误的。
  • 将robot meta标记放在head之外是不好的。
  • 使用robots.txt超出了我的需要,而且是错误的。
  • 试图将模型传递到布局中有点矫枉过正(需要所有模型都从某个基继承,而许多页面纯粹是表示,甚至没有模型),而且是不好的。

希望,我错过了一些东西,有一个好的(非坏的)方法来做到这一点,或者我上面提到的方法之一毕竟不是那么坏。


共1个答案

匿名用户

在我看来,最简单的方法是在布局文件的标记中定义一个节,您可以选择在视图中填充数据

<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title - My ASP.NET MVC Application</title>
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
    <meta name="viewport" content="width=device-width" />
    <!-- Adding a RenderSection here, mark it as not required-->
    @RenderSection("AdditionalMeta", false)
    @Styles.Render("~/Content/css")
</head>

现在,在任何需要添加额外元数据的视图中,只需在视图文件的结尾/开头(在模型声明之后)添加以下代码

@section AdditionalMeta
{
    <meta name="robots" content="noindex,nofollow"/>
}

因为所有的Razor内容都是在服务器端处理的,所以在以下情况下不会有问题:a)如果某些爬虫不实现JS,JS附加项;b)不需要对tag/等进行后期附加。此外,标记为“不需要”意味着您只需要更新不想被索引的页面,并且不必在应用程序中的每个页面上设置变量。