1

Topic: Виды редиректов

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

301 Moved Permanently

301 редирект является постоянным редиректом, который передает около 90-99% ссылочного веса. Данный редирект указывает, что страница перемещена по новому адресу и старый url следует считать устаревшим.

302 Found (HTTP 1.1) / Moved Temporarily (HTTP 1.0)

302 редирект — временный редирект. Данный редирект передает 0% от ссылочного веса и, в большинстве случаев, не должен использоваться. На данный момент интернет работает по протоколу HTTP, который и определяет, как обрабатывать URL-адреса. В двух версиях этого протокола этот ответ сервера имеет разный статус ответа:

HTTP 1.0: 302 ответ сервера это «Moved Temporarily » — текущий документ временно перемещен на другой URL.
HTTP 1.1: произошло изменение ответа сервера на «Found» — текущий документ найден.
307 Moved Temporarily (HTTP 1.1 Only)

307 редирект в протоколе HTTP 1.1 стал приемником 302 редиректа. В то время как основные поисковые боты начнут рассматривать его как аналог 302, для почти всех случаев лучше всего использовать 301. Исключением из этого правила является, когда контент действительно переехал только временно (например, во время технического обслуживания) и поисковые системы уже понимают, что ваш сервер совместим с HTTP 1.1. Но, так как практически невозможно определить, действительно ли поисковые системы поняли, что ваш сервер совместим с этим новым протоколом, то лучше использовать 302 редирект для контента, который был временно перемещен.

Другие виды редиректов

Существуют также и другие виды редиректов: Meta Refresh или с помощью JavaScript — которые выполняются на уровне страницы, а не на уровне сервера. Вот как выглядит типичный редирект Meta Refresh:

<meta http-equiv="refresh" content="5;url=http://www.punbb.info/" />

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

2

Re: Виды редиректов

Чтобы склеить домен с www на без www:

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

Для склейки с без www на с www:

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

Для того чтобы правильно выбрать на какой из вариантов склеивать, желательно посмотреть:

который из этих вариантов больше находится в ТОПе
у какого из вариантов больше страниц в индексе
Канонизация слеша в конце урла

При проектирование сайта важно определиться с одним форматом использование слеша в конце урла, так как для поисковых систем 2 урла вида

http://www.site.com/cat1/
http://www.site.com/cat1
являются разными. Поэтому после того как вы определились, как именно у вас будет на сайте, необходимо прописать следующие редиректы:

Для того чтобы удалить слэш в конце:

RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} /$ [NC]
RewriteRule ^(.*)(/)$ $1 [L,R=301]

Для того чтобы добавить слэш в конец адресной строки:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

Редирект одной страницы на другую страницу:

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

Редирект для дублей главной страницы:

Этот код гарантирует, что любой адрес домашней страницы, который включает несколько версий прямых ссылок имени страницы, например, default.htm или index.html, будет перенаправлен на каноническую главную страницу, http://www.site.com:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*(default|index|main)\.(html|php|htm)\ HTTP/ [NC]
RewriteRule ^(([^/]+/)*)(default|main|index)\.(html|php|htm)$ http://www.site.com/$1 [L,R=301]

Редирект каталога

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

RewriteRule ^(.*)/old-catalog/(.*)$ $1/new-catalog/$2 [R=301,L]

Но, если url старого каталога начинается сразу после домена: www.site.com/old-catalog/, то необходимо воспользоваться следующим кодом

RewriteRule old-catalog /(.*) / old-catalog /$1 [R=301,L]

Редирект при смене расширения файлов

Если вы вдруг переехали на другую платформу или CMS, и при этом у url-ов изменились только расширение, то в этой случае вам поможет вот такой редирект:

RedirectMatch 301 (.*)\.php$ http://www.site.com$1.html

3

Re: Виды редиректов

Редирект с разных доменов и субдоменов

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

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

Таким образом, все домены типа www.site.ru, www.site.net, test.site.com будут переадресовываться на сайт www.site.com.

Как удалить несколько слешей/тире в урле

Иногда «по случайности» в урле могут появиться по несколько слешей, например, www.site.com/catalog////page-1.html. В таких случаях необходимо делать 301 редирект на страницу с одним слешем www.site.com/catalog/page-1.html :

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

Аналогично, можно склеить в урле несколько дефисов в один: с www.site.com/catalog/page—1.html на www.site.com/catalog/page-1.html:

RewriteCond %{REQUEST_URI} ^(.*)—(.*)$
RewriteRule . %1-%2 [R=301,L]

Как сделать редирект с любого урла на url только в нижнем регистре

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

$lowerURI=strtolower($_SERVER[’REQUEST_URI’]);

if($_SERVER[’REQUEST_URI’]!=$lowerURI)
{
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://" . $_SERVER[’HTTP_HOST’] . $lowerURI);

exit();
}

4

Re: Виды редиректов

Оптимальная стратегия 301 редиректа

Оптимальной стратегией переезда на новый домен, учитывая пожелания 2-ух основных поисковых систем рунета Яндекс и Google, это:

постраничный 301 редирект со старого сайта на новый.
при этом для файла robots.txt редирект не делаем, а прописываем в нем директиву Host на новый домен.
Тогда код для настройки редиректа на старом сайте может иметь следующий вид:

RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC]
RewriteRule ^([^/]+) $1 [L]
RewriteCond %{HTTP_HOST} !^www\.site\.com
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]

а файл robots.txt для старого сайта:

User-agent: Yandex
Disallow:
Host: newsite.com

Генерация 301 редиректов

Если вы не очень технически подкованы, то можно воспользоваться сервисами генерации базовых редиректов:

http://www.webconfs.com/htaccess-redirect-generator.php

http://www.rapidtables.com/web/tools/redirect-generator.htm

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

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

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

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

http://bertal.ru — максимально подробная информация по ответам сервера.

http://www.internetmarketingninjas.com/header-checker/.

5

Re: Виды редиректов

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

301 — Эй, Поисковики: моя страница уже не здесь, и она навсегда переехала на новую страницу. Пожалуйста, удалите старую страницу из индекса и передайте её вес на новую страницу.

Canonical — Эй, Поисковики (так для большинства поисковых систем): у меня есть несколько версий этой страницы (или содержания), пожалуйста, индексируйте только ту версию страницы, на которую стоит canonical. Я буду держать другие страницы доступными для людей, чтобы они могли их видеть, но, Поисковик, не включай их в свой индекс и пожалуйста, передай вес на мою предпочтительную страницу.

Когда лучше использовать 301 редирект

По умолчанию — это предпочтительный метод
Для страниц: если страница навсегда переехала или была заменена на новый адрес
Для доменов: если сайт переехал на новый домен (продажа сайта, ребрендинг и т.д.)
Для 404 страниц и страниц с контентом, который потерял свою актуальность (при условии соответствующего содержания). Например, если удален товар из определенного каталога, то можно сделать редирект на похожий товар или на url-категории, к которой принадлежал данный товар.
Когда лучше не использовать 301 редирект?

Когда 301 редиректы не могут быть реализованы, или их внедрение займет слишком много времени
Дублированный контент, но вы хотите сохранить обе страницы для людей (например, показывать на разных урлах разный размер одежды)
Страницы с несколькими разными url по сути одной страницы (например, сортировки каталога, отслеживания партнерских ссылок, ...)
Кросс-доменов, когда оба сайта похожи, но похожий контент нужно оставить на каждом из доменов.

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

6

Re: Виды редиректов

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

Редирект на нерелевантные страницы/контент. Редирект всегда желательно проставлять на максимально релевантную страницу: или на похожую страницу, или на ветку каталога/раздела, к которому принадлежала данная страница.
Неправильный выбор использования rel=canonical vs 301 редирект.

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

Редирект robots.txt. Так как, например, нужно прописывать директиву Host для Яндекса при склейке доменов.
Надеемся, что данное руководство станет вам шпаргалкой и помощником для использования 301-го редиректа для вашего сайта.

7

Re: Виды редиректов

htaccess: перенаправление (redirect) из корня сайта в подкаталог

Задача: средствами файла .htaccess необходимо из корневого каталога перенаправить запрос в подкаталог. Например, форум был в корне сайта (www.site.ru), затем переехал в подкаталог (www.site.ru/forum/). Решение:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/bitrix/
RewriteCond %{REQUEST_URI} !/union/
RewriteRule ^(.*)$ http://%{HTTP_HOST}/union/$1 [L,R=301]

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

Еще один вариант:

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

8

Re: Виды редиректов

В примере показана переадресация всех станиц старого сайта на домен _http://newsite.com кроме категории cat, все страницы категории cat  доступны по старому адресу.

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/cat 
RewriteRule ^(.*) http://newsite.com/ [L,R]

9

Re: Виды редиректов

Как правильно поставить ссылку с защищенного сайта с протоколом https на сайт с протоколом http? Если ссылку ставить как обычно, то на защищенном сайте появляется смешанный контент и пропадает зеленый замочек в адресной строке. Если на сайт с http протоколом поставить ссылку с https, то это будет по сути другой сайт и могут не работать стили и возникнут другие проблемы. В интернете этот вопрос почти не освещен, по крайней мере я нашел только один вариант решения этой проблемы - это 301 редирект с новой страницы своего сайта на сайт на сайт с http протоколом.

Например создаем новую страницу 1.php, со страницы https делаем ссылку на свою новую страницу 1.php, в страницу помещаем php код 301 редиректа

header("HTTP/1.1 301 Moved Permanently");
header("Location: http://site.info/p.php");
exit();

 

301 редирект можно сделать и через файл htaccess.

Как-то заморочно это получается, а если таких ссылок надо сделать много? Есть-ли другое решение этой проблемы?

10

Re: Виды редиректов

ozland wrote:

Как-то заморочно это получается, а если таких ссылок надо сделать много? Есть-ли другое решение этой проблемы?

Думаю что решение по любому есть, только зачем переходить с httpS on http? PunBB_INFO_ICQ/whipped тем более когда это требование поисковиков.

11 (edited by ozland 2019.12.07 07:42)

Re: Виды редиректов

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