301 Permanent Redirect означает, что ресурс навсегда перемещен на новый URI. Стандартный Response.Redirect() возвращает статус код 302 и означает временное перемещение ресурса, и соответственно принимается поисковыми системами как временное решение.

Так что же нужно для создания постоянного редиректа? Приведу пример кода из global.asax, который осуществляет редирект всех запросов к сайту без префикса www на тот же самый урл с необходимым префиксом:

       protected void Application_BeginRequest(object sender, EventArgs e) {
            var host = Request.Url.Host;
            if (host.Equals("progblog.ru", StringComparison.OrdinalIgnoreCase)) {
                var newUrl = new UriBuilder(Request.Url);
                newUrl.Host = "www." + host;
                Response.StatusCode = 301;
                Response.Status = "301 Moved Permanently";
                Response.AddHeader("Location", newUrl.Uri.AbsoluteUri);
                Response.End();
                return;
            }
        }

Например при запросе http://progblog.ru/Posts/ASP-NET-301-Redirect сайт перенаправит запрос к http://www.progblog.ru/Posts/ASP-NET-301-Redirect. Что является полезным для поисковых машин.

В обзоре «ASP.NET 4.0 и Visual Studio 2010 Web Development Beta 1» обещается поддержка данного вида редиректа в следующем виде:

       RedirectPermanent("/newpath/foroldcontent.aspx");

Приятного вам программирования :)