Постраничный редирект 301. Редирект при смене расширение файлов. Простая переадресация директивой Redirect

301-ая ошибка (301 Permament Redirect), возвращаемая при обращении к определенному адресу страницы, означает, что сайт был на постоянной основе перенесен на новый адрес, также указанный в HTTP заголовке. Как пользователи, зашедшие через браузер, так и поисковые боты будут перенаправляться по новому адресу, при этом, для поисковиков все свойства старого адреса (страницы) будут переданы новому URL . При 301 редиректе произойдет склейка старого и нового адресов: параметры вроде PageRank и тИЦ, а также вес страницы и ссылочный вес старого адреса будет передан новому URL .

Редирект с номером ошибки 301 (moved permanently) это наилучший способ сохранить рейтинг сайта в поисковых системах при переносе его на новый домен или смене системы управления контентом. Переадресацию можно выполнить несколькими способами, в зависимости от установленного программного обеспечения.

301 редирект в.htaccess

При использовании апача (apache) на сервере, переадресацию можно просто выполнить с помощью файла.htaccess, однако, при этом, не забыть включить модули mod_alias (для поддержки директив Redirect, RedirectPermanent и RedirectMatch) и/или mod_rewrite (для использования реврайта) в php.ini.

Редирект с помощью директивы Redirect или RedirectPermanent модуля mod_alias

Недостатком данного способа является то, что все адреса, которые необходимо перенаправить, нужно перечислять один за одним, каждый отдельно. Также можно использовать RedirectPermanent для аналогичных целей.

Редирект с помощью директивы RedirectMatch

Этот редирект подобен предыдущему, за исключением того, что можно задавать регулярное выражение для старых URL адресов. Допустим, при смене движка с PHP на ASP , можно старые адреса перенаправить следующим образом:

RedirectMatch /(.*).php$ /$1.aspx

Редирект с помощью директивы RewriteRule модуля mod_rewrite

Для использования директивы RewriteRule необходимо удостовериться, что в httpd.conf подключен модуль mod_rewrite, а также влючена опция FollowSymLinks. Использование реврайт модуля дает много возможностей для перенаправления страниц на новые адреса.

Перенаправление домена с www на не-www

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.(.*)
RewriteRule ^(.*)$ http://%1/$1

или альтернативный, более понятный синтаксис

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.com$
RewriteRule ^(.*)$ http://domain.com/$1

Редирект запросов с не-www на домен с www префиксом

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^(.*)$ http://www.domain.com/$1

или же альтернативный вариант

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.(.*)
RewriteRule ^(.*)$ http://www.%1/$1

Редирект с помощью скрипта (отправки заголовков)

Редирект запросов можно осуществлять также с помощью скриптов, отправляя клиенту необходимые заголовки.

PHP редирект

ASP редирект


ASP .NET редирект


private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = “301 Moved Permanently”;
Response.AddHeader(“Location”,“http://www.new-url.com”);
}

ColdFusion редирект


JSP (Java) редирект

CGI PERL

$q = new CGI ;
print $q->redirect(“http://www.new-url.com/”);

Ruby on Rails

def old_action
headers[“Status”] = “301 Moved Permanently”
redirect_to “http://www.new-url.com/”
end

Случается такое, что веб-страница или весь сайт целиком переезжает на новый URL-адрес навсегда. В этом случае необходимо прописывать 301 редирект. Что это? 301 редирект — это перенаправление посетителей и поисковых роботов с одного URL-адреса на другой.

301 редирект обычно прописывается в следующих случаях:

  • при склеивании зеркал сайта с www и без www;
  • при переезде сайта на новый домен;
  • при переносе сайта на новую CMS;
  • при изменении URL-адресов страниц;
  • при устранении дублей страниц сайта.
  • Как ни странно, последний случай рассматривают крайне редко, хотя при устранении дублей 301 редирект помогает как никто другой, если, конечно, у вас нет желания ковырять код самой CMS. А если вы занимаетесь поисковой оптимизацией сайтов, то вопрос наличия или отсутствия дублей у страниц сайта обязательно должен вас волновать.

    301 редирект замечателен тем, что он передает pr-страниц и сайта, а соответственно и ссылочный вес новому URL. Но зато он не передает наложенные на старый домен санкции со стороны поисковых систем, что вдвойне приятно.

    Итак, с тем, что такое 301 редирект, разобрались. Перейдем непосредственно к тому, как его сделать.

    Как настроить 301 редирект

    Для начала я приведу список операторов регулярных выражений , которые пригодятся вам при настраивании 301 редиректов.

    • ^ — ограничение слева;
    • $ — ограничение справа;
    • * — 0 и более символов;
    • + — 1 и более символов;
    • . — любой символ;
    • \ — экранирование;
    • () — переменная;
    • — диапазон значений.

    Существуют различные способы того, как сделать 301 редирект. Лично я, как и многие другие вебмастера, настраиваю его через файл.htaccess. Данный файл есть практически у каждой популярной CMS, и находится он в корне вашего сайта. Скачать.htaccess можно через при помощи клиента FileZila:

    Файл.htaccess следует открыть текстовым редактором, к примеру, Notepad++. Поверх всех кодов редиректов вам следует прописать следующую строку:

    RewriteEngine On

    В противном случае редиректы работать не будут.

    Многие ошибочно полагают, что можно обойтись и без 301 редиректа. Я могу вам сказать, что он необходим при оптимизации практически каждого сайта. К примеру, абсолютно каждый сайт изначально доступен по двум адресам — с www и без www. Беда в том, что это приводит к размыванию ссылочной массы. Объясню почему. Другим сайтам абсолютно все равно, какой из двух вариантов написания вашего домена является основным. Если они будут ставить на вас ссылки, то в адресе могут прописывать как вариант с www, так и без www. Ссылочная масса в итоге будет размыта, а поисковики в любом случае будут индексировать только один вариант. Когда-то так они вообще воспринимали их как совершенно разные сайты.

    Чтобы ваш сайт активно рос в позициях и не терял ссылочную массу, требуется в файле.htaccess прописать 301 редирект.

    С www на без www:

    RewriteCond %{HTTP_HOST} ^www.site.ru$ RewriteRule (.*) http://site.ru/$1

    С без www на www:

    RewriteCond %{HTTP_HOST} ^site.ru$ RewriteRule (.*) http://www.site.ru/$1

    Если приведенные выше коды редиректа не сработают, то воспользуйтесь следующей записью для редиректа с www на без www:

    RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1

    Помните, что вместо site.ru нужно прописывать домен вашего сайта. После проделанных действий сохраните файл.htaccess и закачайте его на сервер, заменив им старый файл.

    301 редирект очень часто выручает меня, когда я борюсь с дублями страниц сайта. А это я делаю практически каждый раз, когда выполняю внутреннюю оптимизацию очередного сайта. Лично я еще не встречал CMS, которая бы не генерировала дубли. Хотя если речь идет о небольшом сайте, то бывают исключения. Понятия не имеете, о чем я сейчас говорю? Тогда подписывайтесь на , вскоре я напишу о дублях целую статью.

    Бывает такое, что страница сайта доступна сразу по двум URL-адресам вида: http://site.ru/category/page.html и http://site.ru/page.html. В данном случае идет речь о дублях. К примеру, мы хотим, чтобы страница была доступна только по адресу второго вида. В таком случае для избавления от дубля необходимо прописать следующий редирект:

    RewriteRule ^(.*)category/page.html$ http://site.ru/page.html

    Теперь представьте ситуацию, что вы изменили адрес страницы сайта. Для чего? Да, могут быть самые разные причины. Я, к примеру, совсем недавно это делал с целью укорачивания длины URL. Для этого вам понадобится следующий редирект:

    RewriteRule ^(.*)old-page.html$ http://site.ru/new-page.html

    Если приведенный выше код редиректа не сработает, попробуйте следующий:

    RewriteRule ^old-page.html$ http://site.ru/new-page.html

    Или такой:

    RewriteRule ^old-page.html$ /new-page.html

    Если требуется сделать редирект со старого URL-адреса на кириллице на новый URL-адрес (хоть на кириллице, хоть на латинице), то запись будет иметь вид:

    RewriteRule ^старый-урл.html /new-page.html

    Как вы понимаете, выше мы рассматривали редиректы с одного URL на другой в пределах одного сайта . Для этого мы использовали mod_rewrite и директиву RewriteRule. Но можно обойтись и более простым вариантом записи редиректа при помощи директивы Redirect:

    Redirect 301 /old-page.html http://site.ru/new-page.html

    Оба варианта записи редиректа корректны и передают ссылочный вес и другие показатели. Они отличаются лишь тем, что используют директивы разных модулей, и поэтому имеют различный синтаксис. При использовании директивы Redirect сначала прописывается старый адрес страницы без http://site.ru, а затем новый адрес полностью.

    301 редирект может вам понадобиться при переезде сайта со старого домена на новый :

    RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.old-domen\.ru$ RewriteRule ^(.*)$ http://new-domen.ru/$1 RewriteCond %{HTTP_HOST} ^old-domen\.ru$ RewriteRule ^(.*)$ http://new-domen.ru/$1

    Аналогичный редирект с использованием директивы Redirect:

    Redirect 301 / http://new-domen.ru

    Можно прописать 301 редирект URL с параметром на любую другую страницу сайта , к примеру, главную:

    RewriteCond %{QUERY_STRING} ^cPath=373_703 RewriteRule ^index\.php$ http://site.ru/?

    Приведенный выше пример из моей практики, когда я проводил внутреннюю оптимизацию сайта на Joomla, у которого было огромное количество различных дублей.

    Редирект с site.ru/index.php на site.ru (избавляемся от дубля главной страницы):

    RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http://site.ru/

    В результате наличия у главной страницы сайта дубля вида site.ru/index.php аналогичные дубли могут появляться и у внутренних страниц сайта, к примеру, site.ru/index.php/page.html является дублем страницы site.ru/page.html. В данном случае все дубли такого вида разом можно устранить при помощи редиректа:

    RewriteRule ^index\.php/(.*)$ /$1

    Если у главной страницы вашего сайта есть дубль вида site.ru/main.html , то следует прописать следующий редирект:

    RewriteEngine On RewriteCond %{THE_REQUEST} ^{3,9}\ /main\.html\ HTTP/ RewriteRule ^main\.html$ http://vash-sait.ru/

    или же такой вариант:

    Redirect 301 /main.html http://site.ru/

    Теперь представим ситуацию, что вы хотите, чтобы все внутренние страницы сайта были доступны только по адресу с.html на конце . Тогда следует прописать следующий редирект:

    RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?) RewriteRule .* %1.html RewriteRule ^(.*)/$ /$1.html

    Если же наоборот вы хотите, чтобы все внутренние страницы сайта имели адрес без.html на конце , то есть адрес вида site.ru/page, то следует прописать редирект:

    RewriteCond %{REQUEST_URI} \.html$ RewriteRule ^(.*)\.html$ /$1

    Если стоит задача редиректа с URL-адресов с.htm на конце на адреса с.html на конце , то в.htaccess следует добавить следующую запись:

    RewriteBase / RewriteRule ^(.*)\.htm$ $1.html

    Возможно, вам потребуется сделать редиректы с URL-адресов без суффиксов на адреса со слэшем на конце . Тогда в файле.htaccess следует прописать следующее:

    RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\..+$ RewriteCond %{REQUEST_URI} !/$ RewriteRule (.*) http://www.site.ru/$1/

    Если задача полностью противоположная, и требуются редиректы с URL-адресов со слэшем на конце на адреса без суффикса , то добавьте следующий код:

    RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ /$1

    Чтобы прописать редирект с URL-адреса с параметром вида http://site.ru/?page_id=111, добавьте в.htaccess следующее:

    RewriteCond %{QUERY_STRING} page_id=111 RewriteRule ^ http://site.ru/new-page/

    Также совсем недавно столкнулся с сайтом, для которого был получен сертификат о его безопасности, и было необходимо прописать редирект с http на https :

    RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}

    Теперь вы знаете, как прописать 301 редирект. Конечно же, существуют и другие случаи, когда он необходим, но я указал наиболее популярные из них. После любой задачи, касающейся оптимизации сайта, я рекомендую производить проверку на ошибки.

    Как проверить 301 редирект

    301 редирект проверяется очень просто. Все, что вам нужно, это ввести в строке браузера старый адрес страницы. Если произойдет перенаправление на новый URL-адрес, то скорее всего редирект прописан верно. В некоторых случаях перед тем как проверить 301 редирект, приходится чистить кэш браузера. Поэтому если перенаправление не происходит, возможно, вы забыли это сделать.

    Чтобы окончательно убедиться в том, что 301 редирект настроен верно, рекомендую также проверить ответ сервера при помощи специальных сервисов, к примеру, 2ip.ru , а еще лучше воспользуйтесь программой Netpeak Spider, при помощи которой можно узнать еще и много другой информации о сайте. Ответ сервера должен быть «301 » или же «301 MovedPermanently -> 200 OK».

    Надеюсь, теперь Вы поняли, как правильно настраивать 301 редирект. Выше я привел достаточное количество различных примеров. Если не сработает один тип записи редиректа, скорее всего сработает другой. Пробуйте. От чего зависит, какая именно запись редиректа сработает, точно сказать не могу, так как не являюсь программистом. Возможно, от CMS или настроек сервера. Также иногда влияет расположение кода редиректа в файле.htaccess. Если редирект не срабатывает, попробуйте перенести его код чуть выше по файлу. На этом у меня все. Успехов в оптимизации сайтов!

    Прежде чем непосредственно перейти к практике, нужно сказать, что редирект бывает двух типов. Я думаю, вы понимаете, что это перенаправление с одного адреса на другой. Оно необходимо, когда при переходе по одному адресу нужно отправить человека в другое место.

    Редирект бывает временным и постоянным. Постоянный (301-й) передает ссылочный вес, временный (302-й) – нет. Сегодня мы поговорим именно о постоянном редиректе, так как именно его использование считается оптимальным.

    Настройка 301 редиректа и случаи из практики

    Обычно редирект прописывают в файле.htaccess, но это не единственный способ его создать. Дальше в статье я также покажу вариант, как сделать редирект с помощью php.

    Но сначала мы поговорим о том, как он делается через.htaccess. Вообще с помощью редиректа можно избавиться от многих проблем. Одна из них – возможные дубли страниц на сайте, так как он, по сути, доступен по двум адресам: www.site.ru, site.ru.

    И для поисковика это разные сайты. Таким образом, каждая страница ваших сайтов имеет как минимум 2 адреса, по которым к ней можно обратиться. Это если вы убрали другие дубли. Чтобы предотвратить подобные вещи, обычно делают редирект с www на вариант без www, так как он более короткий и оптимальный. Таким образом, происходит склейка доменов. Главным зеркалом будет site.ru. Если пользователь сам наберет www.site.ru, то его автоматически перенаправит на вариант без www. Это и позволит избежать дублей, так как теперь поисковая машина будет понимать, что домены связаны. И вот сам код:

    RewriteCond %{HTTP_HOST} ^www.site\.com$ RewriteRule ^(.*)$ http://site.com/$1

    RewriteCond % { HTTP_HOST } ^ www . site \ . com $ [ NC ]

    RewriteRule ^ (. * ) $ http : //site.com/$1

    Естественно, тут нужно заменить адрес сайта на ваш. Стоит отметить, что это не единственный способ избежать проблем с www. Другой вариант – указать в файле robots.txt команду Host: домен без www. Еще один способ – настроить главное зеркало в Яндекс.Вебмастере. Это вообще самый простой вариант для Яндекса.

    Отлично, ну а что, если вам нужно сделать редирект с одного домена на другой? В таком случае воспользуйтесь таким кодом:

    RewriteCond %{HTTP_HOST} !^www\.site\.com RewriteRule ^(.*)$ http://www.site.com/$1

    RewriteCond % { HTTP_HOST } ! ^ www \ . site \ . com

    RewriteRule ^ (. * ) $ http : //www.site.com/$1

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

    Собственно, для максимально упрощения могу посоветовать вам такой сервис — http://www.webconfs.com/htaccess-redirect-generator.php . Это так называемый генератор редиректов.

    Перенаправление с помощью php

    Также я хочу показать, как делать это с помощью php.