Redirect 301 Permanent

Что такое редирект 301?

Редирект – перенаправление с одной страницы на другую. Редирект, помогает сохранить позиции сайта в поисковых системах, и сохранить PR (page rank). Если планируется по каким-то причинам изменение домена сайта, то ни в коем случае не следует сразу бросать старый домен. Нужно иметь ввиду, что посетители продолжают по нему заходить на сайт, и поэтому целесообразно их перенаправить на новый сайт.

С HTTP на HTTPS

Если следуя настоятельной рекомендации и запугиванию Google, был подключен HTTPS, то необходим редирект с обычного http://. Это можно сделать так:

RewriteEngine On
RewriteCond %{ENV:HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://example.com/$1 [R,L]

Когда ничего не работает из-за циклов переадресации, это последняя надежда:

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://your-domain.com/$1 [R=301,L]

Редирект для WordPress

# BEGIN GD-SSL
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_USER_AGENT} ^(.+)$
RewriteCond %{SERVER_NAME} ^coolexample\.com$ [OR]
RewriteCond %{SERVER_NAME} ^www\.coolexample\.com$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Header add Strict-Transport-Security "max-age=300"
</IfModule>
# END GD-SSL
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

http + www на https + non www

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,NE,R=301]

и так:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteCond %{ENV:HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301,NE]

Устранение дублей

Собственно говоря, работа с редиректом классифицируется как внутренний этап SEO, или On-Site SEO, при этом убираются дубли страниц, наличие которых препятствует продвижению сайта. Если существуют страницы с одинаковым содержанием, их лучше «склеить». Это осуществляется с помощью работы с файлом .htaccess.

C WWW не не-WWW и на оборот

С точки зрения SEO, не страница не должна быть доступна по нескольким адресам. Так вот www.site.com и просто site.com – это разные адреса одного сайта. Поисковики это не любят. Что бы внять рекомендациям SEO, нужно удалить дубль. Сделать это можно таким образом:

С www на не-www

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

С не-www на www

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

Joomla редиректы

Для Joomla, в которой может быть масса дублей, можно попробовать такой метод:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{QUERY_STRING} ^option=com_content&view=frontpage$
RewriteRule ^(index\.php)?$ http://вашсайт.com/? [R=301,L]

Вот этот длинный хвост часто появляется как дубль главной страницы в Joomal:

option=com_content&view=frontpage

Его полный вид таков:

http://site.com/index.php/?option=com_content&view=frontpage

По такому принципу можно перенаправлять все хвостатые адреса, если в Joomla включили опцию seo по наитию свыше. Например:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{QUERY_STRING} ^option=com_content&view=article&id=103&Itemid=24$
RewriteRule ^(index\.php)?$ http://site.com/new_page? [R=301,L]

Если нужно перенаправить с http://site.com/index.php (часто поисковики выдают этот вариант вместо желаемого, если сайт на Joomla или еще какой-то CMS) на site.com, то можно сделать так:

RewriteCond %{THE_REQUEST} ^.*/index\.php 
RewriteRule ^(.*)index.php$ /$1 [R=301,L] 
RewriteCond %{THE_REQUEST} ^.*/index\.php 
RewriteRule ^(.*)index.php/$ /$1 [R=301,L] 

Opencart

В Opencart главная страница имеет вид таков:

www.site.com/index.php/?route=common/home

Это дело вообще нужно решать самим разработчикам OpenCart, но видимо в этом хвосте есть некий знак для посвященных в тайны Вселенной. Так что решать задачу вам. Можно просто найти и заменить в header.tpl и footer.tpl (папка templates/common)
<?php echo $home; ?>

на

<?php echo $base; ?>

А можно сделать редирект на www.site.com в .htaccess так:

RewriteCond %{QUERY_STRING} ^route=common/home$
RewriteRule ^index\.php$ http://site.com/? [R=301,L]

С категории на категорию с чпу адресом, если вдруг решили поменять адреса страниц:

Первоначальный урл был длинный и уродливый типа www.site.com/index.php?path=83_94_113&route=product/category. Придаём ему человеко-понятный вид:

RewriteCond %{QUERY_STRING} ^path=83_94_113&route=product/category$
RewriteRule ^index\.php$ http://site.com/new-category? [R=301,L]

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

www.site.com/katalog?c=okna-pvkh

После долгих проб и ошибок был найден такой вариант – в примере редирект на главную:

RewriteCond %{QUERY_STRING} ^c=okna-pvkh$ [NC]
RewriteRule katalog http://site.com/? [R=301,L]

Редирект со старого на новый домен

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

old-site.com

он моментально попадет на

new-site.com

Самый простой способ это сделать в файле .htaccess таков –

Redirect 301 http://старый-сайт.com http://новый-сайт.com
Redirect Permament  http://старый-сайт.com http://новый-сайт.com

Редирект с несуществующих страниц.

Если поменялись адреса страниц, необходимо позаботиться, чтобы новые страницы быстро попали в индекс, чтобы сайт не просел в выдаче из-за возможных 404 ошибок. Для этого нужно перенаправить с несуществующих страниц, но проиндексированных поисковиками страниц (то есть эти страницы еще есть в базе данных поисковых систем – при посещении этой страницы посетитель увидит ошибку 404), на новые существующие.

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

Самый простой делается как и при редиректе с домена на домен:

Redirect 301 /oldpage.html  http://site.com/newpage.html
Redirect Permament  /oldpage.html  http://site.com/newpage.html

Если не сработал вышеуказанный способ, попробовать стоит такой

RewriteRule ^oldpage.html  http://site.com/newpage.html [L,R=301]

Если нужен редирект с любого адреса включающего урл родительской категории, есть такой вариант:

RewriteRule ^old_caregory http://site.com/new_category [L,R=301] 

Таким образом любая страница такого вида www.site.com/old_caregory/page.html будет перенаправлять посетителя на тот указанный адрес. В этом примере – new_category.

Редирект осуществляется с помощью ряда методов –

  • Файл .htaccess
  • PHP
  • JavaScript

О чем более подробно речь пойдет в последующих статьях. Эта статья редактируется и дополняется постоянно новыми примерами, коих в природе много. Увы, не всегда правило Redirect 301 /старая_страница http://site.com/новая_страница работает безотказно.