Рубрики

Урок 373 Как сделать 301 редирект в htaccess, как настроить

Петр Александров
Автор статьи Пётр Александров
32
Время прочтения: 5 мин.

Привет. Вполне возможно, что многие из вас уже знают про то, как сделать 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, поэтому данный способ может показаться кому-то более легким.

  1. Устанавливаем плагин Simple 301 Redirects.
  2. Захотим в админке “Параметры” -> “301 Redirects”:
  3. Там уже, как и в случае с файлом htaccess, нужно прописать старый URL (без домена) и новый с доменом:
  4. Также можно прописать редирект всех страниц в категории. То есть, допустим, было у нас /7-1-products/ и мы хотим сделать /products/, то просто сначала там же на странице плагина ставим галочку перед “Use Wildcards?”:
  5. И уже потом можно прописать подобное, используя “звездочку”:
  6. В итоге, все статьи, которые находились в начальной рубрике будут переадресовываться на новый вид категорий.

Вывод

После того, как пропишете 301 редирект, обязательно проверьте сайт на работоспособность. Одна маленькая ошибка может сделать весь ваш сайт недоступным. Обязательно перед изменениями файла htaccess делайте его резервные копии, ну либо пользуйтесь CTRL+Z, чтобы вернуть файл в исходное положение.

Еще: учтите, что вес по 301 редиректу передается не сразу. Да, в Google склейка происходит быстрее, но в Яндексе это все происходит медленно. Нужно ждать обычно от 1 до 3-х месяцев.

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

Подпишитесь на бесплатные уроки по e‑mail и получите книгу в подарок
Нажав на кнопку «Подписаться» вы принимаете соглашение на обработку персональных данных.
Книга по SEO
Добавить комментарий
Ваш адрес email не будет опубликован. Обязательные поля помечены
Нажав на кнопку «Отправить комментарий» вы принимаете соглашение на обработку персональных данных.

32 комментария на «Урок 373 Как сделать 301 редирект в htaccess, как настроить»
  1. Андрей Хвостов
    http://ingenerhvostov.ru

    Про разницу сайта с WWW и без WWW узнал когда Пётр Александров проводил аудит моего блога ingenerhvostov.ru. Даже при том, что у меня были знания неплохие по SEO, по правильному написанию SEO текста, по оптимизации контента, Пётр нашёл и исправил много недочётов. Помнится одних плагинов у меня было около 40, а это явный перебор. Насмотрелся уроков Евгения Попова и ставил все плагины, которые и не нужны мне были. Спасибо моему бизнес-тренеру Владу Челпаченко, который подсказал в качестве SEO специалиста Петра.

    • Пётр Александров Автор статьи
      https://reclampa.ru

      Спасибо, Андрей, за отзыв.

  2. Денис Mаркевич

    Вес, например, каждой из с 5 страниц при 301 редиректе на одну страницу суммируется или присваивается максимальный одной из 5?

    • Виталий Охрименко
      https://fitkiss.club

      Хороший вопрос, жаль что Петя не ответил на него. Тоже интересно было бы узнать

  3. seoonly.ru
    https://seoonly.ru/

    Спасибо-)

  4. Alex

    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. Андрей
    https://Pozitivu-DA.ru

    Пётр, а тебя не смущает, что у тебя на сайте перед Категорией можно вписать любой префикс, и такой адрес откроется, например:
    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 /”
    Как теперь из базы эту строчку вычистить, что я добавил? Ай нид хелп!

    • Пётр Александров Автор статьи
      https://reclampa.ru

      Это не смущает, не нужно париться, так как есть Canonical (приложил скриншот).

      По поводу htaccess: попробуй глянуть через настройки WP SEO by Yoast.

      • Андрей
        https://Pozitivu-DA.ru

        Спасибо! Разобрался уже с поддержкой хостинга.
        Смотрю, интересные фишки появились в комментах у тебя! Какой плагин? )) Правда, сами комменты растянулись от межстрочных переносов, или так и задумано?

        • Пётр Александров Автор статьи
          https://reclampa.ru

          Вот тут писал https://reclampa.ru/sozdanie-bloga/razdel-4-plaginy/decomments.html

          По поводу растягивания интервалов, решится скоро. 🙂

          • Виталий Охрименко
            https://fitkiss.club

            Как я понял уже решилось, никаких лишних интервалов не вижу

      • Виталий Охрименко
        https://fitkiss.club

        Петь, а rel=canonical и просто canonikal это одно и тоже, или мы о разных вещах говорим?

  6. Виталий

    Здравствуйте

    у нас есть 2 сайта двух компаний с похожими страницами – обе внутренние страницы отображаются по одному ключевому слову в поиске – но один сайт на первой странице яндекса а второй сайт на четвертой – а нужно чтобы было наоборот тот сайт что находится на четвертой страницы был на первой – есть ли смысл ставить редирект того что на первой находится на тот что на четвертой – и не зааффилируются ли сайты от этого?

  7. Владимир Сальников
    http://vladimir83salnikov.com

    Ага ещё одна статья-шпаргалка от Петра пригодилась…

    • IvYur

      Главное реализовать ее в своих проектах, а не прочитать и забыть ))

  8. Виталий Охрименко
    https://fitkiss.club

    Петь, кинь в меня камнем если я ошибаюсь: но ведь редирект с www на без www и наоборот в вордпрессе делается непосредственно в админке!?

  9. Андрей Белый
    https://www.kosmetologicheskoe-oborydovanie.ru

    классная шпаргалка по 301-му) отдельное спасибо, за инфу по плагину Simple 301 Redirects

  10. Ольга

    Спасибо за статью Петр, мне, как новичку, больше подошел плагин), все получилось! Так уж получилось, что понадобился 301 редирект, страницы прошли индексацию, а потом обнаружилась ошибка в одной букве в урле, пришлось исправить.
    Уже не первый раз читаю твои статьи и нахожу много ответов.

  11. Андрей
    http://flino.ru

    как всегда все понятно описано, спасибо

  12. Roman

    А вы не перепутали местами?:

    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]

  13. Михаил
    http://turbodeti.ru

    Петр, а не подскажите по поводу index.php
    у меня основная ссылка переадресует на главное зеркало, а в категориях если дописывать index.php то выдае ошибку что страницы не найдено,
    надо ли делать редирект с категорий, какой код использовать?

    • Пётр Александров Автор статьи
      https://reclampa.ru

      Необязательно тут заморачиваться, главное, чтобы с главной был редирект

  14. Михаил
    http://turbodeti.ru

    Петр приветствую, делаю сайт на опен карт, у меня модуль по умолчанию, практически на весь товар ставить редирект 302, (где слешь не нужен убирает, где нужен добавляет. подскажите , так и оставить, или что то делать с этим?

  15. Алексей
    https://skoromamoy.ru/

    Петя приветствую! Подскажи. Пытаюсь сделать редирект с http на https. Вставляю твой код и сайт перестает работать. Что можно еще посмотреть?

    • Пётр Александров Автор статьи
      https://reclampa.ru

      Попробовать другими способами сделать редирект, попробовать обратиться к хостингу и т.д.

  16. Андрей Благодар

    Петя, подскажи, пожалуйста, как правильно поступить с редиректами.

    Многие эксперты говорят, что большое количество редиректов на сайте – нехорошо. Если время от времени страницы переезжают на другие урлы, то надо прописывать редиректы (передать вес и не растерять посетителей). Нужно ли с ними что-то делать после того, как Яндекс и Гугл склеит страницы и закинет в индекс новые урлы? Нужно ли убирать редирект после этого или можно оставить?

    И второй вопрос. Если на переехавшую страницу ссылаются с других сайтов и нет возможности поменять адрес на чужом сайте. Стоит ли оставлять такой редирект?

    Благодарю!

  17. SFP.BY
    https://sfp.by

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
    RewriteRule ^index.php$ http://*.by/ [R=301,L]
    если открываешь страницу с index.php то перенаправляет в корень, а если открываешь index.php?q=параметры то никуда не перенаправляет.
    Как реализовать и это перенаправление?

  18. Иван
    https://biz-iskun.ru

    Спасибо, Пётр! Очень интересная и полезная статья. Не думал, что настроить редирект 301 так просто!

  19. Анатолий

    Вас тут ничего не смущает?

    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]

  20. Артём

    Здравствуйте, подскажите пожалуйста:
    В связи с тем, что регистатор разделигировал домен 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 нужно удалить?

  21. Павел

    Петя, СТОИТ ЛИ ставить 301 редирект в htacces, если у меня выделенный сервер, в настройках которого я уже активировал пункт “Перенаправлять HTTP-запросы в HTTPS” и все запросы автоматически переадресовываются?

    • Пётр Александров Автор статьи
      https://reclampa.ru

      Плагина должно быть достаточно. С помощью разных серверов проверьте “Код ответа сервера”, если 301 – то все ок.

Добавьте свой комментарий
Добавить комментарий