Verification: a143cc29221c9be0

Php 301 редирект на другой домен

Что внутри

  1. Какие бывают редиректы
  2. Способы настройки редиректа
  3. Примеры редиректов
    • 301 редирект с одной страницы на другую
    • 301 редирект с одного домена на другой
    • 301 редирект на папку другого домена
    • 301 редирект с HTTP на HTTPS
    • 301 редирект с WWW на без WWW
    • 301 редирект с без слеша на слэш
    • 301 редирект на URL без расширения
    • 301 редирект с верхнего регистра на нижний
    • 301 редирект для нового формата перманентных ссылок на сайте с WordPress
  4. Когда лучше не использовать редиректы
  5. Как не стоит настраивать редиректы
  6. Синтаксис для редиректов в .htaccess

Какие бывают редиректы

Есть два основных вида редиректа: 301 Moved Permanently и 302 Moved Temporarily или 302 Found. Вообще, их больше, но в жизни вам понадобятся только эти.

Для людей разницы между видами редиректа нет, результат будет один и тот же. Но для поисковиков Moved Permanently и Moved Temporarily — разные вещи. В зависимости от того, какой редирект вы используете — 301 или 302 — поисковики по-разному воспримут цель перенаправления. В итоге ссылочный вес страницы, для которой настроили редирект, либо сохранится, либо перейдёт новой странице.

О других редиректах читайте в статье: Коды состояния HTTP.

301 редирект: для постоянного перенаправления

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

Редирект 301 используют, когда нужно:

  • перенести сайт на другой домен;
  • перенести страницу на новый адрес;
  • настроить перенаправление с HTTP на HTTPS;
  • настроить перенаправление с WWW на без WWW;
  • стандартизировать внешний вид URL-адресов;
  • отправить пользователя на более актуальную страницу, которую вы создали вместо старой;
  • сделать так, чтобы на сайт можно было зайти по нескольким доменным именам;
  • убрать дубликаты страниц.

302 редирект: для временного перенаправления

Код 302 Moved Temporarily в HTTP 1.0 или 302 Found в HTTP 1.1 означает, что старая страница ещё понадобится, но посетителям нужно временно показывать другую. Для ботов поисковых систем такой редирект будет сигналом продолжить индексировать старую страницу и оставить её в результатах поиска. При этом ссылочный вес старой страницы сохранится.

Редирект 302 используют, когда нужно:

  • скрыть исходную страницу на время, пока вы её переделываете;
  • перенаправить посетителей на дубликат страницы с временным предложением;
  • перенаправить посетителей на страницу, содержимое которой отличается от исходной;
  • провести A/B тестирование нового варианта страницы, не потеряв при этом позиции старой.

302 редирект + время = 301 редирект

По словам главного аналитика Google, если долго не убирать 302 редирект, он начнёт передавать ссылочный вес, как это делает 301 редирект. Google решит, что временный редирект настроили случайно и станет воспринимать его как постоянный.

Способы настройки редиректа

Есть четыре способа настроить редирект: в файле с настройками веб-сервера, в файле с настройками PHP, при помощи HTML или JavaScript. Каждый способ подходит для разных целей. Разберём на примерах.

В файле с настройками веб-сервера

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

Настройки веб-сервера хранятся в специальном текстовом документе на хостинге. В зависимости от того, какой веб-сервер вы используете, путь к файлу, его название и сами команды для редиректа будут отличаться. Если у вас Apache, настройки будут в файле .htaccess, если Nginx — в файле nginx.conf.

В файле с настройками PHP

Такой способ настройки обычно используют, когда перед редиректом нужно проверить что-то в базе данных. Например, для редиректа на страницу с ошибкой 404 в дизайне вашего сайта. Человек вводит ссылку с опечаткой, PHP видит, что в базе данных страницы с таким URL нет, после чего перенаправляет человека на страницу ошибки.

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

Смысла настраивать 301 редирект с HTTP на HTTPS в настройках PHP нет, поскольку работать такой редирект будет медленнее. Это связано с тем, что запрос на открытие страницы сначала обрабатывает веб-сервер, а только потом PHP.

При помощи HTML

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

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

При помощи JavaScript

Этот способ похож по принципу работы на предыдущий, но вместо HTML используют JavaScript. Перенаправление тоже происходит только после загрузки страницы. Правда, если человек отключил в браузере JavaScript, редирект не сработает.

Google не любит HTML и JavaScript редиректы

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

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

Рекомендации Google по поводу скрытой переадресации

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

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

Перед тем как использовать правила из этого раздела, учтите несколько нюансов:

  1. Если у вас Nginx, команды будут отличаться. В этом случае просто скопируйте нужную команду и вставьте её в htaccess-конвертер для Nginx. Сервис переделает команду, и вам останется только вставить её в nginx.conf.
  2. Если у вас домен с кириллическими символами, его нужно сначала преобразовать в Punycode. Правила с символами не из латинского алфавита в .htaccess работать не будут.
  3. Во всех примерах используем редирект 301. Если вместо постоянного редиректа вам нужен временный, замените в тексте команды 301 на 302.
  4. Во всех примерах используем защищённый протокол. Если на вашем домене не стоит SSL-сертификат, замените в тексте команды HTTP на HTTPS.

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

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

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

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

Для настройки редиректа замените в тексте этого правила ссылки на адреса вашей страницы и добавьте его в .htaccess:

Redirect 301 /old-page /new-page

301 редирект с одного домена на другой

Такой редирект обычно настраивают, когда переносят сайт на новый домен или хотят, чтобы на один и тот же сайт можно было зайти с нескольких доменов. Для этого в .htaccess понадобится добавить такое правило:

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

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

Если нужно сделать перенаправление с поддомена на домен, добавьте косую черту перед точкой, которая идёт после поддомена. Например, для редиректа с blog.domen.com на domen.com правило будет таким:

RewriteCond %{HTTP_HOST} ^blog\.domen\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.blog\.domen\.com$
RewriteRule ^(.*)$ https://domen.com/$1 [R=301,L]

301 редирект на папку другого домена

Такой редирект может понадобиться, если вы решили перенести раздел с поддомена в подпапку. Например, сначала у вас был блог по адресу blog.domen.com, а теперь нужно перенести его на domen.com/blog. Тогда правило для редиректа будет таким:

RewriteCond %{HTTP_HOST} ^blog\.domen\.com$ [NC]
RewriteRule ^(.*)$ https://domen.com/blog/ [R=301,L]

Другой пример — консолидация двух доменов. Например, у вас есть магазин одежды odezhda.com, вы купили магазин обуви obuv.com и решили перенести его в папку на основном сайте — odezhda.com/obuv. В этом случае правило будет таким:

RewriteCond %{HTTP_HOST} ^obuv\.com$ [NC]
RewriteRule ^(.*)$ https://odezhda.com/obuv/ [R=301,L]

Если ситуация обратная и вам нужно настроить редирект с подпапки на домен, правило будет таким:

RewriteCond %{HTTP_HOST} ^odezhda\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.odezhda\.com$
RewriteRule ^obuv$ https://obuv.com/ [R=301,L]

Где ^obuv$ — название подпапки.

301 редирект с HTTP на HTTPS

Когда вы только установили SSL-сертификат, попасть на защищенную версию сайта получится, только если специально дописать перед доменом https:// в адресной строке. Если просто ввести в браузере домен, сайт откроется по протоколу HTTP.

В этом случае нужно настроить 301 редирект с HTTP на HTTPS, чтобы защищённая версия сайта открывалась, даже если человек специально добавит http:// в браузере. Для этого добавьте в .htaccess такое правило:

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

301 редирект с WWW на без WWW

Обычно на одну и ту же страницу на сайте можно зайти по двум адресам: с www и без. Для поисковых систем это будут две разные страницы с одинаковым содержимым.

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

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

Это можно проверить двумя способами:

  • загуглить по очереди обе версии домена с оператором “site” (site:domen.com и site:www.domen.com) и посчитать, у какого варианта больше результатов в выдаче;
  • добавить обе версии сайта в Google Search Console и проверить количество страниц в индексе там. Этот вариант будет более точным.

Чтобы настроить редирект с WWW на без WWW, добавьте в .htaccess такой код:

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

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

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

301 редирект с без слеша на слэш

Так же как в примере с WWW и без WWW, на одну и ту же страницу обычно можно зайти по ссылке с косой чертой в конце и без неё. Для поисковых систем такие страницы тоже будут дубликатами.

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

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

Если хотите, чтобы все ссылки наоборот были без слеша, добавьте в .htaccess такое правило:

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

301 редирект на URL без расширения

Допустим, у вас есть страница https://domen.com/about.html, и вы бы хотели, чтобы в адресной строке отображалось только https://domen.com/about. В таком случае добавьте такое правило:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

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

301 редирект с верхнего регистра на нижний

Как и в предыдущих примерах, для поисковых ботов ссылки с разным регистром — https://domen.com/home и https://domen.com/Home — это две разные страницы.

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

Лучше всего делать такой при помощи .htaccess и PHP. Можно, конечно, только при помощи .htaccess, но тогда придётся прописывать команды для проверки каждой буквы. Это будет создавать дополнительную нагрузку на Apache. Скорее всего, незначительную, но всё равно. Поэтому лучше делать в два этапа. Для этого добавьте в .htaccess такой код:

RewriteCond %{REQUEST_URI} [A-Z][OR]
RewriteCond %{QUERY_STRING} [A-Z]
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (.*) rewrite-strtolower.php?rewrite-strtolower-url=$1 [QSA,L]

Затем создайте в этой же папке файл rewrite-strtolower.php и добавьте в него строки:

if(isset($_GET['rewrite-strtolower-url'])) {
$url = $_GET['rewrite-strtolower-url'];
unset($_GET['rewrite-strtolower-url']);
$params = http_build_query($_GET);
if(strlen($params)) {
$params = '?' . $params;
}
// Если на целевом ресурсе нет SSL сертификата, замените https:// на http:// ниже
header('Location: https://' . $_SERVER['HTTP_HOST'] . '/' . strtolower($url) . $params, true, 301);
exit;
}
header("HTTP/1.0 404 Not Found");
die('Unable to convert the URL to lowercase. You must supply a URL to work upon.');

301 редирект для нового формата перманентных ссылок на сайте с WordPress

Если у вас сайт на WordPress и вы поменяли формат ссылок на посты или товары, ссылки старого формата перестанут работать. Если до смены формата люди делились ссылками на ваш сайт в соцсетях, после смены формата при переходе по ним будет возникать ошибка 404.

Для таких ситуаций тоже есть решение: сгенерируйте правило для .htaccess в специальном сервисе Yoast. Тогда старые ссылки продолжат открываться.

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

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

Такие страницы часто бывают в интернет-магазинах. Некоторые CMS добавляют в URL страницы параметр, когда посетитель меняет на ней фильтры или сортировку. Например, выбирает размер кроссовок и он добавляется к ссылке в адресной строке браузера. В итоге у страницы помимо основного URL будет ещё несколько с различными дополнительными параметрами.

Другой пример — товар находится сразу в нескольких категориях и URL-адрес меняется в зависимости от того, из какой категории человек на него переходит. Например, есть товар — кроссовки для бега Adidas Runfalcon. Их можно найти в категории «Кроссовки», а также подкатегориях «Кроссовки Adidas» и «Кроссовки для бега».

Некоторые CMS в такой ситуации генерируют три страницы с разными адресами:

  • при переходе из категории «Кроссовки» – https://domen.com/krossovki/adidas-runfalcon
  • при переходе из подкатегории «Кроссовки Adidas» – https://domen.com/krossovki/adidas/adidas-runfalcon
  • при переходе из подкатегории «Кроссовки для бега» – https://domen.com/krossovki/running/adidas-runfalcon

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

Лучше всего будет выбрать каноническую страницу и добавить ей атрибут rel=“canonical”. Это делают в коде страницы между тегами

.

Атрибут rel=”canonical” говорит поисковикам: у страницы есть дубликаты, но конкретно эту нужно считать главной. В итоге именно она будет отображаться в результатах поиска, на неё перейдёт ссылочный вес и другие характеристики дубликатов, которые влияют на позицию в выдаче.

Рекомендации Google по использованию атрибута rel=”canonical”.

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

Бывает, нужно сделать так, чтобы сайт всегда открывался с WWW и по HTTPS. В этом случае настраивать два правила для редиректа — плохая идея. Это называется «цепочка редиректов». Когда сайт сначала перенаправляется с http://example.com на https://example.com, а потом с https://example.com на https://www.example.com.

Каждый новый редирект — это дополнительная нагрузка на веб-сервер. В итоге страница загружается медленнее. Вместо этого лучше объединить два редиректа в одном правиле. Конкретно для нашего примера оно будет таким:

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} =on RewriteCond %{HTTP_HOST} ^example\.com$ RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

Чтобы найти у себя на сайте цепочку редиректов, проверьте его при помощи сервиса httpstatus.

Перед созданием 301 редиректа…

А начну я с того, что перед созданием перенаправления, стоит тщательно проверить работоспособность сайта на новом домене. В частности:

  • Проверьте директивы в файле robots.txt.
  • Проверьте метатеги Robots на веб-страницах сайта, на новом домене.
  • Проверьте метатеги canonical.
  • Проверьте доступность страниц.
  • Обязательно создайте 404 страницу и установите на неё счётчик, в дальнейшем это позволит отследить наличие проблем.

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

Перенаправление с одного домена на другой в .htaccess

Существует достаточно много вариантов решения поставленной задачи. Лично я рекомендую использовать вот такой вариант?


RewriteEngine on
RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC]
RewriteRule ^([^/]+) $1 [L]
RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.ru$
RewriteRule ^(.*)$ http://www.new-domain.ru/$1 [R=301,L]

Чем хорош данный вариант? Во первых, он исключает из редиректа на старом домене файл robots.txt, что позволяет задать в нём директиву Host с указанием нового домена. Это работает только для поисковой системы Яндекс, подробней читайте тут. Я же отмечу, что директива Host может быть указана где угодно, но лучше будет указать её так:

User-agent: Yandex
Disallow: /cgi-bin
Host: www.new-domain.ru

Во вторых, этот вариант осуществляет редирект с одного домена на другой, независимо от того было ли указано в старом домене www. или нет, учтены оба варианта.

Очевидно и то, что для работы приведенного примера редиректа необходимо указать свои домены. Обращаю ваше внимание на то, что в регулярном выражении директивы RewriteCond необходимо экранировать спецсимволы, тот же символ точки (.), например: old-domain\.ru, в то время как для нового домена в этом нет необходимости, но нужно начинать именно с HTTP-протокола, т.е. http:// и т.д.

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