SEO: дублированные URL-адреса с тире и без него / и ASP.NET MVC

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

Спасибо, Ги


person Guillermo Guerini    schedule 02.05.2010    source источник


Ответы (3)


Если вы используете IIS 7, вы можете использовать расширение URL Rewrite Extension. У 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. **

person lancscoder    schedule 06.05.2010
comment
Я нашел ссылку Скотта Гу, которую вы опубликовали, очень полезной. - person NGRhodes; 26.08.2010

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

Здесь нет возможности использовать метатег канонического URL-адреса, он сообщает Google, какое имя страницы на самом деле, так что вы избежите дублирования страниц, которые действительно дублируются.

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

person TheAlbear    schedule 21.06.2010

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

person SBR    schedule 02.05.2010
comment
Должен ли я сделать это в Application_BeginRequest? - person Guillermo Guerini; 03.05.2010