Привет. Вполне возможно, что многие из вас уже знают про то, как сделать 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-х месяцев.
Не забудьте добавить данную страницу в закладки, пригодится. Ну и конечно же спасибо за ретвиты.
Пётр, а тебя не смущает, что у тебя на сайте перед Категорией можно вписать любой префикс, и такой адрес откроется, например:
http:// wpnew.ru/raskrutka-bloga/topics/seo_optimizaciya
http:// wpnew.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://wpnew.ru/sozdanie-bloga/razdel-4-plaginy/decomments.html
По поводу растягивания интервалов, решится скоро. 🙂
Как я понял уже решилось, никаких лишних интервалов не вижу
Петь, а rel=canonical и просто canonikal это одно и тоже, или мы о разных вещах говорим?
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 (хотя бы писать меньше)
Спасибо-)
Вес, например, каждой из с 5 страниц при 301 редиректе на одну страницу суммируется или присваивается максимальный одной из 5?
Хороший вопрос, жаль что Петя не ответил на него. Тоже интересно было бы узнать
Про разницу сайта с WWW и без WWW узнал когда Пётр Александров проводил аудит моего блога ingenerhvostov.ru. Даже при том, что у меня были знания неплохие по SEO, по правильному написанию SEO текста, по оптимизации контента, Пётр нашёл и исправил много недочётов. Помнится одних плагинов у меня было около 40, а это явный перебор. Насмотрелся уроков Евгения Попова и ставил все плагины, которые и не нужны мне были. Спасибо моему бизнес-тренеру Владу Челпаченко, который подсказал в качестве SEO специалиста Петра.
Спасибо, Андрей, за отзыв.