aca*_*lon 33 html asp.net-mvc razor
我想阻止我的一些页面显示在搜索结果中.我的理解是我<head>在页面的部分添加了以下内容:
<meta name="robots" content="noindex,nofollow"/>
Run Code Online (Sandbox Code Playgroud)
问题是我的页面使用了一个常见的布局页面.就像是:
@{
Layout = "~/Views/Shared/_VanillaLayout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)
布局页面内部是头部,包含大量链接,脚本和元标记.我不想为可索引和不可索引的页面复制它.
根据我的研究,我发现: -
<head>部分很糟糕.希望我错过了一些东西并且有一种很好的(非坏的)方法可以做到这一点,或者我上面提到的其中一种方法毕竟不是那么糟糕.
Tom*_*mmy 68
在我看来,最简单的方法是在<head>布局文件的标记中定义一个部分,您可以选择在视图中填充数据
<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>
Run Code Online (Sandbox Code Playgroud)
现在,在您需要添加其他元数据的任何视图中,只需在视图文件的结尾/开头(模型声明之后)添加以下代码
@section AdditionalMeta
{
<meta name="robots" content="noindex,nofollow"/>
}
Run Code Online (Sandbox Code Playgroud)
由于所有Razor的东西都是在服务器端进行处理的,因此在a)JS附加项目时会出现问题,因为有些爬虫不能实现JS而b)没有后期附加到<head>标签/ etc.此外,标记为不需要意味着您只需要更新您不想编入索引的页面,而不必在应用程序的每个页面上设置变量.
您可以使用元标记将以下条件添加到<head>公共布局中的元素:
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
@if (PageData["DisableIndexing"])
{
<meta name="robots" content="noindex,nofollow"/>
}
...
</head>
<body>
...
</body>
Run Code Online (Sandbox Code Playgroud)
默认情况下,该标志将在主_ViewStart.cshtml文件中设置为禁用,即Views文件夹中的标志.这意味着默认情况下,没有页面会添加该元标记.这将是_ViewStart文件:
@{
Layout = "~/Views/Shared/_VanillaLayout.cshtml";
PageData["DisableIndexing"] = false;
}
Run Code Online (Sandbox Code Playgroud)
最后,在要禁用索引的页面上,您只需要覆盖该标志.例如,如果Foo视图不允许索引,您可以:
@model MyNamespace.MyFooModel
@{
ViewBag.Title = "Foo";
PageData["DisableIndexing"] = true;
}
...
Run Code Online (Sandbox Code Playgroud)
如果某个文件夹中的所有视图都应禁用索引,您甚至可以将另一个_ViewStart.cshtml文件添加到您刚设置的文件夹中 PageData["DisableIndexing"] = true;
作为旁注,您还可以使用ViewBag将数据从_ViewStart传递到布局,但代码有点难看,因为您无法直接访问ViewStart中的ViewBag.如果您更喜欢使用ViewBag,请参阅此答案.
如果您没有在布局页面中定义任何元标记,并且只是想从页面添加,那么您可以执行以下操作.
在您的布局页面_VanillaLayout.cshtml的head部分下使用@RenderSection如下
<head>
<meta charset="utf-8">
@RenderSection("SeoRender", false)
</head>
Run Code Online (Sandbox Code Playgroud)
现在在您的视图页面中执行以下操作
@{
Layout = "~/Views/Shared/_VanillaLayout.cshtml";
}
@section SeoRender{
@{
<title>testTitle</title>
<meta name="keyword" content="testkeyword">
<meta name="description" content="testdescription">
<meta name="author" content="testauthor">
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以在页面中单独定义特定元标记和其他内容.
| 归档时间: |
|
| 查看次数: |
27390 次 |
| 最近记录: |