Оптимизация сайта — Декабрь 23, 2017

20 способов сделать 301 редирект (переадресацию) правильно

Я собрал все возможные способы сделать 310 редирект используя разные способы. Вы можете выбрать для себя, все что душе угодно.

Собственно, давайте разбираться в вариантах сделать редирект (переадресацию) правильно.

Простой 301 редирект в .htaccess

Если ваш сервер (или хостинг) использует apache, переадресацию можно выполнить, через файл. htaccess. Этот способ, по-моему, самый простой и удобный из всех мною виденных. Важно! Не забудьте включить модули mod_alias (для поддержки правил Redirect, RedirectPermanent и RedirectMatch) и mod_rewrite в php.ini.

1. Простая переадресация со старых страниц на новые:

Redirect 301 /old/ http:// domain.com/new/
или 
Redirect permanent /old/ http:// domain.com/new/

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

2. 301 редирект в .htaccess для русскоязычных ссылок

Единственная разница, которая заняла у меня кучу времени, это потребность в точности сохранения документа в формате uft-8 без БОМ, что является очень важным моментом. Если вы сохраните в другом формате, вероятнее всего ваше перенаправление работать не будет.

В остальном, все так же:

 
Redirect 301 /старая ссылка/ http:// domain.com/new/
 или
Redirect permanent /старая ссылка/ http:// domain.com/new/

3. Редирект с помощью RedirectMatch

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

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

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

Options +FollowSymLinks
 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^www.(.*) [NC]
 RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

еще вариант в более простом виде:

 Options +FollowSymLinks
 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
 RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]

5. Редирект запросов без www на с-www

 Options +FollowSymLinks
 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
 RewriteRule ^(.*)$ https://domain.com/$1 [R=301,L]

так же решает аналогичную задачу:

 RewriteEngine On
 RewriteCond %{HTTP_HOST} !^www.(.*) [NC]
 RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

6. Редирект ссылок со слешем на без для всего сайта

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]

7. 301 редирект как в пункте 6, только наоборот

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]

8. Убираем слэш в конце главной ссылки если она без www

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

9. Убираем слэш в конце главное ссылки, если она с www

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

10. Убираем с помощью правильного перенаправления /index.php (без GET)

RewriteCond %{REQUEST_URI} /index.php
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)$ http://site.ru/? [R=301,L]

11. 301 редирект для всех адресов где есть index.php

RewriteCond %{REQUEST_URI} /index.php
RewriteRule ^(.*)$ http://site.ru/ [R=301,L]

12. Делаем переадресацию с динамического url на статический

вариант с GET

RewriteCond %{QUERY_STRING} ^id=229
RewriteRule ^.*$ /supermodel/? [R=301,L]

вариант без GET

RewriteCond %{REQUEST_URI} /test/
RewriteCond %{QUERY_STRING} ^id=229
RewriteRule ^.*$ /supermodel/? [R=301,L]

13. Делаем переадресацию всех страниц домена на один url другого домена

RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.ru/ [L,R=301]

14. Редиректы для SSL (перенаправление с http на https и наоборот)

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

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

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

Очень многие осуществляют редирект с помощью скриптов. Не большая подборка для разнообразия.

HTTP/1.1 301 Moved Permanently Location: https://new.com/new-k/new.htm 
PHP редирект 
<?php header(“HTTP/1.1 301 Moved Permanently”); 
header(“Location: https://new.com/new-k/new.htm”); 
exit(); ?>

15. ASP редиректы

<%@ Language=VBScript %>
 <%
 Response.Status=“301 Moved Permanently”
 Response.AddHeader “Location”, “https:// seo-blog.com”
 response.end
 %>

17. ASP.NET редирект

<script runat=“server”>
 private void Page_Load(object sender, System.EventArgs e)
 {
 Response.Status = “301 Moved Permanently”;
 Response.AddHeader(“Location”,“https://new.com”);
 }
 </script>

18. ColdFusion редирект

<.cfheader statuscode=“301” statustext=“Moved permanently”>
 <.cfheader name=“Location” value=“https://seo-blog.com”>

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

<%
 response.setStatus(301);
 response.setHeader( “Location”, “https://new.com/” );
 response.setHeader( “Connection”, “close” );
 %>

20. CGI PERL

$q = new CGI;
 print $q->redirect(“https://new.com/”);
 Ruby on Rails
 def old_action
 headers[“Status”] = “301 Moved Permanently”
 redirect_to “https://new.com/”

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

Для размещения 301 переадресации на серверах Apache, достаточно изменить, как описано выше файл .htaccess. Если вы не понимаете, как это работает и незадачливые символы в описании выше для вас большая загадка — обратитесь к хостинг-провайдеру, или напишите вопрос в комментария.

Как сделать 301 редирект (переадресацию) в WordPress с помощью плагина

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

Самым оптимальным решением оказался плагин для WordPress, который решил все мои задачи. Минусом этого плагина была только ручное формирование списка ссылок для редиректа.

В целом плагин для WordPress вполне меня устраивает и по сей день.

Рассмотрим некоторые пояснения связанные с 310 редиректом

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

** 303-я ошибка указывает на временный путь переадресации.

Редирект — это перенаправление посетителя с одного сайта на другой автоматическим путем. Словом, пользователь оказывается совсем не на той странице, адрес которой он набирал в строке поиска.

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

К примеру, смена адреса интернет-магазина ведет за собой большие потери, потому что часть посетителей будет потеряна. В данном случае скрипт решает эту задачу: пользователи также набирают прежний, знакомый им адрес, но переправляются на новую страницу. Редирект поможет в случае, когда происходит скрещивание нескольких доменных имен. Адрес сайта могут набирать, указав www или просто быстро набрав основное название, но именно при помощи скрипта попадают на одну и ту же страницу.

Функция редиректа полезна не только в качестве сохранения хорошей посещаемости интернет-магазинов. Продвижение сайта стоило владельцам немалых усилий, поэтому логично, что они стремятся сохранить позиции. Для создания более успешного предприятия в рамках интернет-магазина можно склеить несколько сайтов. Для этого применяют редирект. Данный способ реализации функции редиректа, с одной стороны, является очень быстрым и надежным, с другой — поисковые системы относятся к склеенным сайтам с подозрением.

Почему так происходит?

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

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

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

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

Влияние 301-го редиректа на seo продвижение

Если вы решили перенаправить старые ссылки на новые, по средствам 301-й ошибки (moved permanently), вам возможно будет интересно узнать следующее:

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

2. При склейке адресов, новый url получает полный вес страницы, ссылочную массу и такие значения, как ТИЦ.
Подобный редирект это наилучшее решение при переносе сайта на новую систему управления контента, если вы не хотите потерять позиции и рейтинг сайта. Мой seo блог использует несколько видов 301 редиректа, для перенаправления.

На этом все. Надеюсь эта статья была полезна для вас. Если вы знаете свои собственные методы настройки редиректа, буду рад почитать о них в комментариях.

Комментарии

Андрей
Ноябрь 14, 2017

Здравствуйте. Подскажите, пожалуйста, если мы один старый сайт разносим на два новых. Поэтому часть страниц нужно редиректить на один домен, а часть на другой, а часть вообще оставить и никуда не редиректить. Можно ли такое реализовать, правильно ли это будет в плане seo-оптимизации и есть ли у вас какие-то советы, как такое лучше сделать?

Ответить

Андрей Ролдугин
Ноябрь 14, 2017

Да, возможно, конечно. О редиректе написанно в этой статье, каких-то дополнительных советов, нет. Единственное, я бы не оставлял некоторые ссылки вообще без редиректа, что бы не появилась 403 ошибка.. но это не принципиально важный вопросы, которые влияют на ранжирование сайтов. Так что делайте смело под пользователя, а не под робота.

Андрей
Ноябрь 15, 2017

Большое спасибо за оперативный ответ. Если вы не против, то задам ещё несколько вопросов. Так выходит, что на новых сайтах урлы абсолютно не соответствуют старым, также и структура категорий новых интернет-магазинов сильно изменилась. Я так понимаю, что в таком случае общего какого-то правила для всех страниц не напишешь. Нужно только отдельно для каждой страницы указывать, что сайт1.ком/категория2 редиректить на сайт2.ком/категория14, а сайт1.ком/категория5 редиректить на сайт2.ком/категория7 и так для каждой страницы. И такое в .htaccess не напишешь. Правильно я понимаю? И второй вопрос, если мы из нескольких старых категорий теперь делаем одну новую, нет ли проблемы в том, что на одну новую страницу будут редиректить несколько старых?

Андрей Ролдугин
Ноябрь 15, 2017

1.Это вполне можно написать в .htaccess, кто вам мешает? Но обычно, если сайт на CMS я это делаю через php class для редеректа. То есть заношу все старые урлы в БД и через php делаю редирект. На мой взгляд, это самый удобный способ.
2. Проблем быть не должно. Тем более если новый сайт лучше оптимизирован, работает быстрее и более интересен пользователям и соответственно быстро индексируется. Вес перейдет тоже быстро и проблем не возникнет.

Андрей
Февраль 23, 2018

Андрей, подскажите, пожалуйста, как можно настроить редирект отдельных страниц сайта и главной, оставив одну-единственную страницу открытой? Например, home и страницы 1-5 — настроил в .htaccess
Redirect 301 / http://www.newsite.com
Redirect 301 /page1 http://www.newsite.com/page1

Redirect 301 /page5 http://www.newsite.com/page5

Работает, но page 6 выбрасывает 404 на новом домене, хотя про неё в .htaccess ни слова. Убираешь первую строчку редиректа главной — страница 6 открывается, но и главная не переадресуется, конечно. Хелп. )

Ответить

Андрей Ролдугин
Февраль 24, 2018

Нужно смотреть конкретный сайт, так все ответы будут пальцем в небо.

Андрей
Февраль 25, 2018

Подскажите, как можно настроить редирект с сайта Google site?
Мне сказали так цена клика заметно будет меньше, но разобраться сам не могу, тк не сильно силен в языках.

Ответить

Марлен
Март 27, 2018

Redirect 301 /old/ http:// domain.com/new/
или
Redirect permanent /old/ http:// domain.com/new/

не сработало(
путем долгих поисков нашел вариант
RewriteEngine On
RewriteRule ^(.*)old$ http:// domain.com/new/ [R=301]

Ответить

Оставить комментарий

Ваш email не будет опубликован.

Если у вас есть интересные вопросы или идеи, но вы не можете сами определиться как лучше или куда двигаться дальше - подпишитесь на рассылку или напишите мне.

Подписаться Задать вопрос