为mvc3 webapplication自动生成规范

Rob*_*Rob 13 c# asp.net seo asp.net-mvc-3

我想在我的网站上使用规范网址.我在互联网上阅读了一些关于它的内容,但我正在寻找一种解决方案,它将自动为我的运行时生成规范并将其添加到返回浏览器的html代码中.

我已经在互联网上找到了一个使用属性的例子,但这不是我想要的.使用属性我仍然决定哪个页面应该是规范或不是我自己,我希望每个页面都有一个自动生成的页面.我认为应该有(现有的)解决方案吗?我正在努力寻找一个好的榜样,所以任何帮助都会受到赞赏.

Bru*_*oLM 22

对于剃刀:

我做了一个扩展方法HtmlHelper:

public static MvcHtmlString CanonicalUrl(this HtmlHelper html, string path)
{
    if (String.IsNullOrWhiteSpace(path))
    {
        var rawUrl = html.ViewContext.RequestContext.HttpContext.Request.Url;
        path = String.Format("{0}://{1}{2}", rawUrl.Scheme, rawUrl.Host, rawUrl.AbsolutePath);
    }

    path = path.ToLower();

    if (path.Count(c => c == '/') > 3)
    {
        path = path.TrimEnd('/');
    }

    if (path.EndsWith("/index"))
    {
        path = path.Substring(0, path.Length - 6);
    }

    var canonical = new TagBuilder("link");
    canonical.MergeAttribute("rel", "canonical");
    canonical.MergeAttribute("href", path);
    return new MvcHtmlString(canonical.ToString(TagRenderMode.SelfClosing));
}
Run Code Online (Sandbox Code Playgroud)

获取当前URL

public static MvcHtmlString CanonicalUrl(this HtmlHelper html)
{
    var rawUrl = html.ViewContext.RequestContext.HttpContext.Request.Url;

    return CanonicalUrl(html, String.Format("{0}://{1}{2}", rawUrl.Scheme, rawUrl.Host, rawUrl.AbsolutePath));
}
Run Code Online (Sandbox Code Playgroud)

调用Razor View:

@Html.CanonicalUrl()
Run Code Online (Sandbox Code Playgroud)

  • 我意识到我正在评论一个已有一年历史的问题,但所做的只是将地址栏中的当前 URL 复制到 rel=canonical 标签。这无助于搜索引擎确定该页面的正确 URL,因为无论当前 URL 是什么,都将显示为该页面的规范 URL。这有点弄巧成拙。属性方法有什么问题?这似乎是合乎逻辑的做法。为控制器中的每个操作定义一次,其 URL 应该是什么,它就是这样,无论当前 URL 是什么。 (2认同)