Привет. Вполне возможно, что многие из вас уже знают про то, как сделать 301 редирект и как его настроить. Но, как вы знаете, мой блог – это моя шпаргалка. Поэтому, я считаю, что не будет лишним написать этот пост и, когда потребуется, можно будет обращаться за данной информацией как мне, так и вам. Потому что все эти коды невозможно держать в голове, да и не нужно.
Что такое 301 редирект и где он может пригодится
301 редирект – это некое автоматическое перенаправление с одной страницы на другую, причем при этом редиректе передается все: вес страницы, тИЦ, PR, вес входящей ссылочной массы и прочее. То есть происходит склеивание старой страницы с новой. Пользователь, попавший на старую страницу, автоматически “перебросится” на новую.
Где может пригодится 301 редирект:
- Решили вы переехать на новый домен. В таком случае, наиболее безболезненно это можно сделать как раз с помощью данного вида перенаправления.
- Был у вас сайт на каком-нибудь движке (допустим, Joomla). Страницы имели адрес site.ru/?id=1245. На WordPress та же самая страница у вас выглядит так site.ru/rubrika/post.html. И, чтобы не потерять показатели старых страниц, необходимо сделать 301 редирект на новые страницы.
- Ваш сайт доступен по 2-м адресам, например с www и без www. В таком случае тоже нужно прописать 301 редирект.
- Контент на старой странице нужно перенести на новую страницу. Или, например, 3 маленьких статьи нужно объединить в одну большую. В подобных случаях тоже лучше перенести на 1 из 3-х URL, а на оставшихся двух прописать редирект 301.
Как сделать 301 редирект в htaccess
Я предпочитаю делать 301 редирект с помощью файла htaccess. При чем он существует не только на WordPress сайтах, поэтому данный метод перенаправления – универсальный. Файл .htaccess лежит в корне сайта:
Редактируется данный файл с помощью текстового редактора, лучше использовать Notepad++.
Внимание! Касается новичков: если вы не совсем уверены в своих действиях, обязательно, перед тем как делать изменения в файле htaccess, сделайте его резервную копию.
С WWW на без WWW (и наоборот)
Сайт должен быть доступным только по одному варианту: либо с WWW, либо без WWW. Неправильно, если сайт “отдается” по двум вариантам. Нужно оставить только один.
Если сайт молодой, выберите лучше без WWW, если же старенький, то лучше остановиться на том варианте, который проиндексирован. Бывает так, что в Яндексе проиндексировано с WWW, а в Google без WWW, в таком случае выберите тот вариант, который “вылез” в наиболее приоритетной поисковой системе для вас.
Поймите, www.site.ru и site.ru для поисковых систем это 2 разных сайта, поэтому должен быть доступен только 1 вариант! С WordPress обычно с этим проблем нет, там по умолчанию доступен только 1 вариант, а вот на других движках часто можно видеть, что сайт доступен и так, и так.
301 редирект с www на без www:
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.(.*) [NC] RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
301 редирект с сайта без www на с www:
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
С одной страницы на другую с помощью htaccess
При необходимости простановки 301 редиректа с одной страницы на другую, нужно прописать вот этот код в файле htaccess:
Redirect 301 /staraya-stranica.html http://site.ru/novaya-stranica.html
С index.php (index.html) на корень (главную страницу)
На некоторых движках можно встретить, что главная страница сайта также доступна по адресу: site.ru/index.php. Это неправильно. Нужно, чтобы данная страница отдавала 301 редирект на главную страницу, вот как это делается (не забываем переписывать “site” на свой домен).
Если c index.php:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http://site/ [R=301,L]
Если с index.html:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/ RewriteRule ^index\.html$ http://site/ [R=301,L]
С http на https:
Если вам нужно прописать 301 редирект с http на безопасный протокол httpS, используйте вот этот код:
RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
С одной категории (директории/папки) на другую
Бывает необходимость, когда все страницы определенной категории, нужно перенаправить по другому адресу, вот код:
RedirectMatch 301 ^/category-old/(.*) /category-new/$1
С одного домена на другой
Если вы вдруг переехали на новый домен, то нужно в htaccess старого домена прописать это:
RewriteEngine On RewriteCond %{HTTP_HOST} old-domen.ru RewriteRule (.*) http://new-domen.ru/$1 [R=301,L]
Также в robots.txt обязательно укажите в директиве host новый адрес сайта.
301 редирект на WordPress с помощью плагина Simple 301 Redirects
Если сайт клиента на WordPress и он сам хочет в некоторых местах прописать 301 редиректы, я ставлю плагин Simple 301 Redirects. Да и для новичков он хорошо подойдет. Плагин очень прост в использовании и все делается в привычной админке WordPress, поэтому данный способ может показаться кому-то более легким.
- Устанавливаем плагин Simple 301 Redirects.
- Захотим в админке “Параметры” -> “301 Redirects”:
- Там уже, как и в случае с файлом htaccess, нужно прописать старый URL (без домена) и новый с доменом:
- Также можно прописать редирект всех страниц в категории. То есть, допустим, было у нас /7-1-products/ и мы хотим сделать /products/, то просто сначала там же на странице плагина ставим галочку перед “Use Wildcards?”:
- И уже потом можно прописать подобное, используя “звездочку”:
- В итоге, все статьи, которые находились в начальной рубрике будут переадресовываться на новый вид категорий.
Вывод
После того, как пропишете 301 редирект, обязательно проверьте сайт на работоспособность. Одна маленькая ошибка может сделать весь ваш сайт недоступным. Обязательно перед изменениями файла htaccess делайте его резервные копии, ну либо пользуйтесь CTRL+Z, чтобы вернуть файл в исходное положение.
Еще: учтите, что вес по 301 редиректу передается не сразу. Да, в Google склейка происходит быстрее, но в Яндексе это все происходит медленно. Нужно ждать обычно от 1 до 3-х месяцев.
Не забудьте добавить данную страницу в закладки, пригодится. Ну и конечно же спасибо за ретвиты.
Про разницу сайта с WWW и без WWW узнал когда Пётр Александров проводил аудит моего блога ingenerhvostov.ru. Даже при том, что у меня были знания неплохие по SEO, по правильному написанию SEO текста, по оптимизации контента, Пётр нашёл и исправил много недочётов. Помнится одних плагинов у меня было около 40, а это явный перебор. Насмотрелся уроков Евгения Попова и ставил все плагины, которые и не нужны мне были. Спасибо моему бизнес-тренеру Владу Челпаченко, который подсказал в качестве SEO специалиста Петра.
Спасибо, Андрей, за отзыв.
Вес, например, каждой из с 5 страниц при 301 редиректе на одну страницу суммируется или присваивается максимальный одной из 5?
Хороший вопрос, жаль что Петя не ответил на него. Тоже интересно было бы узнать
Спасибо-)
1. файл “.htaccess” может находиться где угодно, но интерпретироваться будет только веб-сервером apache 🙂 Если у вас другой (nginx, lighttpd …), то он вам не поможет. На WordPress файл никак не влияет.
2. Вроде бы, автор перепутал заголовок и код RewriteCond, RewriteRule!
“301 редирект с www на без www:” НЕ соответствует “RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]”
Цитата с сайта http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html: “You can prefix the pattern string with a ‘!’ character (exclamation mark) to negate the result of the condition.”
Т.е. ‘!’ означает – начинающийся НЕ с www.
3. В редиректе с index.php в RewriteCond вместо THE_REQUEST легче использовать REQUEST_URI (хотя бы писать меньше)
Пётр, а тебя не смущает, что у тебя на сайте перед Категорией можно вписать любой префикс, и такой адрес откроется, например:
http:// reclampa.ru/raskrutka-bloga/topics/seo_optimizaciya
http:// reclampa.ru/raskrutka-bloga/blablabla/seo_optimizaciya
Мне это не понравилось у себя, так как в Яндексе категории были ещё с перфиксом “topics”, попробовал сделать с них редирект, вставив в блок такую строку:
RedirectMatch 301 ^/topics/(.*) /$1
Редирект topics получился! Но… но простые страницы перестали открываться, самые банальные, типа “О сайте”, “Об авторе”, где сразу после URL сайта страница.html.
Вернул прежний .htaccess – не помогло! Видимо, добавилось в базу, так как в блоке есть “RewriteEngine On
RewriteBase /”
Как теперь из базы эту строчку вычистить, что я добавил? Ай нид хелп!
Это не смущает, не нужно париться, так как есть Canonical (приложил скриншот).
По поводу htaccess: попробуй глянуть через настройки WP SEO by Yoast.
Спасибо! Разобрался уже с поддержкой хостинга.
Смотрю, интересные фишки появились в комментах у тебя! Какой плагин? )) Правда, сами комменты растянулись от межстрочных переносов, или так и задумано?
Вот тут писал https://reclampa.ru/sozdanie-bloga/razdel-4-plaginy/decomments.html
По поводу растягивания интервалов, решится скоро. 🙂
Как я понял уже решилось, никаких лишних интервалов не вижу
Петь, а rel=canonical и просто canonikal это одно и тоже, или мы о разных вещах говорим?
Здравствуйте
у нас есть 2 сайта двух компаний с похожими страницами – обе внутренние страницы отображаются по одному ключевому слову в поиске – но один сайт на первой странице яндекса а второй сайт на четвертой – а нужно чтобы было наоборот тот сайт что находится на четвертой страницы был на первой – есть ли смысл ставить редирект того что на первой находится на тот что на четвертой – и не зааффилируются ли сайты от этого?
Ага ещё одна статья-шпаргалка от Петра пригодилась…
Главное реализовать ее в своих проектах, а не прочитать и забыть ))
Петь, кинь в меня камнем если я ошибаюсь: но ведь редирект с www на без www и наоборот в вордпрессе делается непосредственно в админке!?
классная шпаргалка по 301-му) отдельное спасибо, за инфу по плагину Simple 301 Redirects
Спасибо за статью Петр, мне, как новичку, больше подошел плагин), все получилось! Так уж получилось, что понадобился 301 редирект, страницы прошли индексацию, а потом обнаружилась ошибка в одной букве в урле, пришлось исправить.
Уже не первый раз читаю твои статьи и нахожу много ответов.
как всегда все понятно описано, спасибо
А вы не перепутали местами?:
301 редирект с www на без www:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.(.*) [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
301 редирект с сайта без www на с www:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Петр, а не подскажите по поводу index.php
у меня основная ссылка переадресует на главное зеркало, а в категориях если дописывать index.php то выдае ошибку что страницы не найдено,
надо ли делать редирект с категорий, какой код использовать?
Необязательно тут заморачиваться, главное, чтобы с главной был редирект
Петр приветствую, делаю сайт на опен карт, у меня модуль по умолчанию, практически на весь товар ставить редирект 302, (где слешь не нужен убирает, где нужен добавляет. подскажите , так и оставить, или что то делать с этим?
Петя приветствую! Подскажи. Пытаюсь сделать редирект с http на https. Вставляю твой код и сайт перестает работать. Что можно еще посмотреть?
Попробовать другими способами сделать редирект, попробовать обратиться к хостингу и т.д.
Петя, подскажи, пожалуйста, как правильно поступить с редиректами.
Многие эксперты говорят, что большое количество редиректов на сайте – нехорошо. Если время от времени страницы переезжают на другие урлы, то надо прописывать редиректы (передать вес и не растерять посетителей). Нужно ли с ними что-то делать после того, как Яндекс и Гугл склеит страницы и закинет в индекс новые урлы? Нужно ли убирать редирект после этого или можно оставить?
И второй вопрос. Если на переехавшую страницу ссылаются с других сайтов и нет возможности поменять адрес на чужом сайте. Стоит ли оставлять такой редирект?
Благодарю!
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteRule ^index.php$ http://*.by/ [R=301,L]
если открываешь страницу с index.php то перенаправляет в корень, а если открываешь index.php?q=параметры то никуда не перенаправляет.
Как реализовать и это перенаправление?
Спасибо, Пётр! Очень интересная и полезная статья. Не думал, что настроить редирект 301 так просто!
Вас тут ничего не смущает?
301 редирект с www на без www:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.(.*) [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
301 редирект с сайта без www на с www:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Здравствуйте, подскажите пожалуйста:
В связи с тем, что регистатор разделигировал домен site1.ru, возникла необходимость сделать редирект на site2.com
Файл .htaccess имеет вид:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Deny from all
Скажите пожалуйста правильно ли прописан редирект в следующем коде:
1)# BEGIN WordPress
2)
3)RewriteEngine On
4)RewriteBase /
5)RewriteCond %{REQUEST_FILENAME} !-f
6)RewriteCond %{REQUEST_FILENAME} !-d
7)RewriteRule . /index.php [L]
8)RewriteCond %{HTTP_HOST} ^site1.ru$ [NC]
9)RewriteRule ^(.*)$ http://site2.com/$1 [R=301,L]
10)
11)
12)# END WordPress
13)
14)
15)Deny from all
16)
или строчки 4,5,6,7 нужно удалить?
Петя, СТОИТ ЛИ ставить 301 редирект в htacces, если у меня выделенный сервер, в настройках которого я уже активировал пункт “Перенаправлять HTTP-запросы в HTTPS” и все запросы автоматически переадресовываются?
Плагина должно быть достаточно. С помощью разных серверов проверьте “Код ответа сервера”, если 301 – то все ок.