SEO: дублированные URL-адреса с дефисом и без него "/" и ASP.NET MVC - PullRequest
3 голосов
/ 03 мая 2010

после прочтения этой статьи «Косой чертой или не косой» (ссылка: http://googlewebmastercentral.blogspot.com/2010/04/to-slash-or-not-to-slash.html) в центральном блоге Google Webmaster (официальном) я решил протестировать свое приложение 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?

Спасибо, Gui

Ответы [ 3 ]

2 голосов
/ 06 мая 2010

Если вы используете IIS 7, вы можете использовать расширение для перезаписи URL. ScottGu имеет сообщение в блоге об этом здесь .

В качестве альтернативы, если вы хотите сделать это в коде, вы можете наследовать от 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, заканчивающийся на / в вашем коде.

** Обратите внимание, что для этого используется стороннее пространство имен dll - System.Web.MVC.Extensibility. **

1 голос
/ 21 июня 2010

Это не имеет значения для Google, но что важно, если оба URL http://domain.com/products и http://domain.com/products/ показывают одну и ту же страницу, вам также нужно смотреть с Windows-серверов, которые ссылаются на ваш сайт, как с внешних страниц, на которых пользователь набрал http://domain.com/PRODUCTS/. как различную страницу, так как сеть чувствительна к регистру. * +1007 *

Есть обходной путь с использованием канонического мета-тега url, он сообщает s google, какое на самом деле имя страницы, поэтому избегает дублирующих страниц, которые действительно действительно дублируют

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

0 голосов
/ 03 мая 2010

вам нужно проверить URI в событии INIT и проверить URI, чтобы увидеть, если он входит с косой чертой, если это так, просто выполните перенаправление и добавьте заголовок 301 к выходному ответу.

...