301 редирект - використовуємо правильно для внутрішньої оптимізації

Що таке 301 редирект

301301 редирект (301 Permanent Redirect) — відповідь сервера, а також серверне перенаправлення з однієї URL-адреси на інший. Завдяки такому перенаправленню можна автоматично надсилати користувача або пошукову систему зі старої адреси сторінки на нову. Ця відповідь сервера вказує пошуковим системам, що сторінку було переміщено на іншу адресу, тому стару url можна вважати застарілою. Після того, як пройде переіндексація, пошукові системи «склеять» їх та пропонуватимуть користувачам новий.

Де налаштовується 301 редирект

Існує кілька найбільш часто використовуваних способів налаштування 301 редиректів:

- через php-умову

Коли браузер отримує команду, замість однієї сторінки відкрити другу. Якщо Ваш сайт зроблений на якійсь CMS, то є ймовірність того, що вона має функцію редиректу з кореня на файл index. У цьому випадку відкрийте index.php, який знаходиться в корені Вашого двигуна і пропишіть:

 if ( $_SERVER [ 'REQUEST_URI' ]  ==  "/index.php" )    {   
    header ( "Location: /" , TRUE , 301 ) ; 
    exit ( ) ; 
      }  

де перший рядок вказує яку url-адресу повинен перенаправляти, а другий - на яку url-адресу має виконуватися перенаправлення.

- у конфігураційному файлі, наприклад у .htaccess

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

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

301 редирект з www на без www (налаштування головного дзеркала)

Найпоширеніший випадок, коли необхідно налаштувати редирект, це коли сайт доступний за кількома адресами одночасно. Наприклад: http://site.com та http://www.site.com. Це може заважати при просуванні сайту , тому що в індексі пошукових систем можуть з'являтися повні дублі сторінок. Тому у файл .htaccess можна спробувати додати такі рядки:

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

або ось такий варіант

RewriteEngine On
RewriteCond %   {   HTTP_HOST   }    ^ www\ . site\ . ru $ [ NC ] 
RewriteCond %   {   REQUEST_URI   }    ! ^ / robots . * 
RewriteRule ^ ( . * ) $ http://site.ru/$1 [R= 301 ,L]

301 редирект з без www на www

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

або ось такий варіант

RewriteEngine On
RewriteCond %   {   HTTP_HOST   }    ^ site\ . ru $ [ NC ] 
RewriteCond %   {   REQUEST_URI   }    ! ^ / robots . * 
RewriteRule ^ ( . * ) $ http://www.site.ru/$1 [R= 301 ,L]

301 зі старої адреси сторінки сайту на новий

Коли вам потрібно видалити сторінку, але на неї веде багато якісних посилань, щоб зберегти ці посилання та передати її Page Rank на іншу сторінку, можна налаштувати редирект з цієї сторінки на максимально релевантну за змістом іншу. У такому разі вам можуть допомогти додаткові рядки коду у файлі .htaccess такого виду:

RewriteCond %   {   REQUEST_URI   }    ^ / test / $
RewriteRule ^ . * $ http://site.ru/new-test/ ? [R=301,L]

де test та new-test – ваші варіанти сторінок

301 редирект з усіх сторінок одного домену на головну іншого домену

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

RewriteCond %   {   REQUEST_URI   }    ( . * ) 
RewriteRule ^ ( . * ) $ http://site.ru/ [L,R=301 ]

де site.ru - сайт, на який йтиме редирект

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

RewriteCond %   {   REQUEST_URI   }    ( . * ) 
RewriteRule ^ ( . * ) $ http://site.ru/$1 [L,R=301 ]

де site.ru - сайт, на який йтиме редирект

Редирект з http на https

Якщо ви вирішили переїхати на захищений протокол https, необхідно налаштувати редирект за допомогою цих рядків:

RewriteCond %   {   HTTPS   }    = of
RewriteRule ^ ( . * ) $ https : //%  {  HTTP_HOST  }  /$1 [R=301,L]

або можна спробувати такий варіант

RewriteCond %   {   HTTP : X - HTTPS   }    ! 1 
RewriteRule ^ ( . * ) $ https : //%  {  HTTP_HOST  }  /$1 [R=301,L]
Редирект з https на http
RewriteCond %   {   HTTPS   }    = on
RewriteRule ^ ( . * ) $ http : //%  {  HTTP_HOST  }  /$1 [R=301,L]

301 редирект зі сторінок зі слішем на без слеша (для всього сайту)

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 ]

301 редирект зі сторінок без слiшу на слiш (для всього сайту)

RewriteCond %   {   REQUEST_URI   }    ! \ ? 
RewriteCond %   {   REQUEST_URI   }    ! \ & 
RewriteCond %   {   REQUEST_URI   }    ! \ = 
RewriteCond %   {   REQUEST_URI   }    ! \ . 
RewriteCond %   {   REQUEST_URI   }    ! \ / $
RewriteRule ^ ( . * [ ^ \ / ] ) $ / $ 1 /  [ R = 301 , L ]

або ось такий варіант

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

301 редирект тільки адреси site.ru/index.php (без параметрів GET) на основне дзеркало site.ru

RewriteCond %   {   REQUEST_URI   }    / index . php
RewriteCond %   {   QUERY_STRING   }    ^ \z
RewriteRule ^ ( . * ) $http : //site.ru/? [R=301,L]

або ось такий варіант

RewriteEngine On
RewriteCond %   {   THE_REQUEST   }    ^ [ A - Z ]   {   3,9   }   \ / index \ .​ php \ HTTP / 
RewriteRule ^ index \ . php $ http://www.site.ru/ [R=301,L]

301 редирект всіх адрес з index.php і GET параметрами на сторінки тільки з GET параметрами (вирізати в url index.php)

RewriteCond %   {   REQUEST_URI   }    / index . php
RewriteRule ^ ( . * ) $ http://site.ru/ [R= 301 ,L]

301 редирект для index.php, index.html або index.htm (наприклад Joomla), масова склеювання

RewriteCond %   {   THE_REQUEST   }    ^ [ A - Z ]   {   3,9   }   \ / index \ .​ ( php | html | htm ) \ HTTP / 
RewriteRule ^ ( . * ) index \ . ( php | html | htm ) $ http://site.ru/$1 [R=301,L ]

Редирект із внутрішньої сторінки на головну

RewriteEngine On
RewriteCond %   {   HTTP_HOST   }    ^ www\ . site\ . ru $ [ NC ] 
RewriteRule ^ vnutrenyaya - stranica / $ http://www.site.ru/ [R=301,L]

Редирект з головною на внутрішню сторінку

RewriteEngine On
RewriteCond %   {   HTTP_HOST   }    ^ www\ . site\ . ru $ [ NC ] 
RewriteRule ^ $ http://www.site.ru/vnutrenyaya-stranica/ [R=301,L]

Редирект усіх внутрішніх сторінок на головну

RewriteEngine On
RewriteCond %   {   ENV : REDIRECT_STATUS   }    ^ $
RewriteRule ! ( ^ $ | . * \ . ( css | jpg | gif ) )  /  [ R = 301 , L ]

Редирект з домену РФ на домен

RewriteCond %   {   HTTP_HOST   }    ^ xn -... \ .​ xn -- p1ai $ [ NC ] 
RewriteRule ^ ( . * ) $ http://www.yourdomain.ru/$1 [R= 301 ,L]

301 редирект каталогу

RewriteRule ^ ( . * ) / old - catalog / ( . * ) $ $ 1 / new - catalog / $ 2  [ R = 301 , L ]

Ці рішення найчастіше підходять для основних завдань, але іноді їх необхідно доопрацьовувати разом із розробниками. Пов'язано це з особливостями окремих cms-систем.

Важлива рекомендація: на багатьох хостингах може працювати 302 або інший 3ХХ редирект. Тому рекомендується завжди дописувати до своїх правил [R=301,L].

Зміна cms-системи та масова зміна всіх адрес сторінок сайту

Трапляються випадки, коли ви переїжджаєте на іншу cms і адреси ваших сторінок змінюються таким чином:

Було - site.com/category/kategoriya

Стало - site.com/kategoriya

У такому разі вам необхідне масове налаштування редиректів за загальним принципом і можливо вам допоможуть наступні рядки в .htaccess:

RewriteEngine on
RewriteRule ^ category / ( [ ^ / ] + ) / ? $ $1  [ L ]

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

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

Чому 301 редирект, а не 302 та інший 30х — досвід із нашої практики

З точки зору SEO, слід завжди використовувати 301 редирект , у разі, якщо ви хочете перенаправляти і користувачів та пошукових роботів на нову адресу.

301 redirect

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

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

Ось випадок, коли сайт переїхав з домену kiev.ua на ua, а трохи пізніше ще й на захищений протокол https, але розробники налаштували не 301, а 302 редирект. Результат:

Дубль сайту: приклад перший

Дубль сайту: приклад два

Дубль сайту: приклад три

302

Поки працював такий редирект і пошукові системи вважали його тимчасовим, в індексі Google і Яндекс знаходилося 3 копії одного сайту. Що згодом спричинило дуже сильне просідання позицій у пошуку.

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

Важливо знати та пам'ятати — якщо ви хочете, щоб пошукові системи вважали дві різні адреси як одну — має працювати переадресація на основну, за допомогою 301 редиректу. В іншому випадку в індексі залишається сторінка зі старою адресою і з'являється сторінка з новою, як у наведеному вище прикладі. Використання 302 або будь-яких 30-х редиректів, як правило, з точки зору SEO не призводить ні до чого хорошого. Перевірити відповідь сервера можна на цьому сайті – https://httpstatus.io/

(5/5 - голосів 1)

Рекомендовані статті

Читайте також: