Редирект (от англ. redirect – переориентировать) – это переадресация страницы сайта на какую-то другую страницу или другой сайт. Редирект можно сделать различными способами, основные из которых и будут здесь рассмотрены., а именно redirect на php, javascript, редирект при помощи html и при помощи файла htaccess.
Среди перечисленных способов, наиболее актуальными являются php redirect и редирект при помощи .htaccess. Дело в том, что именно эти способы позволяют не только переадресовать страницу, но и вернуть специальную 301 ошибку (301 Permament Redirect). Для чего же это нужно? А нужно это для поисковых систем.
Допустим у нас был раскрученный сайт с большим числом посетителей. Затем сайт был перемещён на новый домен. Поисковая система его ещё не знает. 301 редирект позволяет как бы “склеить” старый и новый адрес, сохранив при этом все те элементы оптимизации, которые были сделаны для этого сайта, тем самым сохранив посещаемость и аудиторию самого сайта.
А теперь рассмотрим все перечисленные варианты редиректов, и начнём с редиректа на php.
PHP redirect (301)
Редирект на php, как и на других языках программирования, основан на спецификации протокола HTTP, а именно отправки необходимых заголовков. Как это работает? Довольно просто. Каждый раз, когда мы обращаемся к какой-то странице интернета, мы получаем HTTP ответ от сервера, который содержит заголовки (header) и тело (body). В теле ответа
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: http://site.com/pagename.html”);
?>
Редирект HTML
В языке разметки HTML есть специальный мета-тег, предназначенный для переадресации.
Изменяется только поле content, где указывается количество секунд до переадресации и собственно ссылка, куда будет производиться редирект. Думаю не стоит говорить, что тег помещается в html-код между тегами head.
Редирект JavaScript
Пожалуй самый ненадёжный редирект, поскольку пользователь всегда может отключить javascript в браузере. Делается это, правда, нечасто, поэтому способ имеет право на существование.
function reload() {location = 'http://site.com'}; setTimeout('reload()', 0);
</script>
В данном коде создаётся функция с переадресацией на нужную страницу, а затем вызывается в функции setTimeout, что позволяет произвести переадресацию спустя необходимое время.
Редирект htaccess (301)
Файл .htaccess – это служебный файл с различными дополнительными настройками сервера Apache. Размещается он вручную, в нашем случае, в корне сайта. С его помощью можно устраивать 301 редиректы, однако для этого в Апаче должны быть включены необходимые модули.
Использование директив модуля mod_alias
В данном модуле существуют три директивы: Redirect, RedirectPermanent и RedirectMatch. Первые две вроде как идентичны по своим свойства, третья идёт особняком. Для первых двух пример:
Redirect permanent /index.html http://site.com
RedirectPermanent /index.html http://site.com/default.html
Строчки схожи. Но вроде как существует один минус – чтобы перенаправить все страницы, нужно их все и будет указать в списке. Чтобы как-то облегчить задачу, существует та другая директива:
Можно задавать регулярные выражения для переадресации со старого урла на новый.
Использование директив модуля mod_rewrite
Чтобы не было двоякочтения одних и тех же страниц у поисковиков, иногда нужно переправить все адреса с домена без www на домен с www. Например,
RewriteEngine On
Options +FollowSymLinks
#две строки для переадресации от "без ввв" к "с ввв"
RewriteCond %{HTTP_HOST} ^site.com
RewriteRule (.*) http://www.site.com/$1 [R=301,L]
Вместо заключения
Если вас всё ещё мучает вопрос, на чём же остановить свой выбор (конечно мучает, тисками и ножницами – прим.ред.), то пора перестать мучиться (да что вы говорите! – прим.ред.). Останавливаем взор на редиректе php (или другого языка программирования, которые здесь не были рассмотрены, например Perl) и редиректе при помощи файла .htaccess, поскольку именно они позволяют перенести сайт без всяких потерь для оптимизации в поисковых системах. Если оно не важно, то тогда подойдёт любой метод. И собственно на этой заключительной ноте (соль? ля? си? – прим.ред.) я и заканчиваю этот пост.
Похожие записи:
21/02/2010 at 3:31 Постоянная ссылка Цитировать
“Думаю не стоит говорить, что тег помещается в html-код между тегами body.” – думаю стоит сказать, что не body, a head) мета тэг всё-таки))
21/02/2010 at 9:49 Постоянная ссылка Цитировать
Именно! И в боди ему делать нечего. Большое спасибо за найденную опечатку
16/04/2010 at 16:39 Постоянная ссылка Цитировать
Только в выражении
function reload() {location = http:⁄⁄site.com}; setTimeout(‘reload()’, 0);
http:⁄⁄site.com нужно заключить в кавычки вот так:
function reload() {location = ‘http:⁄⁄site.com’}; setTimeout(‘reload()’, 0);
Тогда будет работать. А может кто знает, как сделать редирект на JavaScript так, чтобы Internet Explorer не воспринимал это как попытку запуска активного содержания? Нужно для дора. Мета-тег “refresh” и редирект 301 НЕ подходят.
16/04/2010 at 16:55 Постоянная ссылка Цитировать
в принципе оно и без кавычек должно работать, но для порядка можно поставить.
по правде говоря не знаю, даже не задумывался.
а можно поконкретнее о сути проблемы? может другие варианты могут подойти
16/04/2010 at 18:20 Постоянная ссылка Цитировать
Я попробовал в Опере, без кавычек не работало. Видимо, зависит от версии.
А по сути проблемы. Если использовать обычные приёмы JavaScript (location и т.п., onclick и т.п.), то мой браузер IE, который с настройками по умолчанию, предупреждает о потенциальной опасности и спрашивает, выполнять ли активное содержимое страницы. Это, как мне кожется, отпугивает юзеров. Зато IE свободно выполняет код AdSence, который тоже – JavaScript. Вот я и спрашиваю, может кто знает ухищрённые методы, чтоб IE не возмущался. Ну и, конечно же, чтобы и поисковики не шарахались.
17/04/2010 at 13:04 Постоянная ссылка Цитировать
Скорее всего. Спасибо за найденный недочёт!
Таким вопросом специально не задавался, но насколько я знаю – никак, из-за политик безопасности. Хотя, например, есть SWFObject для флэша, который этим не страдает, да и сам флэш без клика по нему делает активным.
05/05/2010 at 22:33 Постоянная ссылка Цитировать
грамотно пишите и без всяких непонятных оборотов
05/05/2010 at 23:39 Постоянная ссылка Цитировать
Спасибо, всегда стараюсь писать, чтобы было как можно более доступно
18/05/2010 at 3:19 Постоянная ссылка Цитировать
Можно и в body поместить. Что за пуританство…
ещё вариант, более правильный
location.replace (“новый адрес”);
javascript строгий язык, и без кавычек работать не будет. В общем, за инициативу 5, за содержимое 2. Садитесь.
18/05/2010 at 3:22 Постоянная ссылка Цитировать
Для тех, у кого в IE яваскрипты не работают – только если страница запущена с локального компьютера, кликом по файлу. С сервера, в том числе localhost, будет работать.
18/05/2010 at 10:02 Постоянная ссылка Цитировать
2Сергей, не понимаю Ваших возмущений. О том, где размещать, ни слова не было. Если Вы конечно в ответе не совместили комент к переадресации на хтмл и на жабаскрипт. Что касается варианта с тегом мета, то эти теги как правило помещаются именно в head, а присутствие их в других местах – признаки дурного тона
локейшн.реплейс – простая переадресация, я дал скрипт с возможностью выставить время, через которое будет произведена переадресация.
За комменты спасибо, 5, за их содержание и стиль написания – 2. Садитесь.
06/07/2010 at 12:49 Постоянная ссылка Цитировать
Мне очень нужна помощь. Как сделать редирект, что-бы сразу перекидывало на 2 сайта, а не на один?
06/07/2010 at 12:52 Постоянная ссылка Цитировать
вообще это признак дурного тона, когда открывается два окна. первый редирект можно сделать через метатег, а второй через жабаскрипт, чтобы отдельным окном открылось через window.open.
08/07/2010 at 1:22 Постоянная ссылка Цитировать
Замечательный блог! Искал подобный по программированию и набрёл на ваш. Удачно набрёл, всё просто и доступно написано. Подписался.
08/07/2010 at 12:28 Постоянная ссылка Цитировать
Спасибо за отзыв! Стараюсь писать как можно понятнее и доступнее. Сам натыкался на много книг и других источников, где чёрт ногу сломит, вообще не понять о чём речь.
15/07/2010 at 4:43 Постоянная ссылка Цитировать
Подписываюсь под словами Begin – всё чётко и понятно. Респект автору!
15/07/2010 at 11:14 Постоянная ссылка Цитировать
Большое спасибо! =)
30/07/2010 at 16:30 Постоянная ссылка Цитировать
В рассылках не всегда открывают ссылки.Как сделать,чтобы они открывались автоматически,если используется html-код при написании письма?
31/07/2010 at 22:28 Постоянная ссылка Цитировать
М? не очень понял к чему комент, к тому же в теме про редирект?
Или это к чему? просто не очень понял контекст
02/08/2010 at 1:57 Постоянная ссылка Цитировать
Я пользуюсь сервисом Freeleads.Рассылаются письма ежедневно 5000 пользователей,можно в html-коде.Пользователи могут прочитать письмо,а ссылку не открывать.Как записать ее в письме,чтобы она открылась автоматом или хотя бы когда на нее попадет стрелка от мыши?
03/08/2010 at 13:03 Постоянная ссылка Цитировать
Добрый день! Подскажите как перенаправлять пользователя, чтобы браузер корректно выставлял реферер сайта, с которого идет редирект?
03/08/2010 at 14:17 Постоянная ссылка Цитировать
Ммм, не очень понял, что именно не так, но думаю стоит глянуть статьюпо ссылке , думаю там будет ответ на вопрос.
03/08/2010 at 14:22 Постоянная ссылка Цитировать
Ниже представлено схематическое описание проблемы:
site1: “PHP redirect” site2
site2: “PHP redirect” site3
site3: в качестве реферер видит site1, а не site2
Выручает “Редирект JavaScript”, но его надежность оставляет желать лучшего.
04/08/2010 at 12:26 Постоянная ссылка Цитировать
подойдёт?ссылка
02/01/2011 at 14:29 Постоянная ссылка Цитировать
Братан,респет тебе.Выбрал javascript,все четко работает
02/01/2011 at 15:45 Постоянная ссылка Цитировать
еееее, ю а велкам!
20/02/2011 at 22:43 Постоянная ссылка Цитировать
Спасибо за информацию!
20/02/2011 at 22:51 Постоянная ссылка Цитировать
Ю а велкам!
24/03/2011 at 21:29 Постоянная ссылка Цитировать
Спасибо автору от неопытного “сайтостроителя”!
Подскажите, пожалуйста, какой способ редиректа подойдет мне.
Вы, наверняка, знаете о заработке на партнерских программах инфопродуктов при помощи контекстной рекламы. Рекламировать продающий сайт автора является накладным по цене за клик из-за конкуренции. Хочу для экономии на цене за клик крутить свой домен, но чтобы с него пользователь сразу и незаметно перенаправлялся на домен автора.
Если это называется редиректом, то какой способ мне подойдет?
Спасибо!
24/03/2011 at 22:01 Постоянная ссылка Цитировать
Спасибо за отзыв!
Вообще я не очень одобряю такие вещи. Но отвечу, что яваскрипт вам подойдёт.
25/04/2011 at 22:40 Постоянная ссылка Цитировать
What¡¦s Happening i am new to this, I stumbled upon this I’ve discovered It absolutely helpful and it has aided me out loads. I am hoping to contribute & aid other users like its aided me. Great job.
26/04/2011 at 5:23 Постоянная ссылка Цитировать
Thanks for the good response! I’m glad to be helpful for you
06/06/2011 at 12:59 Постоянная ссылка Цитировать
Здоровский блог! Респект автору!!!
06/06/2011 at 13:01 Постоянная ссылка Цитировать
Большое спасибо!=)
06/08/2011 at 14:42 Постоянная ссылка Цитировать
а как напимер сделать редирект на рендомную (одну из трех) ссылку?
06/08/2011 at 16:52 Постоянная ссылка Цитировать
как вариант – на пхп сделать массив из трёх ссылок (например, $arr), где порядковые номера будут от 0 до 2, а затем через rand случайно выбрать число от 0 до 2 (пускай в переменной $i) и просто подставлять это число в массив, а там эту хрень подставлять уже вместо урла (типа, $arr[$i])
07/08/2011 at 1:04 Постоянная ссылка Цитировать
я хочу в яве сделать, но не получается(
подправь пожалуйста!
<script language="JavaScript" type="text/javascript">
<!--
function r_out01(){
var b=[];
b[0]='<href="сайт1">';
b[1]='<href="сайт2">';
b[2]='<href="сайт3">';
}
function GoNah(){
location="r_out01()";
setTimeout( ' GoNah()', 5000 );
//-->
</script>
07/08/2011 at 1:22 Постоянная ссылка Цитировать
Эммм, наворотил. Особенно с функцией гоунах, которые не закрывается. А вызов функции в сеттаймаут в кавычках и в итоге она будет воспринята как строка. В общем, будь проще, и перечитай по сути то, что я написал выше – это актуально и для жабы. Вот код, фтыкай.
var b = Array('сайт1', 'сайт2', 'сайт3');
var numb = Math.floor(Math.random()*3);
setTimeout( b[numb], 5000 );
07/08/2011 at 11:46 Постоянная ссылка Цитировать
Cпасибо, будем пробовать)
29/11/2011 at 9:16 Постоянная ссылка Цитировать
Спасибо за информацию. Пригодилось. А то до этого не знал как правильно редирект сделать
29/11/2011 at 9:41 Постоянная ссылка Цитировать
Всегда пожалуйста =)
07/06/2012 at 13:07 Постоянная ссылка Цитировать
Добрый день! У меня такой вопрос!
Есть два домена ,ведущих к одному сайту.
старый_сайт.ру и новый_сайт.ру.
Файлы на старом лежат. Нужно, что бы шло перенаправление со старого адреса на новый. То есть если набрать старый_адрес.ру, то попадаешь на новый_адрес.ру.
Сайт разработан на модексе. Я его плохо еще изучила ,поэтому редирект лучше сделать на htaccess.
Кто нибудь может помочь?
07/06/2012 at 13:09 Постоянная ссылка Цитировать
RewriteCond %{HTTP_HOST} ^(.*)oldsite.ru(.*)
RewriteRule ^(.*)$ http:// www .new site.ru/$1 [R=301,L]
07/06/2012 at 14:14 Постоянная ссылка Цитировать
Если не ошибаюсь, здесь идет полная пересылка на новый сайт? Но ведь у меня файлы на старом домене!
07/06/2012 at 14:17 Постоянная ссылка Цитировать
А файлы по новым ссылкам не будут доступны?
Идёт смена имени или смена имени и хоста?
07/06/2012 at 14:19 Постоянная ссылка Цитировать
Только смена имени.
07/06/2012 at 14:27 Постоянная ссылка Цитировать
Тогда и файлы будут с нового имени доступны. Пропишите редирект – и проверьте сами.
07/06/2012 at 15:04 Постоянная ссылка Цитировать
Спасибо вам огромное))))
Сработало)))))
Еще один вопрос)) Это отель, который сменил название. На сайте есть бронирование номеров. После того что я проделала, бронирование должно нормально работать?
07/06/2012 at 16:28 Постоянная ссылка Цитировать
Без понятия, но по идее всё должно быть нормально =)
07/06/2012 at 18:41 Постоянная ссылка Цитировать
Спасибо еще раз)))
Если что, буду обращаться)))
07/06/2012 at 23:47 Постоянная ссылка Цитировать
Незачто =)
08/06/2012 at 11:54 Постоянная ссылка Цитировать
И снова я к вам)))
такая проблема…
вот адреса тех сайтов о которых вчера шла речь…
imperia-g.kz – старое сайт
gempire.kz – новое название
Проблема в том ,что в меню не открывается ни один пункт…..
Выдает такую ошибку …. Подключение к imperia-g.kz прервано…
Я побоялась ,что это связано с редиректом, и его уже закоментировала. Но ошибка не исчезла. Вопрос такой..может ли это возникнуть из за редиректа отдельных страниц. Может быть тот кто до меня работал делал как делал редирект на каждой странице. И вообще как вы думаете с чем это может быть связано?
За ранее спасибо!
15/06/2012 at 12:26 Постоянная ссылка Цитировать
комментарий в спам попал, только сейчас заметил.
проблемы не наблюдаю, она ещё актуальна?
15/06/2012 at 12:37 Постоянная ссылка Цитировать
Нет!)))
Проблема не актуальна)))
Это проблем в самой гостинице. Тут конфликт идет, а я не знала))
Ну и в сайте ссылки придется переделывать!(((
Разрабатывал предыдущий админ, это его ошибки.
Спасибо)))
15/06/2012 at 12:57 Постоянная ссылка Цитировать
Да незачто =)
23/11/2012 at 20:55 Постоянная ссылка Цитировать
Здравствуйте. Скажите, а как сделать редирект 301 со всех страниц типа site.ru/catalog/page на страницы типа site.ru/page , где page – разные страницы ? То есть, все тоже самое только без catalog . Спасибо.
24/11/2012 at 11:09 Постоянная ссылка Цитировать
Попробуйте что-нибудь такое RedirectMatch /catalog/(.*)\$ /$1/
24/11/2012 at 17:58 Постоянная ссылка Цитировать
Что-то не помогает… Может какой другой вариант?
24/11/2012 at 18:04 Постоянная ссылка Цитировать
вот так помогло! всем спасибо!
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^catalog/([^/]+)$ /$1 [R=301,L]
27/11/2014 at 12:23 Постоянная ссылка Цитировать
Добрый день.
Проблема почти как у Gyuliya – два домена, один сайт старый (12 лет, файловая система хранения данных), второй – новый, создан на ocStore. Соответственно, у старого адреса /cat_10001.htm (число меняется), на новом сайте ЧПУ. Я хочу перенести новый сайт на старый адрес и мне нужно грамотно сделать редирект.
Сначала опишу свою идею:
Я думаю создать на новом сайте в корне пару сотен файлов с адресами страниц старого сайта, но вместо контента забить туда скрипт PHP с переадресацией 301. А в robots.txt запретить индексировать эти файлы, чтобы по мере индексации новых страниц, старые выпадали из индекса, а не становились дублями. Удалять файлы нецелесообразно, как минимум, полгода – т.к. ссылки все равно будут вести по старым адресам. Да, это долго и геморройно, но на мой взгляд – это наиболее правильное решение для сохранения позиций сайта и страниц. (помимо высоких позиций в поисковой выдаче есть еще ТиЦ 190 и PR 3). Пробовал настроить htaccess, но CMS, на которой создан новый сайт, при редиректе дописывает к адресу параметры, которые удалить невозможно – если закомментить строку параметров – сайт вообще перестает работать.
Общаюсь по этому поводу с Платоном Щукиным, но он никак не вникнет в проблему. Та же беда на форуме поддержки CMS.
Теперь вопросы:
Насколько моя идея верна? Есть ли более простые решения? Если есть – пожалуйста, ткните носом, но аргументированно – ТП яндекса курит, форумчане тоже дельных советов не дали – такие же эникейщики, а не специалисты.
Задача:
Перенести новый сайт с домена aniteks.ru на старый адрес profinstrument.ru, при этом сохранить позиции сайта в поисковиках (читай – сохранить рабочие страницы по старым адресам, ссылкам, поисковой выдаче, но выдать вместо них новые адреса ЧПУ), передавать правильные заголовки ответа сервера (301 редирект).
27/11/2014 at 15:19 Постоянная ссылка Цитировать
На форуме, все же, нашелся гуру CMS и редиректа – вопрос решен.
27/11/2014 at 15:32 Постоянная ссылка Цитировать
Егор, добрый день!
Вот буквально только сел вам писать развёрнутый ответ, а уже всё решилось. Рад за вас! Всё же если что – обращайтесь.
27/11/2014 at 16:30 Постоянная ссылка Цитировать
Нивапрос, Александр, если понадобится – я знаю, куда писать.
У меня с этим новым сайтом еще много будет геморроя…
Сейчас, например, добавляю в backend поле для добавления краткого описания товара, которое надо будет выводить в списке товаров в категории…
Есть такие люди, которые не знают, как правильно и требуют, чтобы было “я так хочу” – вот и озадачил меня один такой – мол не хочу такие большие картинки и все характеристики товара в столбик – пусть будет маленькая фоточка, размером в 50 пикселей и характеристики товара в строчку. Чтобы больше товара на странице помещалось. Короче, тупо прайслист ему нужен на странице категории, с мелкими картинками (настолько мелкими, что лучше уж без них). Но что поделаешь, хозяин – барин. Пусть будет так как он хочет.
Только вот я не понимаю, как можно раскручивать сайт, с которого все будут убегать сломя голову!
28/11/2014 at 11:25 Постоянная ссылка Цитировать
Да, гемор будет. С сео вообще гемор и, к сожалению, потери по посещалке всё равно будут.
И да, к сожалению, большинство себя считают самыми умными, и вместо того, чтобы довериться мастерам своего дела, хотят сделать какую-то нереальную тупость. И иногда это вызывает внутренний бугурт, когда приводят доводы, что вот это по этому и этому неправильно и тупо, а в итоге те хотят как им всралось. Увы, такова человеческая природа. Наше дело их предупредить, а им уже решать.
26/10/2016 at 16:54 Постоянная ссылка Цитировать
А как сделать, чтобы ссылки которые выводятся через скрипты, например, скрипт adsense, пускались через редирект, а лучше страницу прокладку?
27/10/2016 at 8:24 Постоянная ссылка Цитировать
Под WP есть плагин WP No External Links. Под что-то другое нужно либо искать решения, либо писать нечто по образу и подобию.
12/05/2017 at 14:56 Постоянная ссылка Цитировать
Не знаю, технология не важна, важен результат. Как проверить ответ сервера, я писал в конце поста, вот перейдите по старому домену и если произойдет 301-редирект на новый домен значит все окей, можно спать спокойно! У меня ничего не получилось , как я не старался , вопрос что я сделал не так ? когда все делал правильно.