:::: MENU ::::

Правильные редиректы страниц

Есть два основых типа перенаправления страниц

301 Перемещено навсегда

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

302 Найдено (HTTP 1.1) / временно перемещена (HTTP 1.0)

302 Редирект говорит что текущая страница была временна перенесена по новому адресу, но в скором времени должна вернуться на старый адрес. Этот Редирект говорит поисковым системам держать в своей системе две одинаковые страницы под разными адресами, и это может негативно сказаться на SEO-оптимизации вашего сайта. В большинстве случаев вместо него рекомендуют использовать 301 редирект. Но 302 редирект можно использовать например во время технического обслуживания сайта целиком, либо временно скрыть какие-либо страницы от пользователей, но чтобы эти страницы не были удалены из индекса поисковых систем.

Редиректы 3xx очень полезны если их применять в нужных случаях, например:

  • перестройка архитектуры вашего сайта
  • переезд сайта на новый домен/li>
  • миграции с HTTP на HTTPS/li>
  • переход пользователей и поисковых систем с других предпочтительных доменов, чтобы избежать ошибок дублирования контента /li>
  • при удаление страницы/li>

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

Как же можно настроить редирект?

htacces/apache

Основная формула
RewriteCond [Строка Для Сравнения] [Условие] [Флаги]
RewriteRule [Шаблон] [Строка Подстановки] [Флаги]

[Строки Для Сравнения] (полный список)
Переменные которые используются чаще всего:
%{REQUEST_URI} Строка запроса (без доменного имени, и GET параметров), пример «/blog/postname/»
%{HTTP_HOST} Доменное имя, например «mkarpov.ru»
%{QUERY_STRING} Строка параметров GET

[Условие] и [Шаблон] — регулярные выражения

Наиболее часто используемые флаги:
в RewriteCond можно поставить флаг NC — это означает «Регистронезависимую проверку» условия
OR Условие сопостовляется с остальными про правилу ИЛИ
В RewriteRule
Флаг R указывает на код редиректа. Может быть 301, 302 или др.
Флаг L показывает что это последнее правило, больше не применять правил преобразований

Примеры редиректов

1. Самый простой вариант

1
 Redirect 301 /page-old/ http://domain.ru/page-new/

2. 301 редирект с www на «без www»

1
2
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

3. 301 редирект с «без www» на www (главное зеркало – домен с www)

1
2
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

4. Каждая страница одного домена на такой же адрес другого url

1
2
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://new-domain.ru/$1 [L,R=301]

5. Редирект с протокола http на https.

1
2
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Если возникает циклический редирект, то попробуйте сделать так:

1
2
3
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

6. Редирект с протокола https на http.
Обратный редирект, если вдруг перестали использовать SSL сертификат, или он кончился.

1
2
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Как сделать 301 редирект в Nginx?

Для того, чтобы сделать Nginx redirect 301 необходимо использовать rewrite правило с permanent в конце:

1
2
3
server {
  rewrite ^(.+)$ /ru/$1 permanent;
}

1. Редирект с www на «без www»
Часто нужно сделать 301 redirect с сайта www.domain.ru/url на domain/url. Это делается так:

1
2
3
4
server {
  server_name www.domain.ru;
  rewrite ^(.+)$ http://domain.ru/$1 permanent;
}

2. Временное перемещение.
Например у вас свой магазин, и в нем есть товар дня и адрес my-shop.ru/product-of-the-day. Но товары каждый день будут новые, а вы хотите что бы люди заходили на этот адресс и видели товар сегодняшнего дня… тогда можно сделать так:

1
2
3
4
5
6
7
server{
...
location /product-of-the-day {
     return 302 http://my-shop.ru/product-1
}
...
}

А завтра допустим поменять на product-2 и тд.

Эту операцию я привел для примера 302 редиректа в nginx, но лучше и проще будет её делать с помощью CMS вашего сайта.


So, what do you think ?