302 и 301 редирект htaccess — в чем отличия?

Чем отличается 301 редирект от 302 редиректа - в чем разница? Начнем с того, что 301 и 302 это коды состояния HTTP, которые отдает сервер клиенту (браузеру или поисковому роботу в заголовках). Также существуют и другие коды редиректов, но мы остановимся подробнее именно на 301 и 302 т.к. их часто путают и применяют не по назначению.

Коды состояния HTTP вида 3xx сообщают браузеру что для успешного выполнения запроса требуется сделать другой запрос например с другим URI. Из данного вида пять кодов 301, 302, 303, 305 и 307 имеют отношение непосредственно к перенаправлениям (редиректу).

  • код 301 Moved Permanently (Перемещено окончательно)
  • код 302 Found (Найдено)
  • код 303 See Other (Смотреть другое)
  • код 305 Use Proxy (Использовать прокси)
  • код 307 Temporary Redirect (Временное перенаправление)

Обратимся к первоисточнику - RFC стандарту. Код редиректа 301 означает, что страница перемещена навсегда, код редиректа 302 означает что документ найден, но временно перемещен по другому адресу, поэтому использование нужного кода редиректа должно зависеть от целей перемещения страницы.

Осталось выяснить какой код редиректа грамотнее использоватль в случае если нам например нужно склеить домены с www и без www, или в случае если нужно редиректить субдомен www на основной домен принудительно?

Если в хотите чтобы домены www.адрес-сайта.ру с  и адрес-сайта.ру склеились поисковой системой (например Яндексом или Гуглом), т.е. по обоим адресам открывался один и тот же документ  нужно использовать 302 редирект. Хотя для любой поисковой системы субдомен www является совершенно другим сайтом и выдавать по совершенно разным адресам один и тотже контент в корне неверно. В файле .htaccess с включенным модулем mod_rewrite это выглядит примерно так:

RewriteRule (.*) sitefolder/$1 [R=302,QSA]

Если же вы хотите сделать принудительный редирект человека, который зашел по адресу www.адрес-сайта.ру на адрес адрес-сайта.ру нужно использовать 301 редирект, что означает что субдомена www в настоящий момент не несуществует и он навсегда перемещен по новому адресу. Поисковые роботы это тоже воспринимают адекватно. В файле .htaccess с включенным модулем mod_rewrite это выглядит примерно так:

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

В принципе поисковые системы зазеркалят домены в обоих случаях, но предпочтительнее и грамотнее использовать второй вариант с 301 редиректом, поскольку субдомен www является анахронизмом, но многие пользователи упорно продолжают набирать www перед адресом сайта их можно принудительно редиректить, тем самым не теряя ценных посетителей.

Leave a Reply

Статьи