Как сделать редирект 301?

« Предыдущая запись
 
  Следующая запись »
 

redirect Как сделать редирект 301?Редирект (от англ. redirect – переориентировать) – это переадресация страницы сайта на какую-то другую страницу или другой сайт. Редирект можно сделать различными способами, основные из которых и будут здесь рассмотрены., а именно redirect на php, javascript, редирект при помощи html и при помощи файла htaccess.

Среди перечисленных способов, наиболее актуальными являются php redirect и редирект при помощи .htaccess. Дело в том, что именно эти способы позволяют не только переадресовать страницу, но и вернуть специальную 301 ошибку (301 Permament Redirect). Для чего же это нужно? А нужно это для поисковых систем.

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

А теперь рассмотрим все перечисленные варианты редиректов, и начнём с редиректа на php.

PHP redirect (301)

Редирект на php, как и на других языках программирования, основан на спецификации протокола HTTP, а именно отправки необходимых заголовков. Как это работает? Довольно просто. Каждый раз, когда мы обращаемся к какой-то странице интернета, мы получаем HTTP ответ от сервера, который содержит заголовки (header) и тело (body). В теле ответа

<?php
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: http://site.com/pagename.html”);
?>

Редирект HTML

В языке разметки HTML есть специальный мета-тег, предназначенный для переадресации.

<META http-equiv="refresh" content="0; url=http://site.com">

Изменяется только поле content, где указывается количество секунд до переадресации и собственно ссылка, куда будет производиться редирект. Думаю не стоит говорить, что тег помещается в html-код между тегами head.

Редирект JavaScript

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

<script language='JavaScript'>
function reload() {location = 'http://site.com'}; setTimeout('reload()', 0);
</script>

В данном коде создаётся функция с переадресацией на нужную страницу, а затем вызывается в функции setTimeout, что позволяет произвести переадресацию спустя необходимое время.

Редирект htaccess (301)

Файл .htaccess – это служебный файл с различными дополнительными настройками сервера Apache. Размещается он вручную, в нашем случае, в корне сайта. С его помощью можно устраивать 301 редиректы, однако для этого в Апаче должны быть включены необходимые модули.

Использование директив модуля mod_alias

В данном модуле существуют три директивы: Redirect, RedirectPermanent и RedirectMatch. Первые две вроде как идентичны по своим свойства, третья идёт особняком. Для первых двух пример:

Redirect 301 / http://site.com
Redirect permanent /index.html http://site.com
RedirectPermanent /index.html http://site.com/default.html

Строчки схожи. Но вроде как существует один минус – чтобы перенаправить все страницы, нужно их все и будет указать в списке. Чтобы как-то облегчить задачу, существует та другая директива:

RedirectMatch /(.*)\.html$ /$1.php

Можно задавать регулярные выражения для переадресации со старого урла на новый.

Использование директив модуля 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, поскольку именно они позволяют перенести сайт без всяких потерь для оптимизации в поисковых системах. Если оно не важно, то тогда подойдёт любой метод. И собственно на этой заключительной ноте (соль? ля? си? – прим.ред.) я и заканчиваю этот пост.

, , , ,

1 звезда2 звезд3 звезд4 звезд5 звезд (голосов: 8, средний: 5.00 из 5)
Понравилась статья или журнал? Подписывайся на продолжение!
Отзывов: 66 на запись

"Как сделать редирект 301?"

  1. Андриан iT5
    21/02/2010 at 3:31 Постоянная ссылка Цитировать

    “Думаю не стоит говорить, что тег помещается в html-код между тегами body.” – думаю стоит сказать, что не body, a head) мета тэг всё-таки))

  2. Именно! И в боди ему делать нечего. Большое спасибо за найденную опечатку

  3. Только в выражении

    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 НЕ подходят.

  4. в принципе оно и без кавычек должно работать, но для порядка можно поставить.

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

  5. Я попробовал в Опере, без кавычек не работало. Видимо, зависит от версии.
    А по сути проблемы. Если использовать обычные приёмы JavaScript (location и т.п., onclick и т.п.), то мой браузер IE, который с настройками по умолчанию, предупреждает о потенциальной опасности и спрашивает, выполнять ли активное содержимое страницы. Это, как мне кожется, отпугивает юзеров. Зато IE свободно выполняет код AdSence, который тоже – JavaScript. Вот я и спрашиваю, может кто знает ухищрённые методы, чтоб IE не возмущался. Ну и, конечно же, чтобы и поисковики не шарахались.

  6. Александр Шуйский
    17/04/2010 at 13:04 Постоянная ссылка Цитировать

    Скорее всего. Спасибо за найденный недочёт!

    Таким вопросом специально не задавался, но насколько я знаю – никак, из-за политик безопасности. Хотя, например, есть SWFObject для флэша, который этим не страдает, да и сам флэш без клика по нему делает активным.

  7. грамотно пишите и без всяких непонятных оборотов

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

  9. Можно и в body поместить. Что за пуританство…
    ещё вариант, более правильный

    location.replace (“новый адрес”);

    javascript строгий язык, и без кавычек работать не будет. В общем, за инициативу 5, за содержимое 2. Садитесь.

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

  11. 2Сергей, не понимаю Ваших возмущений. О том, где размещать, ни слова не было. Если Вы конечно в ответе не совместили комент к переадресации на хтмл и на жабаскрипт. Что касается варианта с тегом мета, то эти теги как правило помещаются именно в head, а присутствие их в других местах – признаки дурного тона

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

    За комменты спасибо, 5, за их содержание и стиль написания – 2. Садитесь.

  12. Мне очень нужна помощь. Как сделать редирект, что-бы сразу перекидывало на 2 сайта, а не на один?

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

  14. Замечательный блог! Искал подобный по программированию и набрёл на ваш. Удачно набрёл, всё просто и доступно написано. Подписался.

  15. Спасибо за отзыв! Стараюсь писать как можно понятнее и доступнее. Сам натыкался на много книг и других источников, где чёрт ногу сломит, вообще не понять о чём речь.

  16. Подписываюсь под словами Begin – всё чётко и понятно. Респект автору!

  17. Большое спасибо! =)

  18. Aleksandr Frolov
    30/07/2010 at 16:30 Постоянная ссылка Цитировать

    В рассылках не всегда открывают ссылки.Как сделать,чтобы они открывались автоматически,если используется html-код при написании письма?

  19. М? не очень понял к чему комент, к тому же в теме про редирект?
    Или это к чему? просто не очень понял контекст

  20. Александр Фролов
    02/08/2010 at 1:57 Постоянная ссылка Цитировать

    Я пользуюсь сервисом Freeleads.Рассылаются письма ежедневно 5000 пользователей,можно в html-коде.Пользователи могут прочитать письмо,а ссылку не открывать.Как записать ее в письме,чтобы она открылась автоматом или хотя бы когда на нее попадет стрелка от мыши?

  21. Дмитрий
    03/08/2010 at 13:03 Постоянная ссылка Цитировать

    Добрый день! Подскажите как перенаправлять пользователя, чтобы браузер корректно выставлял реферер сайта, с которого идет редирект?

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

  23. Дмитрий
    03/08/2010 at 14:22 Постоянная ссылка Цитировать

    Ниже представлено схематическое описание проблемы:

    site1: “PHP redirect” site2
    site2: “PHP redirect” site3
    site3: в качестве реферер видит site1, а не site2

    Выручает “Редирект JavaScript”, но его надежность оставляет желать лучшего.

  24. подойдёт? ссылка

  25. Братан,респет тебе.Выбрал javascript,все четко работает

  26. еееее, ю а велкам!

  27. Аквариумная рыбка
    20/02/2011 at 22:43 Постоянная ссылка Цитировать

    Спасибо за информацию!

  28. Ю а велкам!

  29. Спасибо автору от неопытного “сайтостроителя”!
    Подскажите, пожалуйста, какой способ редиректа подойдет мне.
    Вы, наверняка, знаете о заработке на партнерских программах инфопродуктов при помощи контекстной рекламы. Рекламировать продающий сайт автора является накладным по цене за клик из-за конкуренции. Хочу для экономии на цене за клик крутить свой домен, но чтобы с него пользователь сразу и незаметно перенаправлялся на домен автора.
    Если это называется редиректом, то какой способ мне подойдет?
    Спасибо!

  30. Спасибо за отзыв!
    Вообще я не очень одобряю такие вещи. Но отвечу, что яваскрипт вам подойдёт.

  31. Chandra Fenney
    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.

  32. Thanks for the good response! I’m glad to be helpful for you

  33. Здоровский блог! Респект автору!!!

  34. Большое спасибо!=)

  35. а как напимер сделать редирект на рендомную (одну из трех) ссылку?

  36. как вариант – на пхп сделать массив из трёх ссылок (например, $arr), где порядковые номера будут от 0 до 2, а затем через rand случайно выбрать число от 0 до 2 (пускай в переменной $i) и просто подставлять это число в массив, а там эту хрень подставлять уже вместо урла (типа, $arr[$i])

  37. я хочу в яве сделать, но не получается(
    подправь пожалуйста!
    <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>

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


    var b = Array('сайт1', 'сайт2', 'сайт3');
    var numb = Math.floor(Math.random()*3);
    setTimeout( b[numb], 5000 );

  39. Cпасибо, будем пробовать)

  40. Спасибо за информацию. Пригодилось. А то до этого не знал как правильно редирект сделать

  41. Всегда пожалуйста =)

  42. Добрый день! У меня такой вопрос!
    Есть два домена ,ведущих к одному сайту.
    старый_сайт.ру и новый_сайт.ру.
    Файлы на старом лежат. Нужно, что бы шло перенаправление со старого адреса на новый. То есть если набрать старый_адрес.ру, то попадаешь на новый_адрес.ру.
    Сайт разработан на модексе. Я его плохо еще изучила ,поэтому редирект лучше сделать на htaccess.
    Кто нибудь может помочь?

  43. Александр Шуйский
    07/06/2012 at 13:09 Постоянная ссылка Цитировать


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

  44. RewriteCond %{HTTP_HOST} ^(.*)oldsite.ru(.*)
    RewriteRule ^(.*)$ http:// www .new site.ru/$1 [R=301,L]

    Если не ошибаюсь, здесь идет полная пересылка на новый сайт? Но ведь у меня файлы на старом домене!

  45. Александр Шуйский
    07/06/2012 at 14:17 Постоянная ссылка Цитировать

    А файлы по новым ссылкам не будут доступны?
    Идёт смена имени или смена имени и хоста?

  46. А файлы по новым ссылкам не будут доступны?
    Идёт смена имени или смена имени и хоста?

    Только смена имени.

  47. Александр Шуйский
    07/06/2012 at 14:27 Постоянная ссылка Цитировать

    Тогда и файлы будут с нового имени доступны. Пропишите редирект – и проверьте сами.

  48. Тогда и файлы будут с нового имени доступны. Пропишите редирект – и проверьте сами.

    Спасибо вам огромное))))
    Сработало)))))
    Еще один вопрос)) Это отель, который сменил название. На сайте есть бронирование номеров. После того что я проделала, бронирование должно нормально работать?

  49. Александр Шуйский
    07/06/2012 at 16:28 Постоянная ссылка Цитировать

    Без понятия, но по идее всё должно быть нормально =)

  50. Без понятия, но по идее всё должно быть нормально =)

    Спасибо еще раз)))
    Если что, буду обращаться)))

  51. Александр Шуйский
    07/06/2012 at 23:47 Постоянная ссылка Цитировать

    Незачто =)

  52. И снова я к вам)))
    такая проблема…
    вот адреса тех сайтов о которых вчера шла речь…
    imperia-g.kz – старое сайт
    gempire.kz – новое название
    Проблема в том ,что в меню не открывается ни один пункт…..
    Выдает такую ошибку …. Подключение к imperia-g.kz прервано…
    Я побоялась ,что это связано с редиректом, и его уже закоментировала. Но ошибка не исчезла. Вопрос такой..может ли это возникнуть из за редиректа отдельных страниц. Может быть тот кто до меня работал делал как делал редирект на каждой странице. И вообще как вы думаете с чем это может быть связано?
    За ранее спасибо!

  53. Александр Шуйский
    15/06/2012 at 12:26 Постоянная ссылка Цитировать

    комментарий в спам попал, только сейчас заметил.

    проблемы не наблюдаю, она ещё актуальна?

  54. Нет!)))
    Проблема не актуальна)))
    Это проблем в самой гостинице. Тут конфликт идет, а я не знала))
    Ну и в сайте ссылки придется переделывать!(((
    Разрабатывал предыдущий админ, это его ошибки.
    Спасибо)))

  55. Александр Шуйский
    15/06/2012 at 12:57 Постоянная ссылка Цитировать

    Да незачто =)

  56. Здравствуйте. Скажите, а как сделать редирект 301 со всех страниц типа site.ru/catalog/page на страницы типа site.ru/page , где page – разные страницы ? То есть, все тоже самое только без catalog . Спасибо.

  57. Александр Шуйский
    24/11/2012 at 11:09 Постоянная ссылка Цитировать

    Попробуйте что-нибудь такое RedirectMatch /catalog/(.*)\$ /$1/

  58. Что-то не помогает… Может какой другой вариант?

  59. вот так помогло! всем спасибо!

    RewriteEngine On

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

  60. Добрый день.
    Проблема почти как у Gyuliya – два домена, один сайт старый (12 лет, файловая система хранения данных), второй – новый, создан на ocStore. Соответственно, у старого адреса /cat_10001.htm (число меняется), на новом сайте ЧПУ. Я хочу перенести новый сайт на старый адрес и мне нужно грамотно сделать редирект.
    Сначала опишу свою идею:
    Я думаю создать на новом сайте в корне пару сотен файлов с адресами страниц старого сайта, но вместо контента забить туда скрипт PHP с переадресацией 301. А в robots.txt запретить индексировать эти файлы, чтобы по мере индексации новых страниц, старые выпадали из индекса, а не становились дублями. Удалять файлы нецелесообразно, как минимум, полгода – т.к. ссылки все равно будут вести по старым адресам. Да, это долго и геморройно, но на мой взгляд – это наиболее правильное решение для сохранения позиций сайта и страниц. (помимо высоких позиций в поисковой выдаче есть еще ТиЦ 190 и PR 3). Пробовал настроить htaccess, но CMS, на которой создан новый сайт, при редиректе дописывает к адресу параметры, которые удалить невозможно – если закомментить строку параметров – сайт вообще перестает работать.
    Общаюсь по этому поводу с Платоном Щукиным, но он никак не вникнет в проблему. Та же беда на форуме поддержки CMS.
    Теперь вопросы:
    Насколько моя идея верна? Есть ли более простые решения? Если есть – пожалуйста, ткните носом, но аргументированно – ТП яндекса курит, форумчане тоже дельных советов не дали – такие же эникейщики, а не специалисты.
    Задача:
    Перенести новый сайт с домена aniteks.ru на старый адрес profinstrument.ru, при этом сохранить позиции сайта в поисковиках (читай – сохранить рабочие страницы по старым адресам, ссылкам, поисковой выдаче, но выдать вместо них новые адреса ЧПУ), передавать правильные заголовки ответа сервера (301 редирект).

  61. На форуме, все же, нашелся гуру CMS и редиректа – вопрос решен.

  62. Александр Шуйский
    27/11/2014 at 15:32 Постоянная ссылка Цитировать

    Егор, добрый день!
    Вот буквально только сел вам писать развёрнутый ответ, а уже всё решилось. Рад за вас! Всё же если что – обращайтесь.

  63. Нивапрос, Александр, если понадобится – я знаю, куда писать.
    У меня с этим новым сайтом еще много будет геморроя…
    Сейчас, например, добавляю в backend поле для добавления краткого описания товара, которое надо будет выводить в списке товаров в категории…
    Есть такие люди, которые не знают, как правильно и требуют, чтобы было “я так хочу” – вот и озадачил меня один такой – мол не хочу такие большие картинки и все характеристики товара в столбик – пусть будет маленькая фоточка, размером в 50 пикселей и характеристики товара в строчку. Чтобы больше товара на странице помещалось. Короче, тупо прайслист ему нужен на странице категории, с мелкими картинками (настолько мелкими, что лучше уж без них). Но что поделаешь, хозяин – барин. Пусть будет так как он хочет.
    Только вот я не понимаю, как можно раскручивать сайт, с которого все будут убегать сломя голову!

  64. Александр Шуйский
    28/11/2014 at 11:25 Постоянная ссылка Цитировать

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

  65. А как сделать, чтобы ссылки которые выводятся через скрипты, например, скрипт adsense, пускались через редирект, а лучше страницу прокладку?

  66. Александр Шуйский
    27/10/2016 at 8:24 Постоянная ссылка Цитировать

    Под WP есть плагин WP No External Links. Под что-то другое нужно либо искать решения, либо писать нечто по образу и подобию.

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





Допустимые XHTML-теги:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Подписка на комментарии