301 редирект через файл htaccess: базовые настройки, пояснения
Приветствую друзья. Продолжая серию статей технического характера, я хочу рассказать вам о таком важнейшем параметре для любого сайта как 301 редирект. Давайте дадим объяснение этому термину, и я постараюсь самым подробным образом рассказать вам о нем. Итак, редирект – это специальный метод перенаправления пользователей и роботов поисковых систем на другой URL, отличный от того, который они запросили ранее. Приведу простой пример, ваш читатель попадает на страницу /catalog/page1.html, а его автоматически переадресовывает на страницу /catalog/page2.html, таким образом срабатывает 301 редирект и в конечном результате вы предоставляете пользователю вашего сайта, нужную информацию.
В каких случаях вообще нужно применять редирект и примеры решаемых задач с помощью данного перенаправления:
1) Правильное определение главного зеркала сайта с приставкой www или же без нее. Крайне важный параметр, о котором я рассказывал в своих предыдущих статьях. Дальше в статье я расскажу, как настроить данный параметр.
2) При смене домена сайта, благодаря правильной настройке редиректа, можно сохранить такие показатели как ТИЦ и PR, а также все позиции по ключевым запросам, которые были на старом домене.
3) В случаи изменения адреса конкретной страницы на вашем сайте, можно настроить переадресацию на новый адрес, вместо старого неработающего.
4) Убрать дубли страниц с такими параметрами как feed, replytocom, trackback и т.д.
Как видим из вышеизложенного списка, перечь полезных функций которые можно выполнить с помощью редиректа достаточно большой (я привел лишь основные). Теперь давайте от теории перейдем к практике и научимся правильно составлять файл htaccess который и есть главным звеном в перенаправлении.
Виды редиректов через файл htaccess
Откройте файл htaccess (для сервера Apache), который располагается в корне вашего сайта (если такого файла нет, то создайте его).
В этом файле и будут проводится все дальнейшие настройки для правильной переадресации страниц и доменов сайта.
Для начала, давайте рассмотрим процесс указания главного зеркала сайта с приставкой www и без нее.
Перенаправление домена с www на без-www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
Перенаправление домена без приставки www на www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
Манипуляции со слешем в конце урла
Очень часто возникают ситуации, когда одна и та же страница на сайте, доступна по таким адресам:
http://site.ru/catalog/page
и
http://site.ru/catalog/page/
разница лишь в том, что в первом случае в конце нет слеша (косой линии), а во втором он присутствует. Это одна из самых грубых ошибок, ведь в таком случаи для каждой страницы будет создаваться дубль, и поисковые системы, будут считать эти адреса абсолютно разными, но с одинаковым содержимым.
Чтобы исключить такой вариант, и оставить урлы страниц без слеша в конце, вставьте вот такой код в файл htaccess:
RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} /$ [NC]
RewriteRule ^(.*)(/)$ $1 [L,R=301]
если вы хотите, чтобы слеш присутствовал в конце каждого урла используйте такой код:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
Отдельное перенаправление для дублей главной страницы
Бывают моменты, что главная страница вашего сайта, доступна по нескольким адресам – index.php, home.php, default.php и т.д. (окончание может быть и другое – html, htm и т.д.), что также создает дополнительные дубли, но только для главной страницы.
Для исправления этой ошибки, вставьте в уже известный вам файл, такой код:
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]
301 редирект для переадресации страниц старого домена на новый
Redirect 301 / http://www.newsite.com/
В случаи применения этого правила все страницы старого сайта будут перенаправлены на новый домен.
Для переадресации конкретной страницы старого сайта на страницу нового сайта вставьте в файл .htaccess следующий код:
Redirect 301 /oldsite/page.html http://www.newsite.com/page2.html
Также можно воспользоваться альтернативным вариантом перенаправления всех страниц старого сайта на новый:
RedirectPermanent / http://www.newsite.com/
А вот код для перенаправления со старого каталога в новый:
RedirectPermanent /old-catalog http://www.newsite.com/new-catalog/
Перенаправление старого домена на новый:
RewriteEngine on
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]
Есть случаи, когда необходимо, чтобы страница типа test.htm перенаправлялась на страницу test.html. Это решается вот таким кодом:
RewriteEngine on
RewriteBase /
RewriteRule ^test\.htm$ test.html [R=permanent]
Если необходимо заменить все расширения на сайте, тогда редирект htaccess будет таким:
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)\.htm$ $1.html [R=permanent]
Я привел лишь самые распространенные способы перенаправлений, которых для решения стандартных задач будет вполне достаточно. Если же вам нужно решить другие задачи, связанные с редиректом (помимо тех, что я описал в статье), советую обращаться к профессионалам, ведь привести сайт в нерабочее состояние, неправильными настройками в файле htaccess очень просто.
Хотя в принципе, базовые правила просты в понимании, и можно пробовать настраивать 301 редирект через htaccess под свои цели (если они не слишком сложные).
Поэтому всегда, после внесения изменений в этот файл, проверьте работу сайта – все ли открывается так как вам нужно, ничего не виснет, страницы и разделы сайта работают в нормальном режиме.
Проверку можно осуществить здесь. Интересуемая вас страница должна отдавать 301 ответ сервера.
Вот пример переадресации на моем блоге — к любому адресу размещенной статьи пропишите приставку feed/, после перехода вас попросту перекинет на тот же адрес. Таким образом, я борюсь с дублями страниц на блоге.
Сервисы генерации базовых редиректов:
http://www.webconfs.com/htaccess-redirect-generator.php
http://www.rapidtables.com/web/tools/redirect-generator.htm
Вот и все, о чем я хотел рассказать вам в сегодняшней статье. Если остались вопросы, обязательно задавайте их.
На этом все, всем пока!
и получай самую свежую информацию на свой e-mail!
Свежая информация в сфере SEO:
Очень часто использую этот приём при постепенном переносе постов со старого блога на новый 🙂
Я тоже им активно пользуюсь =)
Со старого домена редирект настроен.
Ну вот. Опять работы прибавилось. Надо заняться пока блог новый. Сразу всё настроить, чтобы ПС изначально не индексировали эти дубли. А про страницы со слэшом и без как-то даже не задумывался.
Крайне важный момент, еще раз повторюсь. Если не сделано у вас, обязательно поправляйте.
Я пользуюсь этим файлом из курса Борисова. Как Вы считаете, нужно ли перепроверять его?
Сравните с командами описанными в этой статье.
Вееещь! Долго же я искал нормально описание, как бороться с дублями.
Александр добрый день, вот как раз это я не использовал в своём htaccess. Вот думаю, что больше подходит использовать со слешом или нет.
Допустим надо ли мне, чтобы мой блог отражался так; _http://site.ru/page/7.
Сейчас с вашим блогом все отлично ( в плане слеша или без него, ничего править не нужно), но если вы хотите чтобы в конце урла отображался слеш, то воспользуйтесь советом приведенным выше.
Проверьте пожалуйста мой новый блог?
Скорее всего благодаря этому посту, нашёл некоторые недочёты у себя в блоге, почему -то в этот момент ударило в голову какое-то озарения, и я начал понимать, что мне надо исправить в коде. Не скажу, что я чайник, но с НТМЛ справиться могу на — 4.
1. Удалил ссылку с поста на админку, так как под Али Ткалехс скрывалось данная ссылка.
2. Удалил ссылку с Рубрик, так как при наведение на неё и при нажатий попадали на саму себя.
Вот так Александр, хотел проверить редерикт 301, а сделал небольшую подчистку блога.
Все правильно вы делаете Али, выявили ошибку, сразу устраняйте.
Александр можете посмотреть у меня на блоге нет редиректа, а если ввести адрес с www перекидывает на без, в принцепе как мне и надо, но он не прописан! или я что-то пропустил?
Скорее всего, в настройках вашего движка стоит домен сайта, без приставки www, поэтому и перекидывает вас на без www.
Но я бы рекомендовал вам, в файле htaccess внести изменения в любом случаи, а также указать главное зеркало сайта, в панелях Вебмастеров Яндекса и Google.
Спасибо, пойду работать…
Здравствуйте Александр.
скажите пожалуйста.
как сделать редирект для партнерской ссылки?
_https://www.youtube.com/watch?v=Thv_E3U9dkY
БОЛЬШОЕ Спасибо Александр!
Спасибо за сервисы для генерации редиректов. Могут пригодиться в будущем, если например захочу изменить названия некоторых рубрик
Ну это да,очень удобно
Сейчас понял пользу сервисов. Спасибо Александру.
Да уж, сервисы это сила.Очень удобно
Раньше недооценивал их удобность.
Зачем сервисы для генерации редиректов? У каждого свои настройки сайта, лучше вручную настроить.
Вручную не всегда удобно, да и не все умеют. Здесь же свой синтаксис как никак
Ну да. Регулярные выражения мало кто знает.
Вот по этому сервис нам в помощь.
Для незнающих людей сервис самое то.
Кому как,иной раз удобнее и сервисом воспользоваться.
Если быстрее сервисом, я за использование сервиса.
Не только быстрее, но и лучше и удобнее
Ещё бы все сервисы правильно результаты выдавали)))
Помогите начинающему блогеру. Заметила, что страница назвалась цифрами, а не словами как обычно и теперь хочу её переименовать. Воспользовалась вашим Redirect 301 /oldsite/page.html _http://www.newsite.com/page2.html
Вопрос: нужно ли менять сам урл страницы на новый или он должен остаться навсегда тем же (_http://pozvonochki.ru/416-2/ в моем случае). Если меняю то ответ сервера 200 Ок, а если оставляю, то как вы пишите сайт для проверки HTTP/1.1 301 Moved Permanently. То есть получается что мы делаем перенаправление а сам урл остается прежним у страницы?
И второй вопрос: из файла .htaccess когда этот новый урл проиндексируется можно убрать запись о редиректе 301, а урл страницы переименовать?
Зависит от ситуации — если на страницу с цифрами не закупались ссылки и она не продвигалась в ПС, а также не имеет хороших позиций в выдаче, то можно просто ее переименовать в админке сайта/блога на страницу с ЧПУ. Со временем старая страница (с цифрами) исчезнет с индекса (так как будет отдавать 404 страницу), а новая будет в выдаче.
Если ситуация обратная — то делаете редирект в файле .htaccess со старой страницы на новую страницу, и оставляете в таком виде (удалять запись из файла .htaccess не нужно), для перетекания веса старой страницы на новую.
Конечно страница новая и не продвинутая, но если не сделать редирект, а просто переименовать, то её контент будет дублем, а значит и продвинуть её потом будет сложнее. Разве не так?
Если я сделала редирект, то нужно ли переименовывать урл?
Если вы переименуете страницу, то старый адрес будет отдавать просто 404 ошибку и его можно будет сразу подать на удаление в панелях Вебмастеров Яндекса и Google.
Так оно и есть.Я прошлом году такую ошибку допустил.Теперь опыт есть через свою же ошибку
Я так и догнал до сути проблемы. Знаний пока маловато.
Вот по этому не торопитесь что то делать, пока не убедитесь что не навредите блогу.
Если ничего не делать, то блогу ничего не будет.
ни че не поняла, простите
так можно или нет менять урл и когда можно (когда новое название проиндексируется?)
Просто смените урл на какой вам нужно и все, больше ничего не делайте.
Добрый день.
Редирект со старых страниц на новые стоит уже 2 года, ни чего в нем не добавлялось и не изменялось. Все новые страницы давно проиндексированы.
Можно ли теперь удалить с сайта сам файл .htaccess? Он наверно теперь уже бесполезен.
Или оставить?
Файл ни в коем случае не удалять!!!
Если раньше на старые url-адреса закупались ссылки для продвижения старых страниц, то ничего в файле .htaccess. Если не закупались ссылки, то можно только сами переадресации убрать из файла.
Такие вопросы возникают из за непонимания работы 301 редиректа. Как поймёшь, многие вопросы отпадут сами собой.
Я имею в виду непонимание принципа работы у новичков. Тема непроста в изучении, но постараться понять им её надо.
Спасибо. Понял.
RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} /$ [NC]
RewriteRule ^(.*)(/)$ $1 [L,R=301]
После добавления этих строк , не впускает в админку joomla 2.5&