Що таке 301 редирект і як його налаштувати – види
При роботі з веб-ресурсами виникають ситуації, коли відбувається видалення, перенесення або зміна URL-адреси окремих сторінок або сайту. При цьому потрібно зберегти індексацію в пошукових системах і перенаправити трафік користувача на нову адресу. Для вирішення цього завдання використовується функція під назвою 301 Redirect. Це один із інструментів SEO, який дозволяє не тільки уникнути помилок при відкритті окремих сторінок, але й домогтися коректної роботи ресурсу. Правильні налаштування редиректу дають додаткову можливість отримати синергетичний ефект у пошуковій оптимізації та збільшити кількість органічного трафіку на релевантні сторінки. Розглянемо докладніше, як відбувається налаштування редиректу 301.
Що таке переадресація 301
Permanent Redirect 301 застосовується для організації постійної переадресації з неактуальної доменного адреси або url окремої сторінки на робочу версію. Редирект може знадобитися у зв’язку з глобальним перенесенням сайту на інший домен, технічними змінами в написанні адреси, видаленням сторінок, необхідністю внутрішньої та зовнішньої перелінкування. Один із варіантів використання перманентної переадресації – редирект із кількох доменних імен, створених у різних зонах, на одну актуальну адресу. Грамотне використання редиректу дозволяє переміщати контент без втрат у пошуковій індексації, зберегти і навіть збільшити колишню вагу та позицію у видачі.
Налаштувати код стану HTTP 301 можна різними способами:
- за допомогою HTML та PHP;
- через панель керування або плагіни відповідної CMS;
- за допомогою спеціальних скриптів (програм);
- на рівні хостинг-провайдера;
- внесенням відповідних записів до файлів .htaccess для сервера Apache або web.config для IIS.
Останній спосіб є найбільш простим та надійним. Про нього трохи пізніше поговоримо докладніше.
Альтернативні методи переадресації
- Редирект 302. Застосовується у разі тимчасової переадресації з одного URL на інший. При його використанні пошукова система індексує всі доступні версії сайту чи сторінки. Поєднання посилальної ваги та внутрішніх метрик на пріоритетному ресурсі не відбувається.
- 307 Temporary Redirect рекомендується застосовувати у виняткових випадках. Наприклад, при технічному обслуговуванні сайту, коли він недоступний деякий час.
- Оновлення Meta Refresh виконують переадресацію не лише на рівні сервера, а безпосередньо на сайті. Користувач стикається з тимчасовою затримкою (зазвичай близько п’яти секунд), після чого переходити на потрібну сторінку повинен примусово запустити певну команду. Цей метод часто призводить до падіння відвідувацького інтересу та просідання пошукових індексів.
- Редирект rel = “canonical” . Дозволяє зберегти доступ відвідувачам ресурсу до контенту сторінок, що дублюються. При цьому для пошукових систем наявність команди canonical на одній зі сторінок говорить про те, що тільки вона підлягає індексації в пошуку.
Найчастіше постійна переадресація є правильним рішенням, ніж тимчасова. Насправді це пояснюється просто. Припустимо, сайт змінив доменну зону, а потім ще й обзавівся захищеним протоколом https. При налаштуванні тимчасової переадресації в індексі Яндекса та Google за одним і тим самим запитам з’явилися три версії сайту з пропорційним просіданням позицій у видачі. Після налаштування редиректу 301 на пріоритетний url відбулося склеювання дублів, робот повернув сайт у топ видачі.
Не рекомендується використовувати постійний редирект при тимчасовому перенесенні сайту або серйозних проблем зі старим доменним ім’ям. Якщо адреса забанена або потрапила під пошукову фільтрацію, зміна дислокації із застосуванням переадресації не допоможе позбавитися цих обмежень.
У яких випадках використовується постійний редирект 301
- Зміна доменне ім’я, перенесення сайту. Необхідно зробити тотальне налаштування переадресації зі старої адреси на нову, щоб усі без винятку запити до old_site.ru перенаправлялися на new_site.ru.
- Зміна написання URL певних сторінок з метою SEO-просування, зміни CMS або з інших причин. Потрібно налаштувати редирект із site.ru/1hdkr5 на site.ru/page_adress.
- Перенесення розділів на субдомени. Необхідно змінити адресу www.site.ru/example на example.site.ru.
- Для акумуляції трафіку з адрес, куплених у різних доменних зонах, один пріоритетний ресурс.
- Виняток сторінок, що дублюються, з індексу.
- Склейка дзеркал сайту – варіантів сайту з ідентичним контентом, але різним написанням адрес: site.ru, www.site.ru, https://site1.ru і т.д. У цьому випадку вибирається один пріоритетний домен і на нього налаштовується редирект з усіх дзеркал.
- Видалення сторінки, що раніше існувала. У цьому випадку користувачі зазвичай бачать помилку 404. Велика кількість таких повідомлень негативно сприймається як користувачами, так і пошуковими системами.
- Для швидкого переходу користувача на мобільну версію ресурсу зі смартфонів та планшетних пристроїв.
Створення постійної переадресації 301 через налаштування та плагіни CMS
У більшості популярних конструкторів сайтів та CMS (OpenCart, Joomla!, Бітрікс, Wix, Тільда) передбачено налаштування редиректів за допомогою вбудованих інструментів. Якщо веб-сайт створений за допомогою WordPress, для налаштування переадресації можна скористатися такими плагінами:
- Redirection – найпопулярніший плагін для налаштування редиректів. Крім основної функції має такі можливості: збирання статистики переадресацій, відстеження помилок 404, підтримка регулярних виразів.
- Safe Redirect Manager – простий плагін, який також підтримує регулярні вирази, практично не впливає на продуктивність сайту.
- Quick Page/Post Redirect Plugin – ще один зручний інструмент оптимізації. Один із недоліків — відсутність підтримки регулярних виразів. До посилань можна додавати атрибут nofollow.
- Simple 301 Redirects . Цей модуль має один недолік – url для переадресації необхідно прописувати вручну.
Налаштувати Permanent Redirect 301 у Вордпрес можна і через редагування файлу .htaccess у розділі керування хостингом. Щоб підключитися до нього, потрібно використовувати FTP-клієнт. Саме кодування проводиться за загальними правилами налаштування переадресації в .htaccess.
Щоб налаштувати 301 редирект у CMS OpenCart у файлі .htaccess необхідно прописати:
RewriteCond %{QUERY_STRING} ^_route_=адреса старої_сторінки.html$ RewriteRule ^(.*)$ http://ваш_домен.ru/нової_сторінки/? [R=301,L]
Для Бітрікс кодування буде виглядати так:
RewriteEngine On RewriteCond %{HTTP_HOST} ^www.sng-it.ru$ [NC] RewriteRule ^(.*)$ http://sng-it.ru/$1 [R=301,L]
У Joomla налаштування переадресації виконуються через панель адміністратора в розділі «Компоненти» => «Перенаправлення». Тут можна не тільки встановити правила редиректу, а й відстежувати сторінки з битими посиланнями та перенаправляти їх на коректні адреси.
Із конструкторами сайтів все не так однозначно. Наприклад, один із найбільш популярних CMS-конструкторів WIX не надає можливості створення файлу .htaccess.
Але налаштувати редирект 301 досить просто у базовому редакторі.
Налаштування 301 редирект в .htaccess
Файл з розширенням .htaccess – це додатковий файл конфігурації web-сервера Apache. Його використовують для налаштування веб-сервера, а також для обробки різних URL-адрес.
Для налаштування 301 редиректа у файлі .htaccess найчастіше застосовують одну з трьох директив: Redirect, RedirectMatch або RewriteRule. Директиви стосуються лише папки, де розміщено .htaccess, а звідти поширюються на дочірні папки.
Визначити файл можна через панель управління хостингу чи використовувати FTP-клиент. При будь-якому варіанті потрібно увімкнути відображення прихованих файлів.
Попередня підготовка
- Для створення 301 редагування перейдіть в панель управління вашого сайту.
- Перевірте наявність .htaccess файлу у кореневому каталозі сайту (public_html, якщо використовуєте WordPress). Якщо файл відсутній, створіть його.
- Рекомендуємо всі умови редирект записувати в блоці IfModule, щоб уникнути помилок під час виконання файлу htaccess.
<IfModule mod_rewrite.c> </IfModule>
- Перед тим, як почати прописувати правила перенаправлення, необхідно увімкнути механізм перетворень (RewriteEngine) за допомогою команди RewriteEngine On.
- Хостинги застосовують за умовчанням 302 або будь-який інший 3xx редирект. У зв’язку з цим у правилах використовуються прапори. Рекомендуємо дописувати у правилах [R=301,L] .
Розберемо найпоширеніші варіанти створення 301 редиректу через .htaccess.
Склейка дзеркал сайту (www / без www)
Сайти http://name.site та http://www.name.site для пошукових систем є різними. А за фактом, це різні адреси одного сайту.
У пошуковій системі сайт за однією адресою буде проіндексовано, а за іншою адресою зафіксовано як дубль, що може вплинути на просування ресурсу. Для уникнення дублів необхідно зробити так звану «склейку» сайту, тобто прописати 301 редирект у .htaccess.
Якщо в індекс пошукової системи потрапила версія «з www», у файл .htaccess додається редирект на «без www»:
RewriteCond %{HTTP_HOST} ^www.name.site$ [NC] RewriteRule ^(.*)$ http://name.site/$1 [R=301,L]
Якщо відбулася зворотна ситуація і необхідна переадресація з без www на www, то у файл прописується:
RewriteCond %{HTTP_HOST} ^v name.site$ [NC] RewriteRule ^(.*)$ http://www.name.site/$1 [R=301,L]
Редирект з http на https для всього сайту
У разі переходу на захищений протокол https для всього сайту необхідно налаштувати перенаправлення з http на https. Для цього до файлу .htaccess додайте:
RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Якщо ця конструкція не спрацює, спробуйте інший варіант:
RewriteCond %{HTTPS} =on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L] RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Якщо редирект не працює і в цьому випадку, спробуйте такий варіант:
RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteCond %{REQUEST_URI} =/page.php RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
В результаті пройде перенаправлення на https всіх користувачів та пошукових систем.
Посторінково
Трапляються випадки, коли необхідно створити редирект на https всіх сторінок, крім однієї. У цьому випадку використовують посторінковий редирект:
RewriteEngine On RewriteCond %{HTTPS} =off RewriteCond %{REQUEST_URI} !^/page.php RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
Для однієї сторінки
Для редиректу з http на https однієї сторінки (наприклад page.php), у файл додайте наступну конструкцію:
RewriteEngine On RewriteCond %{HTTPS} =off RewriteCond %{REQUEST_URI} =/page.php RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
Редирект сайту з https на http
Якщо необхідно зробити 301 редирект всього сайту з https на http, файл прописується наступне:
RewriteCond %{SERVER_PORT} ^443$ [OR] RewriteCond %{HTTP} =on RewriteRule ^(.*)$ https://name.site/$1 [R=301,L]
Зміна домену
У тому випадку. якщо необхідно перейти на інший домен, при цьому зберігши SEO-позиції, файл .htaccess прописують наступне:
RewriteCond %{HTTP_HOST} ^www.old_name.ru$ [NC] RewriteRule ^(.*)$ http://new_name.ru/$1 [L,R=301] RewriteCond %{HTTP_HOST} ^old_name.ru$ [NC] RewriteRule ^(.*)$ http://new_name.ru/$1 [L,R=301]
Редирект на сторінку з іншим URL (без параметрів)
Іноді виникає ситуація, коли необхідно змінити URL сторінки, тобто перенести дані з однієї сторінки на іншу сторінку, при цьому не втративши вагу сторінок. У цьому випадку файл .htaccess прописують наступне:
RewriteRule ^(.*)old_page.html$ http://vash-sait.ru/new_page.html [R=301,L]
Редирект для url (з параметрами)
Якщо адреса містить параметр (наприклад, http://name.site/articles.php?section=1, де параметром є “section=1”), то прописують наступну конструкцію:
RewriteCond %{QUERY_STRING} section=1 RewriteRule ^index.php http://name.site/articles.php? [R=301,L]
Редирект з index.php на головну сторінку
У тих випадках, коли головна сторінка сайту може бути недоступна на декілька адрес одночасно, застосовують наступну конструкцію:
RewriteCond %{THE_REQUEST} ^[AZ]{3,9} /index.php HTTP/ RewriteRule ^index.php$ http://name.site/ [R=301,L]
Редирект зі сторінок зі слішем на без слішу (для всього сайту)
Для уникнення дублів у файлі .htaccess використовують таку конструкцію:
RewriteCond %{REQUEST_URI} !? RewriteCond %{REQUEST_URI} !& RewriteCond %{REQUEST_URI} != RewriteCond %{REQUEST_URI} !. RewriteCond %{REQUEST_URI} ![^/]$ RewriteRule ^(.*)/$ /$1 [R=301,L]
Або більш короткий варіант:
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ /$1 [R=301,L]
Редирект зі сторінок без слiшу на слiш (для всього сайту)
Зворотний варіант застосовується, коли потрібно використовувати адреси зі слішем.
RewriteCond %{REQUEST_URI} !? RewriteCond %{REQUEST_URI} !& RewriteCond %{REQUEST_URI} != RewriteCond %{REQUEST_URI} !. RewriteCond %{REQUEST_URI} !/$ RewriteRule ^(.*[^/])$ /$1/ [R=301,L]
301 редирект з 404 Not Found
Код 404 Not Found (сторінка не знайдена) присвоюється віддаленій або неіснуючій сторінці на сайті. Створення постійного перенаправлення з таких сторінок є актуальним для контентних сайтів та великих інтернет-магазинів, де сторінки часто видаляються з природних причин. Тоді виникає потреба перенаправити відвідувачів на одну з головних сторінок сайту, щоб вони не йшли з ресурсу, побачивши помилку.
301 редирект для сторінок 404 Not Found зробити дуже легко. Наприклад, цей код перенаправить з усіх 404-сторінок на головну:
ErrorDocument 404 http://www.site.com/301.html
Проте робити такі редиректи масово не рекомендується, оскільки це може зіпсувати SEO-статистику всього ресурсу.
Фінальний вигляд файлу.
Приклад файлу htaccess після додавання до нього редиректів:
Options -Indexes ErrorDocument 404 /404.php php_flag register_globals off php_value pcre.recursion_limit 1000 #Умови 301 редиректа <IfModule mod_rewrite.c> RewriteEngine On # склеювання дзеркал RewriteCond %{HTTP_HOST} ^my_site.ru RewriteRule ^(.*)$ https://my_site.ru/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^my_site.ru RewriteRule ^(.*)$ https://my_site.ru/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^www.my_site.ru RewriteRule ^(.*)$ https://my_site.ru/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^www.my_site.ru$ [NC] RewriteRule ^(.*)$ https://my_site.ru/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^www.my_site.ru RewriteRule ^(.*)$ https://my_site.ru/$1 [R=301,L] # без слєшу RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ /$1 [R=301,L] </IfModule> php_value default_charset utf-8 AddType 'text/html; charset=utf-8' .html .htm .shtml
Синтаксис для регулярних виразів у .htaccess
. | точка замінює довільний символ |
[abc] | позначає перелік знаків, що збігаються з літерами a, b, або з |
[^abc] | список символів поза вказаним діапазоном (крім a, b, с) |
* | вказує на те, що попередній знак може повторюватися 0 або більше разів. |
[abc]* | команда знайде символи, що йдуть поспіль, із заданого набору |
[^abc]* | призводить до протилежного ефекту |
.* | замінює будь-який набір символів |
«.*» | шукає всі підрядки між лапками |
^ | початок рядка (коли використовується на початку виразу) |
$ | означає кінець рядка |
w | цифра, буква або підкреслення _ |
d | замінює будь-яку цифру |
D | може замінити будь-який знак, крім цифри |
[0-9] | для заміни будь-якої цифри |
[az] | для всіх букв від a до z у нижньому регістрі |
[AZ] | для кожної літери від A до Z у верхньому регістрі |
[a-zA-Z] | будь-яка буква від a до Z у всіх регістрах |
[aZ] | аналогічно |
Важливо враховувати, що налаштування редагування шляхом редагування файлу .htaccess доступне виключно для веб-серверів Apache.
Інші способи створення переадресації 301
Через PHP
Даний варіант підійде тим, хто добре розуміється на web-програмуванні та PHP. Необхідно відкрити файл index.php у корені CMS-движка та прописати там:
if($_SERVER['REQUEST_URI'] == "/index.php") { header("Location: /",TRUE,301); exit(); }
(у першому рядку вкажіть старий url, а у другому – новий)
Другий спосіб – перенаправлення за допомогою відправлення заголовків (скрипту):
<?php header("HTTP/1.1 301 Moved Permanently"); header("Location: http://www.newdomain.ru/newdir/newpage.htm"); exit(); ?>
ASP-редирект
<%@ Language=VBScript %> <% Response.Status="301 Moved Permanently" Response.AddHeader "Location", "http://www.new-url.com" response.end %>
ASP.NET редирект
Знайдіть у корені свого сайту файл web.config і вставте в розділ синтаксис:
<script runat="server"> private void Page_Load(object sender, System.EventArgs e) { Response.Status = "301 Moved Permanently"; Response.AddHeader("Location","http://www.new-url.com"); } </script>
ColdFusion редирект
<.cfheader statuscode="301″ statustext="Moved permanently"> <.cfheader name="Location" value="http://www.new-url.com">
JSP (Java) редирект
Цей спосіб підійде для невеликого коригування простих сайтів. Код можна прописати лише в одному файлі, а сам файл додати на всі потрібні сторінки, вказавши:
<script type="text/javascript" src="redirect.js"></script> <script type="text/javascript"> location="https://yandex.ru"; </script>
CGI-скрипт на PERL
$q = новий CGI; print $q->redirect("http://www.new-url.com/");
Ruby on Rails
def old_action headers["Status"] = "301 Moved Permanently" redirect_to "http://www.new-url.com/" end
Редирект у Nginx
if ($host = 'www.domain.com') { rewrite ^(.*)$ http://domain.com$1 permanent; }
HTML-редирект
Цей спосіб підходить для невеликих статичних сайтів, коли потрібно налаштувати переадресацію для однієї сторінки. Для цього необхідно додати спеціальний мета-тег усередині коду HTML. Приклад запису редиректу на інший ресурс після 5-секундної затримки:
<meta http-equiv="refresh" content="5;https://livepage.pro">
Якщо встановити значення 0 замість 5, то переадресація на https://livepage.pro відбудеться миттєво.
Однак для великих сайтів HTML-перенаправлення робити складно і витратно за часом, тому краще віддати перевагу іншому варіанту.
Редирект 301 у панелях управління сервера
Більшість панелей керування сервера надають можливість налаштування переадресації з кодом 301. Розглянемо варіанти вирішення цього завдання на прикладі двох популярних ПУ для VDS.
Cpanel
Потрібно перейти до блоку «Домени» => «Перенаправлення». У вікні виконати наступне:
- У рядку “Тип” вибрати “Постійний 301”.
- У рядку «https://www» зі списку вибрати домен сайту (наприклад, example.ua ).
- У рядку “Перенаправляє на” вказати для домену адресу http://example.ua .
- У блоці «Перенаправлення www» поставити галочку навпроти «Перенаправляти тільки з www».
- Зберегти зміни кліком на “Додати”.
ISPmanager
У цій панелі можна вручну редагувати файли nginx.config або .htaccess, але є і вбудований механізм переадресації. Наприклад, для налаштування редиректу на https/http потрібно зняти галочку з відповідного пункту у розділі “WWW-домени”.
Автоматичне створення переадресації
За відсутності знань та досвіду самостійного налаштування редиректу можна скористатися сервісами автоматичної генерації:
- Seomagnifier – 301 для www;
- 301 Redirect Code Generator Tool – для доменів та сторінок;
- Generate .htaccess – для сторінок, розділів сайтів, доменів.
Перевірка коректності налаштувань 301 редиректа
Найпростіший спосіб перевірки переадресації – ручне тестування. Для цього необхідно вставити в адресний рядок браузера URL сайту або сторінки, з якою налаштовано перенаправлення. Якщо при відкритті буде доступний ресурс, на який налаштовано редирект, переадресація виконується правильно.
Для автоматичної перевірки можна скористатися спеціальними сервісами:
- Redirect Checker , bertal.ru або Header Checker Tool для тестування окремих сторінок;
- програмою Screaming Frog Seo Spider , здатною просканувати весь сайт.
Існує ряд помилок, які слід уникати при налаштуванні редирект 301:
- використання перенаправлень між сторінками сайту без зміни їх url у посиланнях;
- встановлення тимчасової переадресації замість постійної;
- неправильний вибір типу редиректу;
- перенаправлення файлу robots.txt;
- нерозуміння різниці між rel=canonical та кодом 301;
- редирект на нерелевантний контент;
- переадресація, яка не призводить до 200 сторінок.
Варто наголосити на проблемі створення ланцюжка посилань, що може призвести до появи циклічного редиректу — помилки з кодом «ERR_TOO_MANY_REDIRECTS». Найпоширенішими причинами виникнення такого бага є неправильне налаштування в процесі створення переадресації, вірусна атака, занадто довгий ланцюжок редиректів. Не рекомендується налаштовувати редирект, що містить понад п’ять адрес. Оптимальною є пряма переадресація зі старого на новий URL.
Висновок
Використання редиректу 301 – дуже важливий спосіб пошукової та оптимізації веб-ресурсу. Використовувати його слід з обережністю. Неправильне налаштування може призвести до збоїв у роботі сайту та втрати пошукових позицій.
Інструментів для коректної роботи Permanent Redirect 301 існує досить багато. Найбільш зручний та правильний – внесення записів у файл .htaccess. Недолік цього в тому, що він доступний лише для веб-серверів Apache. При використанні IIS доведеться настроювати web.config. Для створення складних правил переадресації найбільше підходить PHP, але в цьому випадку без допомоги програміста не обійтися. Ще одним варіантом налаштування 301 редагування може бути звернення до хостинг-провайдера з метою підключення послуги web-форвардингу.