Metrika

31 марта 2011 г.

Редирект 301 (Moved Permanently) в IIS 7

Поисковые машины считают, что сайты http://site.ru и http://www.site.ru являются разными сайтами. Поэтому, если оба этих URL ведут на один и тот же контент, поисковая машина может понижать ваш сайт в результатах выдачи за дублирущийся контент. Чтобы такого не произошло, нужно в файле robots.txt указать строку:
Host: www.site.ru
В которой указывается основное доменное имя (все равно какое выбрать с www или без него, дело вкуса). А со второго имени нужно сделать редирект с кодом 301 на основное доменное имя.
В IIS 7 редирект можно сделать несколькими способами, правда не все подходят для этого случая.
1. Самый простой способ сделать редирект - это выделить в IIS в папке Sites необходимый домен и в основной панели два раза тыкнуть HTTP Redirect. В открывшемся окне установить галку Redirect requests to this destination и указать необходимый URL, ниже в выпадающем списке выбрать код редиректа 301 и в меню справа тыкнуть Apply. Подробнее и с картинками можно почитать тут: http://www.trainsignaltraining.com/windows-server-2008-http-redirection .
Этот способ для рассматриваемого случая не подходит, т.к. он предполагает наличие двух разных сайтов на одном сервере или редирект с одного сервера на другой.

2. Второй способ: установить дополнительный модуль для ASP.NET URL Rewrite Module 2.0, а далее прописать правила редиректа в Web.Config:
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Redirect to WWW" stopProcessing="true">
          <match url=".*" />
          <conditions>
            <add input="{HTTP_HOST}" pattern="^site.ru$" />
          </conditions>
          <action type="Redirect" url="http://www.site.ru/{R:0}" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

3. Третий способ в Global.asax добавить метод  Application_BeginRequest со следующим содержанием:
    void Application_BeginRequest(object sender, EventArgs e)
    {
        string req_domain = HttpContext.Current.Request.Url.ToString().ToLower();

        if (req_domain.Contains("http://site.ru"))
        {
            req_domain = req_domain.Replace("http://site.ru", "http://www.site.ru");
           
            Response.Clear();
            Response.StatusCode = 301;
            Response.AddHeader("Location", req_domain);
            Response.End();
        }
    }


2 комментария :

  1. На сайте включила SEF (Joomla), всё работает. Если переходить по ссылкам сайта с главной страницы — sef-ссылки. Переходя по ссылкам с поиска, не происходит автоматическая переадресация на чпу-ссылки, а хотелось бы. Открывается страница по старому адресу.

    Интересует один вопрос: существует ли такое правило, которое делает переадресацию с динамических страниц на статические, которое бы выполнялось и для страниц, которые уже находятся в индексе поисковика?

    ОтветитьУдалить
  2. В Joomla не специалист, но думаю все реально. Я понял вопрос так, что на сайте есть уже динамический контент, например www.site.ru/news.php?id=1, и эта ссылка уже проиндексирована, а хочется, что бы на туже новость вела ЧПУ-ссылка типа www.site.ru/mega_novost.html и что б поисковики об этом знали.
    Я бы поступил следующим образом:
    1. Если реквест приходит на страницу news.php, то по ID определять на какую ЧПУ-ссылку надо переадресовать клиента и возвращать Moved Permanently на необходимую ЧПУ-ссылку;
    2. Если реквест приходит на ЧПУ-ссылку, то определяется динамическая страница, на которую надо перекинуть реквест и туда перекидывается, только это делается на сервере и клиент об этом ни чего не знает.
    Я думаю на Joomla такое можно настроить, только не знаю как.
    Вообще мой опыт работы с редиректом 301 был не очень положительным. Я переезжал с одного домена на другой и в итоге где-то через неделю после переезда у меня трафик с яндекса уменьшился раза в три. Так что, когда я на домене www.asvix.ru делал ЧПУ-ссылки, я не стал на старых ссылках, которые были в индексе, делать редирект 301, так что работают и те, и другие.

    ОтветитьУдалить