301 редирект використовують, коли потрібно передати новій сторінці всю накопичену старою сторінкою вагу в пошукових системах. Наприклад, коли потрібно перенести сайт з одного домену на інший або змінити URL-адресу сторінки в рамках одного домену.

У цій статті розбираємося, як налаштувати редирект 301: в .htaccess, в панелі керування хостингом або в консолі WordPress. Також ви дізнаєтеся, в яких ситуаціях взагалі не варто використовувати 301 редирект і як виправити типові помилки під час його налаштування.

Зміст

  1. У яких ситуаціях використовується 301 редирект
  2. У яких ситуаціях 301 редирект краще не використовувати
  3. Як зробити 301 редирект у .htaccess
  4. Як скласти свою команду для редиректу в .htaccess
  5. Як зробити редирект 301 в панелі керування cPanel
  6. Плагіни для налаштування 301 редиректа у WordPress
  7. Поширені проблеми з 301 редиректом

У яких ситуаціях використовується 301 редирект

  1. Перенесення сайту на новий домен. Наприклад, ви знайшли домен, який більше підходить сайту, і хочете, щоб при переході на будь-яку сторінку зі старим доменом в URL відкривалася така ж сторінка, але з новим доменом.
  2. Перенесення розділу сайту з піддомену в підпапку. Наприклад, у вашого блогу була адреса blog.vashdomen.com, але ви вирішили перенести його на адресу vashdomen.com/blog/.
  3. Зміна URL-адреси сторінки. Наприклад, попередня URL-адреса сторінки занадто довга і ви хочете зробити її більш читабельною.
  4. Усунення дублікатів сторінок. Для пошукачів URL-адреси з WWW і без WWW / з HTTP на HTTPS / з косою межею в кінці і без неї — це різні адреси. Правильно буде обрати один варіант і зробити на нього 301 редирект з усіх інших.
  5. Купівля додаткового домену. Припустимо, ви купили такий домен, як і в основного сайту, але в іншій зоні. Залити на нього копію сайту буде неправильно, це створить дублікат сайту у пошуковій видачі. Правильно буде обрати головний домен, а з решти налаштувати на нього 301 редирект.
  6. Видалення раніше існуючої сторінки. Коли ви видаляєте сторінку на сайті, на неї ще якийсь час продовжує йти трафік. Щоб не втрачати його, варто зробити 301 редирект на сторінку зі сходим контентом.

У яких ситуаціях 301 редирект краще не використовувати

  1. Проведення A/B тесту. Наприклад, ви зробили кілька варіантів однієї зі сторінок та плануєте перенаправляти різні групи користувачів на різні версії. Щоб не втратити позиції основної сторінки, варто використовувати для таких цілей редирект 302.
  2. Продукту тимчасово немає в наявності. Якщо в такій ситуації ви вирішуєте перенаправляти відвідувачів на сторінку зі схожим товаром або сторінку, де розказуєте, коли товар знову з’явиться, правильно буде це зробити за допомогою редиректу 302.
  3. Редизайн сторінки. Припустимо у вас є сторінка зі стабільним трафіком, але її вміст застарів і ви вирішили її переробити. Щоб не залишати неактуальну інформацію у публічному доступі, ви вирішуєте тимчасово переспрямовувати відвідувачів на сторінку-заглушку. Робити це за допомогою 301 редиректа неправильно, краще використовувати редирект 302.

Як налаштувати 301 редирект в .htaccess

У цьому розділі перелічимо основні ситуації, в яких зазвичай виникає необхідність налаштувати 301 редирект, а також дамо приклади правил для .htaccess. Вам залишиться лише скопіювати їх та підставити свій домен замість прикладу.

Якщо у вас є домен з кириличними символами, його потрібно спочатку перетворити на Punycode. Правила із символами не з латинського алфавіту в .htaccess не працюватимуть.

301 редирект з однієї сторінки на іншу

Такий редирект зазвичай налаштовують, коли хочуть змінити URL-адресу сторінки або стару сторінку видаляють, але щоб не втрачати трафік, ведуть на схожу.

Redirect 301 /стара-сторінка /нова-сторінка

301 редирект з одного домену на інший

Такий редирект зазвичай налаштовують, коли переносять сайт на новий домен або хочуть, щоб на той самий сайт можна було зайти з декількох доменів. Для цього в .htaccess потрібно додати таке правило:

RewriteCond %{HTTP_HOST} ^domen-1\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domen-1\.com$
RewriteRule ^(.*)$ https://domen-2.com/$1 [R=301,L]

Якщо переносите сайт на новий домен, просто налаштувати 301 редирект недостатньо. Повний список необхідних дій ви знайдете у нас у блогу: Як змінити домен і не втратити позиції.

301 редирект з піддомену на підпапку

Наприклад, у вашого блогу була адреса blog.domen.com, але ви вирішили змінити цю адресу на domen.com/blog. Тоді правило для редиректу буде таким:

RewriteCond %{HTTP_HOST} ^blog\.domen\.com$ [NC]
RewriteRule ^(.*)$ https://domen.com/blog/ [R=301,L]

301 редирект з HTTP на HTTPs

Коли ви тільки встановили SSL-сертифікат, на сайт можна потрапити і по HTTP і по HTTPs. Щоб захищена версія сайту відкривалася, навіть якщо людина спеціально додасть http:// у браузері, потрібно налаштувати 301 редирект з HTTP на HTTPs. Для цього додайте в .htaccess таке правило:

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://domen.com/$1 [R=301,L]

301 редирект з WWW без WWW

Як ми вже говорили, для пошукових систем одна й та сама сторінка з WWW і без WWW — це різні сторінки. Щоб не плодити дублікати і не знижувати унікальність контенту, варто вибрати один варіант написання посилань і налаштувати на нього 301 редирект з усіх інших варіантів.

Якщо сайт новий, основним може бути будь-який варіант написання, різниці немає. Якщо сайт вже набрав позиції, краще jбрати той варіант, який має більше сторінок у результатах пошуку.

Це можна перевірити двома способами:

  • загуглити по черзі обидві версії домену з оператором “site” (site:domen.com та site:www.domen.com) та порахувати, у якого варіанта більше результатів у видачі;
  • додати обидві версії сайту в Google Search Console та перевірити кількість сторінок в індексі там. Цей варіант буде точнішим.

Щоб налаштувати 301 редирект з WWW без WWW, додайте в .htaccess такий код:

RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^(.*)$ https://domen.com/$1 [R=301,L]

Якщо вам навпаки потрібно налаштувати редирект 301 без WWW на WWW, використовуйте таке правило:

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.domen.com/$1 [R=301,L]

301 редирект з без слешу на слеш

Так само як у прикладі з WWW і без WWW, на ту саму сторінку зазвичай можна зайти за посиланням з косою лінією в кінці і без неї. Для пошукових систем такі сторінки також будуть дублікатами.

Щоб випадково не нарватися на санкції від пошукових систем, правильно привести все до одного варіанту. Ось правило, яке додасть редирект 301 для посилань без слєшу на посилання з слешем:

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

Якщо хочете, щоб усі посилання навпаки були без слешу, додайте в .htaccess таке правило:

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

301 редирект на URL без розширення

Припустимо, у вас є сторінка https://domen.com/about.html, і ви хотіли б, щоб в адресному рядку відображалося тільки https://domen.com/about. У такому разі додайте таке правило:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

Якщо потрібний редирект не для .html, а для іншого розширення, напишіть у потрібних місцях у правилі саме його.

301 редирект з верхнього регістру на нижній

Як і в попередніх прикладах, для пошукових роботів посилання з різним регістром — https://domen.com/home та https://domen.com/Home — це дві різні сторінки.

Зазвичай ніхто спеціально не створює такі дублікати, але деякі двигуни роблять це автоматично. В цьому випадку краще вибрати якийсь головний варіант і налаштувати на нього 301 редирект з усіх інших.

Найкраще робити такий за допомогою .htaccess та PHP. Можна, звичайно, тільки за допомогою .htaccess, але доведеться прописувати команди для перевірки кожної літери. Це буде створювати додаткове навантаження на Apache. Швидше за все, незначну, але все одно. Тому краще робити у два етапи. Для цього додайте в .htaccess такий код:

RewriteCond %{REQUEST_URI} [A-Z][OR]
RewriteCond %{QUERY_STRING} [A-Z]
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (.*) rewrite-strtolower.php?rewrite-strtolower-url=$1 [QSA,L]

Потім створіть у цій же папці файл rewrite-strtolower.php і додайте рядки:

<?php
if(isset($_GET['rewrite-strtolower-url'])) {
$url = $_GET['rewrite-strtolower-url'];
unset($_GET['rewrite-strtolower-url']);
$params = http_build_query($_GET);
if(strlen($params)) {
$params = '?' . $params;
}
// Якщо на кінцевому ресурсі немає SSL-сертифіката, замініть нижче https:// на http://
header('Location: https://' . $_SERVER['HTTP_HOST'] . '/' . strtolower($url) . $params, true, 301);
exit;
}
header("HTTP/1.0 404 Not Found");
die('Unable to convert the URL to lowercase. You must supply a URL to work upon.');

301 редирект для нового формату перманентних посилань у WordPress

Якщо у вас сайт на WordPress і ви змінили формат посилань на пости або товари, посилання старого формату перестануть працювати. Якщо до зміни формату люди ділилися посиланнями на ваш сайт у соцмережах, після зміни формату при переході по них виникатиме помилка 404.

Для таких ситуацій теж є рішення: згенеруйте правило для .htaccess у спеціальному сервісі Yoast. Тоді старі посилання продовжать відкриватись.

Як зробити свою команду для 301 редагування в .htaccess

Цей розділ для тих, хто хоче спробувати зрозуміти вміст правил для .htaccess або перевірити їх на помилки, коли редирект не працює. Ось так виглядає синтаксис правила:

RewriteEngine On
RewriteBase /
RewriteCond %{Змінна} Умова Прапор
RewriteRule Шаблон Значення Прапор

RewriteEngine — команда, яка вмикає компонент веб-сервера Apache, який відповідає за редиректи. Її достатньо вказати один раз перед усіма командами.

RewriteBase — команда, яка вказує шлях від кореневої папки сайту до файлу .htaccess. У цьому прикладі крива риска означає, що файл лежить у кореневій папці сайту. Її також достатньо вказати один раз.

RewriteCond — команда, яка визначає умови, за яких відбувається редирект. Наприклад, ви хочете перенаправити всі URL у верхньому регістрі на URL у нижньому регістрі. Тоді умова буде такою: «У запиті є URL з літерами у верхньому регістрі». Якщо так, відбувається редирект. Якщо ні, веб-сервер пропускає це правило. Причому в одному правилі може бути необмежена кількість таких умов.

RewriteRule — дія, яку веб-сервер повинен виконати за умови задоволення умов у рядках RewriteCond.

Змінні

Допомагають веб-серверу визначити, що конкретно потрібно перевірити в рядку з умовою виконання редиректа. Наприклад, чи ввели адресу сайту з HTTP або HTTPs. Або чи збігається адреса сайту з тою, яка вказана в умовах. Або чи треба щось зробити з тією частиною URL, яка йде після домену.

Змінні пишуть у фігурних дужках і ставлять перед ними знак відсотка. Ось найпопулярніші з них:

%{HTTP_HOST} — перевіряє адресу, яку людина ввела у браузері. Наприклад, якщо у правилі стоїть ця змінна, а після неї ^domen.com$, це буде означати «виконати редирект, якщо людина запровадила у браузері domen.com». А якщо людина запровадить www.domen.com , редирект не спрацює.

%{HTTPS} — перевірити, чи надіслано запит на протокол HTTPs. Наприклад, якщо у правилі стоїть ця змінна з умовою !=on, оброблятися будуть тільки запити з адресою, яку ввели з HTTP.

%{REQUEST_FILENAME} — шлях до файлу або скрипту із запиту. Наприклад, якщо у правилі стоїть ця змінна та умова !-f, це означає, що треба пропустити запит, якщо за адресою, яку ввів користувач, розміщується файл.

%{THE_REQUEST} — повний текст HTTP запиту, який браузер відправив серверу. Наприклад, якщо у правилі є ця змінна та значення ^[a-z]{3,9}\ /.*\.html\, це буде означати, що правило повинно спрацювати для запитів, які починаються з будь-яких літер у кількості від 3 до 9 та закінчуються на .html.

%{REQUEST_URI} — все, що йде у запиті після доменного імені. Наприклад, у запиті https://domen.com/account/dashboard змінна символізує текст /account/dashboard. Якщо в правилі йде ця змінна, а за нею [A-Z], значить правило повинно спрацювати, тільки якщо після домену в адресі є великі літери.

%{QUERY_STRING} — параметри, які йдуть в URL після знаку ?. Наприклад, ви обираєте у магазині взуття бренд Adidas і бачите приблизно таке в URL https://obuv.com/results/?krossovki=adidas. GET-параметри у цьому випадку це як раз частина ?krossovki=adidas.

Умови

Тут зазвичай використовують адресу сайту разом із спеціальними символами, а іноді лише символи, щоб вказати веб-серверу, у якому разі перенаправити відвідувача на іншу сторінку.

Наприклад, ви хочете налаштувати редирект домену з WWW без WWW. Тоді в умові треба писати ^www.domen.com$, що означає — запит повинен повністю співпадати з текстом www.domen.com.

Також зі змінною як умову часто використовують уточнюючі атрибути. Ось два найпопулярніші з них:

-f — перевіряє, чи веде запит користувача до реального файлу на сервері.

Наприклад, ви хочете зробити так, щоб наприкінці URL завжди додавався слеш. У цьому випадку потрібно виключити сценарії, коли в запиті людини буде шлях до конкретного файлу, наприклад, domen.com/index.php. Інакше до index.php теж додасться слеш і тоді сторінка не відкриється, тому що це вже не буде посиланням на файл.

Щоб уникнути таких ситуацій, до змінної %{REQUEST_FILENAME} додають умову !-f . Тоді сервер пропускатиме запити, які ведуть до реальних файлів.

-d — перевіряє, чи веде запит користувача до папки на сервері.

Тут та ж логіка, що й у випадку з попереднім атрибутом, але замість файлу сервер шукатиме папку. Наприклад, ви хочете зробити так, щоб в кінці URL не було слеша. У цьому випадку вам доведеться виключити сценарії, коли в запиті людини — шлях до папки. Інакше слеш зникне і сторінка не відкриється, тому що буде вже не папкою, а файлом без розширення.

Символи

^ — Початок рядка.

$ — кінець рядка.

# — коментар.

! — Символ заперечення.

[0-9] — будь-яка цифра від 0 до 9.

[A-Z] — будь-яка літера від A до Z у верхньому регістрі.

[a-z] — будь-яка літера від A до Z у нижньому регістрі.

[aZ] — будь-яка літера від A до Z у будь-якому регістрі.

[A-Z]{3,6} — будь-який рядок, який закінчується на послідовність від 3 до 6 літер у верхньому регістрі та діапазоні від A до Z.

[0-9]{3,6} — будь-який рядок, який закінчується на послідовність від 3 до 6 цифр у діапазоні від 0 до 9.

. — будь-який символ, крім символу кінця рядка.

? — повторення попереднього символу 0 або 1 раз.

+ — Повторення попереднього символу від 1 до 65536 разів.

* — Повторення попереднього символу від 0 до 65536 разів. Наприклад, виразу dome*n будуть відповідати значення domen , domeen , domeeeeeeeeen .

\ — Екрануючий слеш. Наступний символ після нього вважатиметься звичайним, а не спецсимволом. Іноді без такого слеша правило не працюватиме. Наприклад, коли в тексті є точка, тому що сама по собі точка означає будь-який символ.

^(.*)$ — поєднання спецсимволів, яке обирає URL із умови RewriteCond, щоб застосувати до нього дію з RewriteRule.

Прапори

Це додаткові опції. Їх завжди вказуть у квадратних дужках. Якщо прапорів в одному рядку кілька, їх вказують через кому, наприклад, [L, R=301]. Ось невеликий список найпопулярніших прапорів:

[R=301] — редирект разом із кодом. Якщо спеціально не прописати число, залишити лише літеру R, спрацює 302 редирект. Так що для постійного редиректу прописуйте код 301 вручну.

[L] — зупиняє процес перетворення, і поточне посилання вважається остаточним. Зазвичай цей прапор використовують наприкінці кожної команди.

[NC] — вимикає перевірку регістру символів під час спрацьовування правила.

[OR] — вказує на альтернативну умову. Якщо у правилі два рядки RewriteCond, вони сумуються. Тобто редирект відбудеться лише за умови умови в обох рядках. Якщо рядки з умовами є взаємовиключними, використовуйте цей прапор. Тоді правило спрацює при виконанні хоча б однієї з умов.

Як налаштувати 301 редирект в панелі керування cPanel

Цю панель керування пропонуємо у себе на хостингу ми та деякі інші провайдери. У ній є вбудований функціонал для налаштування 301 редиректа. Якщо у вас на хостингу така панель і редагувати .htaccess вам здається складним, спробуйте цей варіант.

Додаток для налаштування 301 редиректа називається «Переспрямування» і знаходиться на головній сторінці панелі в розділі «Домени».

Як налаштувати 301 редирект — Розділ «Переспрямування» в cPanel

На наступній сторінці вам знадобиться обрати тип перенаправлення (301 або 302) та домен, для якого потрібно налаштувати редирект, вписати кінцеву URL-адресу та обрати умову: переспрямовувати тільки адреси з WWW, тільки без WWW або ті та інші.

Налаштування 301 редиректу в cPanel
З таким заповненням полів працюватиме редирект з однієї сторінки на іншу

Трохи нижче на цій сторінці буде список всіх налаштованих редиректів у вашому хостинговому акаунті. Там ви зможете видалити редирект, якщо він раптом стане не потрібен.

Як зробити 301 редирект — Список редиректів у додатку «Переспрямування»

Плагіни для налаштування 301 редиректа WordPress

Якщо у вас сайт WordPress, налаштовувати редиректи можна прямо в панелі керування сайтом — для цього достатньо встановити спеціальний плагін. Їх існує багато, але ці два здалися нам найзручнішими.

Redirection — найпопулярніший плагін для налаштування редиректів та єдиний плагін, у якого інтерфейс не англомовний (є ще російська мова). Окрім основного функціоналу плагін також відстежує 404 помилки на сайті та показує, скільки разів люди переходили за адресами, для яких налаштовано редирект.

Htaccess File Editor — плагін, який дає можливість редагувати файл .htaccess прямо у консолі WordPress. Це зручніше, ніж щоразу заходити до панелі керування хостингом, відкривати диспетчер файлів та шукати файл у кореневій папці.

Поширені проблеми з 301 редиректами

Якщо налаштувати редирект 301 неправильно, кінцева сторінка може не відкриватися або редирект не буде очікуваного ефекту — вага не буде передаватися. Ось помилки, що частіше за усе зустрічаються, і на які варто звернути увагу.

Ланцюжки редиректів

Це коли при переході за посиланням відбувається більше одного редиректа, перш ніж відкриється кінцева сторінка. Пошукові роботи цього не люблять. Плюс кожен новий редирект це додаткове навантаження на веб-сервер, через що сторінка завантажується повільніше. Краще налаштовувати редирект безпосередньо на кінцеву адресу.

Проаналізуйте свій сайт за допомогою сервісу httpstatus або програми Screaming Frog, щоб перевірити, чи є на ньому ланцюжки редиректів.

Циклічні редиректи

Це коли в ході редиректу одна з URL-адрес веде назад на попередню адресу в ланцюжку редиректів. Іноді таке трапляється, якщо в DNS-записах домену створено запис, який переправляє домен з без WWW на WWW, але адміністратор сайту налаштовує в .htaccess редирект з WWW на без WWW.

У результаті сторінка довго завантажуватиметься і в браузері вискочить помилка з текстом ERR_TOO_MANY_REDIRECTS. Перевірити свій сайт на подібні помилки можна за допомогою програми Screaming Frog.

Биті редиректи

Це коли кінцева сторінка не відкривається та повертає HTTP-код 4хх або 5хх. Наприклад, 403 Forbidden або 500 Internal Server Error. Про інші подібні помилки читайте у статті: Коди помилок HTTP.

У подібній ситуації ні відвідувачі, ні пошукові роботи не можуть потрапити на кінцеву URL-адресу. Якщо не виправити цю помилку на кінцевій сторінці, вона ризикує випасти з результатів пошуку.

Перевірити сайт на подібні помилки також можна за допомогою програми Screaming Frog. Також повідомлення про помилки відображаються в Google Search Console, якщо ви додавали туди свій домен.

Редирект 301 замість атрибуту rel=”canonical”

Іноді на сайтах зустрічаються сторінки з дуже схожим вмістом або взагалі одна й та сама сторінка, яка доступна за кількома URL-адресами. Таке буває в інтернет-магазинах: двигун сайту додає в URL додаткові символи, коли відвідувач змінює на ній фільтри або вмикає сортування. В результаті крім основного URL сторінки є ще кілька версій з різними додатковими параметрами.

Інший приклад — товар знаходиться одразу в декількох категоріях і URL-адреса змінюється в залежності від того, з якої категорії людина переходить на нього. Наприклад, є товар — кросівки для бігу Adidas Runfalcon. Їх можна знайти в категорії «Кросівки», а також підкатегоріях «Кросівки Adidas» та «Кросівки для бігу».

Деякі CMS у такій ситуації генерують три сторінки з різними адресами:

  • під час переходу з категорії «Кросівки» — https://vashdomen.com/krossovki/adidas-runfalcon
  • під час переходу з підкатегорії «Кросівки Adidas» — https://vashdomen.com/krossovki/adidas/adidas-runfalcon
  • під час переходу з підкатегорії «Кросівки для бігу» — https://vashdomen.com/krossovki/running/adidas-runfalcon

Начебто й дублікати, але ж не прибирати через це товар з інших категорій. Редирект для кожного дубліката теж краще не налаштовувати. Якщо товарів у каталозі багато, це сотні додаткових рядків у .htaccess та додаткове навантаження на веб-сервер.

Правильним рішенням буде обрати головну сторінку та додати атрибут rel=”canonical”. Це роблять код сторінки між тегами <HEAD></HEAD>.

Атрибут rel=”canonical” каже пошукачам: сторінка має дублікати, але саме цю треба вважати головною. У результаті саме вона відображатиметься в результатах пошуку, на неї перейде вага та інші характеристики дублікатів, які впливають на позицію у видачі.

Рекомендації Google щодо використання атрибута rel=”canonical”

Що далі

Тепер ви знаєте, як зробити 301 редирект на своєму сайті. Розкажіть у коментарях, чи знайшли ви відповіді на свої запитання у статті. Можливо якісь команди для .htaccess не спрацювали або ви не знайшли потрібну команду. Постараємось розібратися разом.