SEO:带有和不带有破折号“/”和 ASP.NET MVC 的重复 URL

Posted

技术标签:

【中文标题】SEO:带有和不带有破折号“/”和 ASP.NET MVC 的重复 URL【英文标题】:SEO: Duplicated URLs with and without dash "/" and ASP.NET MVC 【发布时间】:2011-02-14 20:32:30 【问题描述】:

在阅读了 Google Webmaster Central Blog(官方博客)上的这篇文章“Slash or not to slash”(链接:http://googlewebmastercentral.blogspot.com/2010/04/to-slash-or-not-to-slash.html)后,我决定测试我的 ASP.NET MVC 应用程序。

例如: http://domain.com/products 和 http://domain.com/products/(末尾有“/”)返回代码 200,表示:Google 将其理解为两个不同的链接,很可能是“重复内容”。他们建议选择您想要的方式...带或不带破折号,并创建一个 301 永久重定向到首选方式。

因此,如果我选择不带破折号,当我尝试访问 http://domain.com/products/ 时,它将返回 301 到不带破折号的链接:http://domain.com/products。

问题是,如何使用 ASP.NET MVC 做到这一点?

谢谢, 桂

【问题讨论】:

【参考方案1】:

如果您使用 IIS 7,您可以使用 URL 重写扩展 ScottGu 有一篇关于它的博客文章 here。

或者,如果您想在代码中执行此操作,您可以从 PerRequestTask 继承。这里有一些示例代码从地址中删除 www - 这是来自Shrinkr:

public class RemoveWww : PerRequestTask

    protected override TaskContinuation ExecuteCore(PerRequestExecutionContext executionContext)
    
        const string Prefix = "http://www.";

        Check.Argument.IsNotNull(executionContext, "executionContext");

        HttpContextBase httpContext = executionContext.HttpContext;

        string url = httpContext.Request.Url.ToString();

        bool startsWith3W = url.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase);
        bool shouldContinue = true;

        if (startsWith3W)
        
            string newUrl = "http://" + url.Substring(Prefix.Length);

            HttpResponseBase response = httpContext.Response;

            response.StatusCode = (int) HttpStatusCode.MovedPermanently;
            response.Status = "301 Moved Permanently";
            response.RedirectLocation = newUrl;
            response.SuppressContent = true;
            response.End();
            shouldContinue = false;
        

        return shouldContinue ? TaskContinuation.Continue : TaskContinuation.Break;
    

您只需要检查代码中以 / 结尾的 url。

** 请注意,这确实使用了第 3 方 dll - System.Web.MVC.Extensibility 命名空间。 **

【讨论】:

我发现您发布的 Scott Gu 的链接非常有用。【参考方案2】:

这对 Google 来说并不重要,但重要的是两个 url' http://domain.com/products 和 http://domain.com/products/ 显示相同的页面,您还需要查看链接到您网站的 Windows 服务器,例如从用户输入的外部页面http://domain.com/PRODUCTS/ 也将被视为不同的页面,因为网络是案例敏感的。

使用规范的 url 元标记绕过这一点,它告诉谷歌页面名称的真正含义,因此将避免蚂蚁真正重复的重复页面

http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html

【讨论】:

【参考方案3】:

您需要检查 INIT 事件中的 URI 并检查 URI 是否带有斜杠,如果是,只需执行重定向并将 301 标头添加到输出响应中。

【讨论】:

我应该在 Application_BeginRequest 上这样做吗?

以上是关于SEO:带有和不带有破折号“/”和 ASP.NET MVC 的重复 URL的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net Core、JWT 和 OpenIdConnectServer

ASP.NET MVC - 如何用破折号替换 %20? [复制]

带有 Web 窗体的 ASP.NET 路由

带有字形图标和不同字体文本的 ASP.NET Actionlink

Jfreechart - 如何添加带有破折号的图例项?

如何在 ASP.NET MVC 中的 HTML-5 data-* 属性中使用破折号