Здравствуйте, уважаемые друзья и гости блога! Сегодня пойдет речь о такой странной вещи на сайте, как ошибка 301 Moved Permanently (переехал навсегда) или по другому редирект 301.
Думаю. что все с таким сталкивались, а некоторые даже использовали данную “ошибку 301” на своих сайтах. Но не все знают для чего эта ошибка 301 или иначе редирект 301 нужна на сайте? Для чего он, 301 редирект, используется?!
Вот сейчас мы с вами и займемся разбором этого вопроса во всех его подробностях и нюансах …
Как Вы уже наверное догадались по переводу слов “moved permanently” – это дословно, что сайт или отдельная его страница “переехал навсегда” по адресу на который Вас перекинул ваш браузер. Тут надеюсь все понятно и ясно без лишних пояснений!
Но возникает вопрос. Для чего это сделано вебмастером этого сайта? Почему он поставил редирект 301 и у нас с вами выскакивает иногда 301 ошибка? А все просто! Ошибка 301 появляется, когда сервер перебрасывает нас с уже не работающего сайта на страницу сделанную специально для перенаправления пользователя на рабочий сайт, но просто с некоторой задержкой или вообще на этой странице нужно самостоятельно перейти по ссылке. Вот это в двух словах об ошибке 301.
Теперь самый важный момент, зачем же все таки нужен редирект 301 на сайте …
Редирект 301 и для чего он нужен?
Есть несколько причин у вебмастера, чтобы использовать редирект 301. Вот они:
- Причина первая: Склейка домена с www и без www. При этом все seo показатели сайта и его ссылочный вес будут совмещены и не будут отличаться друг от друга.
- Причина вторая: Если вдруг пришлось сменить домен для сайта. Тогда применяется редирект 301 и он как раз перенаправляет посетителя сайта и поисковые роботы на рабочий домен сайта. Это также позволит вам сохранить все seo показатели вашего переехавшего сайта, как тИЦ, PR, так и своих посетителей.
- Причина третья: Использование редиректа 301 при переносе отдельной страницы сайта на другой ресурс. Бывают и такие случаи, когда это нужно сделать.
- Причина четвертая: Например у Вас есть сайт, где высокий тИЦ и PR и много посетителей. И еще есть другой сайт, который нужно немного пропиарить и прибавить к нему посещения. Тогда Вы просто на просто перенаправляете при помощи того же редирект 301, с одной страницы высоко посещаемого сайта на страницу более низко посещаемого сайта и тем самым выигрываете, добавив ему веса ссылочной массы и соответственно посещений.
Вот основные причины для использования редирект 301 или ошибка 301 Moved Permanently.
Теперь давайте узнаем, как правильно использовать редирект 301 на своем сайте и как настроить его через файл htaccess …
301 редирект и файл htaccess – как правильно настроить?
Как я вам уже говорил выше – 301 редирект это переадресация посетителя и поискового робота на сайт или отдельно взятую страницу сайта на URL адрес отличный от первоначально запрошенного в браузере.
Для чего это нужно мы с вами также уже разобрали. Но как же это сделать правильно на нашем сайте используя файл htaccess? Сейчас я вам все подробно объясню и приведу примеры внесения изменений в файл htaccess для вашего сайта!
- Перенаправление домена с www на без-www
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.(.*) [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
или вот более понятный синтаксис:
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC] RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
- 301 редирект запросов без-www на домен с www префиксом
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^domain.com$ [NC] RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
Альтернативный вариант:
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} !^www.(.*) [NC] RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
- 301 редирект старого домена на новый в фале htaccess
Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]
- Если вам нужно, чтобы вместо rewrite.htm загружался файл rewrite.html, добавьте в файл htaccess вот это:
RewriteEngine on RewriteBase / RewriteRule ^rewrite.htm$ rewrite.html [R=permanent]
- Чтобы заменить все .htm файлы на .html внесите в файл htaccess:
RewriteEngine on RewriteBase / RewriteRule ^(.*).htm$ $1.html [R=permanent]
- Варианты, когда не нужно использовать 301 редирект на вашем сайте:
- Если реализация 301 редиректа невозможна или она займет неоправданно много времени.
- Если контент вашего сайта дублируется на двух или нескольких страницах, но эти страницы должны быть доступны в поиске пользователю ввиду некоторых отличий (на пример, выбор какого-то товара).
- Если одна страница имеет несколько URL адресов (сортировка каталога товаров по различным категориям или критериям).
- Для кросс-доменов. Это, когда контент сайта на двух URL адресах дублируется, но он должен быть доступен на каждом из двух или нескольких доменах.
Этот материал посвящен выходу 301-ой статьи на моем блоге!
Может вам интересно узнать, что такое ошибка 503 и как ее устранить?
На этом пока все. Всем удачи и благополучия!
При работе с веб-ресурсами возникают ситуации, когда происходит удаление, перенос или изменение 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} ^[A-Z]{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]
Редирект со страниц без слеша на слеш (для всего сайта)
Обратный вариант применяется, когда нужно использовать адреса со слешем.
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
Пример файла 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] |
для замены любой цифры |
[a-z] |
для всех букв от a до z в нижнем регистре |
[A-Z] |
для каждой буквы от A до Z в верхнем регистре |
[a-zA-Z] |
любая буква от a до Z во всех регистрах |
[a-Z] |
аналогично |
Важно учитывать, что настройка редиректа путем редактирования файла .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 = new 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.ru).
-
В строке «Перенаправляет на» указать для домена адрес http://example.ru.
-
В блоке «Перенаправление 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-форвардинга.
Содержание
- 1 Что такое 301 редирект для сайта
- 2 Для чего нужен 301 Redirect
- 2.1 Адрес страницы изменен
- 2.2 Склейка зеркал
- 2.3 Смена домена
- 2.4 Исправляем технический бардак
- 2.5 301 редирект вместо 404 Not Found
- 3 Когда не надо использовать код сервера 301 и другие нюансы
- 3.1 Временная переадресация при неуверенности
- 3.2 Спасение от фильтров стоит ли?
- 3.3 Нюансы использования 301 редиректа
- 4 Как настроить 301 Редирект в .htaccess на Apache
- 4.1 301 Редирект с www на без www для склейки зеркал
- 4.2 301 Redirect без www на www
- 4.3 301 Редирект с https на http и наоборот в Htaccess
- 4.4 Универсальный редирект с index.php и .html на ссылку без них
- 4.5 301 редирект со страницы на страницу
- 5 Redirect в PHP
- 5.1 Как убрать дубль адреса сайта в адресной строке с помощью ПХП
- 5.2 Как убрать дубль страницы со слешем с помощью PHP
- 6 Особенности настройки Permanent Redirect на nginx.
- 6.1 301 редирект на nginx с www на без www
- 6.2 Permanent Redirect 301 на nginx с домена без www на домен с www
- 6.3 Redirect 301 в nginx.conf со страницы с index.php на адрес без index.php
- 7 Как сделать Редирект с http на https без htaccess — ковыряем web.config
- 8 Когда редирект с https на http не работает — что делать?
- 9 301 moved permanently что это и как исправить
- 10 302 Редирект — временное переселение
- 10.1 Чем отличается 302 Редирект от 301?
- 11 Сервисы для контроля Редиректов
Сегодня мы поговорим о редиректе и постараемся разобрать данный вопрос максимально широко и в то же время не распыляться. Важность редиректов в сео просто огромна, в то же время велики и риски проблем из-за неправильной переадресации. Вопрос важный, сложный и очень нужный, так что читаем далее!
Что такое 301 редирект для сайта
Что такое 301 редирект? Даже не так. Что такое Redirect? Это команда поисковому роботу перенаправлять посетителя на другую страницу, которая была перемещена в другое место. Цифра 301 — это код, который говорит об окончательном перемещении страницы в новую локацию. Ведь когда мы переходим на какую-то страницу и нам выдается ошибка, мы видим перед собой код этой ошибки и расшифровку. Например, код 404 говорит нам — Not Found, что означает — страница не найдена, а 505 ошибка сообщает, что ответ от сервера не был получен. Но если вышеописанные ошибки видны посетителю на открытой странице браузера, то шифры перенаправления видят только роботы, которые и направляют гостя по другой ссылке (если, конечно, редирект был настроен правильно). Вот как раз новую ссылку, меняющуюся в адресной строке браузера посетитель и заметит. То есть 301 редирект перебрасывает пользователя с одной страницы на другую, не останавливаясь на промежуточном адресе, доводя до конечного места локации контента.
Официальное название редиректа — Permanent Redirect 301, используется как инструмент в SEO. Код прописывается в файлах на сервере, где расположен сайт, и при обращении по ссылке, которая указана в редиректе как та, с которой нужно увести посетителя, сервер отдает системе код 301 с новыми данными для отображения ссылки и «пометкой» — перемещен на другой адрес (moved permanently).
Каким образом происходит процесс перемещения? С помощью кода в файлах на сервере с сайтом размещается специальный код, который роботы поисковых систем считывают и выполняют. В этом коде обязательно присутствуют константы: откуда переместить и куда. Причин для использования 301 редиректа на сайте может быть множество, рассмотрим основные из них в этой статье, ведь, возможно, что какой-то способ вам понабиться, и вы им воспользуетесь.
Я подготовил мощный мини-курс по SEO текстам, которые сами выходят в ТОП! Курс записан в формате пошаговых инструкций и в данный момент доступен БЕСПЛАТНО, вместо 2999, так что не упустите! Ссылка на скачивание мини-курса.
Для чего нужен 301 Redirect
301 редирект является тем видом перенаправления, который поисковые системы признают как правильное решение для перемещенных страниц сайта. Поэтому при настройке Permanent Redirect никаких изменений в ранжировании или наложений штрафных санкций не происходит. Это естественная переадресация. Какое-то время назад этот способ переадресации использовался вебмастерами для выхода из под фильтров, но не факт, что на сегодняшний день этот способ может помочь. Хотя от определенных фильтров иногда спасает (ссылка).
На сегодняшний день основными показаниями к использованию 301 Редиректа являются ситуации:
- изменения адреса страницы сайта, даже на одну букву или символ;
- склейка зеркал (домен с www и без www, домены в разных зонах);
- смена домена интернет-ресурса;
- борьба с дублями из-за технического бардака.
Где делают Permanent Redirect 301? Способы зависят от возможностей вебмастера и его доступа к данным. Поэтому создать 301 Редирект можно через htaccess, php, настройки сервера, javascript. Естественно, что использовать все способы одновременно не надо.
Адрес страницы изменен
Самый простой и распространенный вариант наломать мелких дров в админпанели сайта и создать ошибки при переходе по ссылке — это откорректировать уже проиндексированный неЧПУ. Когда формируется новая страница сайта, ей присваивается номер и адрес из латинских букв. Первое время не очень красивая ссылка никого не смущает, но когда обнаруживается, что можно сделать покрасивше — руки так и чешутся откорректировать url к более человекоподобному:). И тут наступает момент, когда в вебмастере гугла и яндекса обнаруживается огромное количество дублей. Особенно, когда была видоизменена категория сайта в структуре. Google, например, после обновления базы, то есть когда робот заново обошел сайт с начала до конца, покажет в панели вебмастера новые адреса страниц, но старые тоже оставит в поиске, сделав замечание владельцу, что у него на сайте присутствуют одинаковые мета-данные, которых на самом деле там и нет. Переход по старому адресу из поисковой системы выдаст пользователю ошибку 404 (если конечно она правильно настроена), тем самым убив желание потенциального посетителя переходить далее на сайт.
Итог бездумной корректировки URL? Поисковая система видит отказ пользователя и понижает сайт в выдаче по поисковому запросу. Катастрофа. А все из-за какой-то корявой ссылки, которая изначально осталась незамеченной и никого, кроме самого «вебмастера» совершенно не смущала. Но эту ситуацию можно исправить как раз 301 редиректом. Как сделать 301 редирект с одной страницы на другую (со старого url на новый), расскажем дальше.
Склейка зеркал
Зеркала — это, например, когда сайт один, а доменов несколько. Обычно, компании, работающие на бренд, выкупают сразу все доступные зоны, чтобы никто не смог воспользоваться их именем. Также присоединяются названия адреса сайта через дефис и без него. Но даже без такой катавасии, на вашем сайте 100% есть зеркала! В данном случае это написание адреса сайта с www и без, а также доступ через https. В любом из этих случаев делается 301 redirect, причем еще при создании вебресурса, иначе от головной боли с дублями страниц потом тяжело избавится. Редирект 301 с www на без www и наоборот (если основным сайтом является www.имя_домена.ru), а также c http на https (сомневаюсь, что часто бывает перенаправление наоборот), включая разные доменные зоны, обязателен! Для проверки наличия основного зеркала, помогут панели вебмастера поисковых систем.
Смена домена
По разным причинам сайту нужно переехать на новый домен. Чаще всего компания делает ребрендинг, а название домена не отвечает поставленным целям. Ради благозвучия и соответствия названия домена бренду, сайт переезжает. Чтобы не потерять уже постоянных посетителей и поставить перед фактом поисковых роботов, сеошники делают 301редирект со старого домена на новый. Очень важно, чтобы поисковые системы получали ответ от сервера код 301, а не 404 или 302. Работа окажется легкой, если сайтик небольшой (визитка, лэндинг, промо-страница) и понадобится много труда для огромного интернет-магазина, потому что перенаправление на главную страницу здесь не подойдет. Каждый старый URL привязывают к аналогичному новому (постраничная переадресация).
Исправляем технический бардак
Здесь вариантов устроить технический бардак уйма начиная с нарушений элементарных правил создания страниц и заканчивая дублями, которые создаются плагинами на сайте (переводчики, комментарии, поиск по сайту). Сюда же можно отнести мобильные версии выдачи страниц (с этим в последнее время хлопот немало), но их лечат прописыванием canonical. Дубли создаются не только по вине вебмастера, есть и вынужденные. Но случаи по неопытности первого, все же больше наносят вреда. Некоторые прячут такие погрешности закрытием от индексации, но лучше использовать 301 Permanent Redirect и тогда робот точно поймет, что хочет ему сказать человек.
301 редирект вместо 404 Not Found
Не торопитесь сразу убирать 404 (Страница не найдена) и везде проставлять 301 Редирект. Тут важно прочувствовать разницу. Код 404 Not Found обязателен на страницах, которые удалены или никогда не существовали, а вот с битыми ссылками можно бороться 301 Редиректом! Если страница, которую ищет пользователь, существует, зачем отсылать его по древу сайта для ее поиска? Найдена битая ссылка на какую-то страницу? Перенаправляем по правильному адресу кодом 301 и посетитель даже не догадается о том, что ссылка уже была нерабочая.
Когда не надо использовать код сервера 301 и другие нюансы
Есть моменты когда так и хочется воспользоваться 301 редиректом на сайте, но не всегда цель оправдывает средства. Вообще, желательно, во внутренних ресурсах сайта использовать код 301 только в случаях крайней необходимости. Иначе, бездумно посылая робота со ссылки на ссылку, можно создать бесконечное циклическое перенаправление, которое просто убьет весь сайт. И поисковый робот бросит все старания найти место размещения контента, чем навредит репутации ресурса в целом, не доведя посетителя до конца.
Временная переадресация при неуверенности
Permanent Redirect 301 (Перманентный редирект) используется для указания роботам окончательного решения. Что это значит? А это говорит о том, что если вы не уверены навсегда ли будет перемещена страница, тогда безопасней 301 редирект не делать. Redirect склеивает странички, и робот уже просто не видит первой, а это значит, что она канула в лету безвозвратно. Для временной переадресации используют другие способы, когда при принятии решения вернуть все на свои места, не вызовет никаких проблем.
Спасение от фильтров стоит ли?
Когда-то 301 редиректом спасались от фильтров поисковых систем, но нет 100% гарантии, что фильтр в будущем не переместится на новый домен. Создавая постоянное перенаправление на новый сайт, перемещается ТИЦ с PR. Мною замечено, что с алгоритмом «Пингвина» еще можно помудохаться, а вот от АГС такие манипуляции не спасут однозначно. Поэтому сейчас Permanent Redirect не так популярен для спасения от фильтров ПС, но зато помогает не потерять заслуженные позиции. Чего вполне достаточно для усердных вебмастеров.
Нюансы использования 301 редиректа
- Исправлять ссылки ведущие извне 301 редиректом вполне нормально, потому что отредактировать их у нас нет возможности. А вот кривые внутренние пути надо максимально исправлять вручную другими, более щадящими способами.
- Настраивая redirect, нужно быть предельно внимательным, чтобы не захватить какие-нибудь системные ссылки из корневых каталогов или пути к папкам и плагинам.
- Для поиска ссылок, нуждающихся в исправлении, необходимо использовать инструменты поисковых систем Google и Яндекс Вебмастер. Очевидные дубли страниц видны в Гугл Вебмастер во вкладке Вид в поиске > Оптимизация HTML, а в Яндексе — Индексирование — Статистика.
- Между нашими главными поисковыми гигантами есть одна огромная особенность: если Google после обновления базы самостоятельно уберет исправленные ошибки из панели вебмастера, то Яндекс этого может вообще не сделать. Это дело можно поправить прописыванием в robot.txt запрета на индексирование или подать ручной запрос в поддержку на удаление из базы плохих ссылок. В 2016 Вебмастер Яндекса перешел на новый уровень, расширив функционал системы. Правда, некоторые возможности еще не работают, но уже функционируют корректно бывшая аддурилка, а теперь запрос на внеочередной переобход страницы роботом, проверка мобильности страниц, удобная статистика по ключевым словам с разбивкой на ТОП 3, 10, 50.
Как настроить 301 Редирект в .htaccess на Apache
Одним из самых старых и распространенных способов запустить 301 редирект на Apache является прописывание специального кода в корневом каталоге сайта в файле .htaccess. Неоспоримым преимуществом этого метода является быстрая загрузка команд сразу с сервера еще до запуска скриптов без дополнительной на него нагрузки. Не зря перед названием htaccess я поставил точку — это файл без названием с расширением. Знаю, непривычно, но этот файлик есть в корневой папке сайта или, по крайней мере, должен быть.
Как найти htaccess? Открываем FTP-клиент (например, Fillezilla), переходим на каталог сайта и опля! Не случилось опля? Нет такого файла? Попробуйте проверить настройки ftp-клиента. К примеру, в FilleZille нажмите на вкладку Сервер и выберите пункт Принудительно отображать скрытые файлы. Ничего не появилось? Значит, создаем новый файл на свое компьютере. Создаем .txt-шный файл, вписываем нужный код и сохраняем. И тут паника: Windows не сохраняет файл с расширением .htaccess и без имени! Катастрофа, думаете вы. Вовсе нет. Забрасываете файл с расширением тхт через ftp-менеджер в корневую папку сайта и там переименовываете. Ура! Файл .htaccess создан. Теперь, при внесении каких-либо изменений в него, достаточно его просто открыть в блокноте через ftp-клиент или в NotePad++.
А какой код писать, как настроить 301 редирект в htaccess? А вот в зависимости от того, для чего он нам нужен, и будем моделировать код перенаправления. В первую очередь, Permanent Redirect 301 прописывается в самом начале страницы htaccess после строки «R ewriteEngine On», для того чтобы команда обрабатывалась первой. Сервер читает файл построчно сверху. Ниже привел популярные коды для перенаправления.
301 Редирект с www на без www для склейки зеркал
Заранее оговорюсь — во всех примерах в команде R ewriteCond лишний пробел, уберите его перед копированием!
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
R ewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
301 Redirect без www на www
R ewriteCond %{HTTP_HOST} ^site.ru$ [NC]
R ewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
Чувствуете разницу? R ewrite переводится как переписать, Cond — условие, Rule — правило. А с виду для русскоязычных можно запомнить: кто рулит? Рулит вторая строчка, то есть указываем тот путь, куда перенаправляем. Каждый второй вариант приведенных выше правил лучше первого тем, что при перенаправлении будет проверяться не только наличие www в адресе сайта, а и соответствие названия домена указанному. Таким образом, исключается возможность доступа посторонних лиц к файлам на сервере, например, через IP-адрес. А это, как-никак, дополнительная защита.
А теперь расшифровка всех символов в коде 301 редиректа:
R ewriteCond — искомое условие, то есть ссылка, которую, в нашем случае, нужно перенаправить.
R ewriteRule — правило, которое необходимо выполнить с тем условием, которое указано в предыдущей строке.
Мета-символы:
^ — начало строки;
$ — конец строки;
! — отрицание;
— за экранирующим слешем считать метасимволы обычными символами;
. — любой символ в количестве одной штуки:)
() — разбиение на группы;
? — повторение символа от 0 до 1 раза;
* — повторение от 0 до 65536;
+ = повторение от 1 до 65536;
[] — дополнительные опции;
NC (NOCASE) — отключить проверку регистра;
R=301 (Redirect 301) — вернуть ответ браузеру с кодом 301;
L (LAST) — остановка процесса перенаправления, указывая на конечность текущего местоположения данных.
%{QUERY_STRING} — набор переменных для php.
301 Редирект с https на http и наоборот в Htaccess
Небольшим кодом делаем перенаправление с https на http в htaccess:
R ewriteEngine On
R ewriteCond %{HTTPS} on
R ewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}
Если нужно сделать обратный редирект 301 с http на https, то прописываем такой вариант:
R ewriteEngine OnR ewriteCond %{HTTPS} =on
R ewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
Универсальный редирект с index.php и .html на ссылку без них
Создание дублей страниц с добавкой в конце пути index.php или расширения html у веб-страницы происходит сплошь и рядом. Явно это становится видно, когда адрес вашей главной страницы уже выглядит так http://ваш_сайт/index.php или http://ваш_сайт.html. Не очень красиво, правда? Короче — хуже только крокозябры:) Предлагаю исправить ситуацию универсальным кодом:
R ewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.(php|html) HTTP/
R ewriteRule ^(.*)index.(php|html)$ $1 [R=301,L]
А добавки к адресу, которые берутся вроде бы ниоткуда, когда на сайте все нормально настроено: http://ваш_сайт/страница_перехода.html&post=абракадабра? Эти малопривлекательные крякозябры цепляются к хвосту благодаря социальным сетям, где лояльный читатель поделился вашим постом. К адресам сайтов добавляются статистика для отслеживания источников (и тут, екалемене, анонимности никакой).
Избавляемся от абракадабры прописыванием 301 редиректа в htaccess:
R ewriteCond %{REQUEST_URI} ^(.*)&post=R ewriteRule ^(.*)&post=(.*)$ $1 [R=301,L]
Аналогично проделываем процедуру с другими видами хвостиков, например, когда после адреса страницы вылазит &bau=fdf=fdwnf,Jf;pg’;bui=ds643dfvv5, видоизменяем код так:
R ewriteCond %{REQUEST_URI} ^(.*)&bau=
R ewriteRule ^(.*)&sa=(.*)$ $1 [R=301,L]
Структура остается прежней, меняем только первую повторяющуюся часть ссылки. А таких «липучек» может быть много, но делать это надо, потому что такие ссылки индексируются поисковыми системами.
Еще одним примером могу привести, когда нужно убрать после фразы index.php другие параметры, сопутствующие в пути из-за скриптов. Если ссылка выглядит как http://ваш_сайт/index.php?list=1, можем очистить хвосты скриптов следующим кодом в htaccess:
R ewriteCond %{QUERY_STRING} ^list=1$
R ewriteRule ^(.*).php?(.*)$ $1.php [R=301,NC,L]
Избавится от дублей с index.php (редиректс index.php на категорию), чтобы после ЧПУ не было больше приставок, поможет следующий код:
R ewriteRule ^(.*)index.php$ $1 [R=301,L]
Теперь вид сайта в адресной строке будет выглядеть как http://ваш_сайт.ru, а не http://ваш_сайт.ru/index.php. Правда, так лучше?
301 редирект со страницы на страницу
Когда нужно сделать 301 редирект с одной страницы на другую можно воспользоваться следующим кодом в нескольких вариациях синтаксиса. Только каждое перенаправлению на новую страницу создается отдельной строкой. Вот как выглядят правила:
Redirect 301 /адрес_страницы_1.html http://ваш_домен.ru/адрес_страницы_2.html
или
Redirect permanent /адрес_страницы_1.html http://ваш_домен.ru/адрес_страницы_2.html
или
RedirectPermanent /адрес_страницы_1.html http://ваш_домен.ru/адрес_страницы_2.html
Обратите внимание, что адрес домена, на который перенаправляется первая страница, может быть совершенно другим. То есть это может быть реальная переадресация со страницы одного сайта на страницу другого.
Redirect в PHP
301 Редирект в PHP используется, когда с созданием в htaccess возникают трудности, а функция в ПХП будет более логичной. Синтаксис permanent redirect в php выглядит так:
header(«HTTP/1.1 301 Moved Permanently»);header(«Location: http://ваш_домен.ru»);die(«Redirect»);
Данный синтаксис сообщает браузеру пользователя с какой страницы и на какой сайт надо сделать перманентный редирект. Стоит учесть что http://ваш_домен.ru — необязательно главная страница одного и того же ресурса, это может быть как отдельная страница, категория, так и совершенно левый домен. Если при написании функции redirect была допущена ошибка, браузер сообщит об этом в окне надпись «Redirect». Примеры функций Permanent Redirect далее.
Как убрать дубль адреса сайта в адресной строке с помощью ПХП
if (strpos($_SERVER[‘REQUEST_URI’], ‘http://ваш_сайт.ru’) !== false)
{
$real_page_url = «http://ваш_сайт.ru».str_replace ( «/http://ваш_сайт.ru», «», $_SERVER[‘REQUEST_URI’] );
header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: $real_page_url»);
die(«Redirect»);
}
Вот такой функцией убирается дублирование адреса вида: http://ваш_сайт.ru/ http://ваш_сайт.ru/страница. Обратите внимание на написание URL в условии — здесь оно пишется как URI. Получается что при выполнении условия нахождения в адресной строке двойной ссылки, браузер должен перенаправить пользователя 301 редиректом на корректную страницу с помощью переменнной $real_page_url, а кривую ссылку считать ложной.
Как убрать дубль страницы со слешем с помощью PHP
if ( ( $_SERVER[‘REQUEST_URI’], — 1, 1 ) == ‘/’ )
{
$requested_url = rtrim($requested_url, ‘/’);
header(«HTTP/1.0 301 Moved Permanently»);
header(«Location: $requested_url»);
die(«Redirect»);
}
Эта простая функция проверяет наличие в адресной строке конечного слеша. И если слеш обнаружен, то он обрезается с помощью перенаправления на ссылку без конечного слеша.
Особенности настройки Permanent Redirect на nginx.
Permanent Redirect на nginx используют не так часто, как на Apache — на это есть множество причин, и основная из них — это сложности настройки этого конфигурационного серверного файла. Да и не все хостинги дают возможность вебмастеру таким способом решать возникшие трудности. Одним из вероятных проблем, которые можно решить 301 редиректом на nginx — это закрытие индексирования через IP и тестовые сервера.
Чтобы настроить permanent redirect на nginx с ip на http://ваш_домен.ru — находим файл nginx.conf, чаще всего размещенный по пути /etc/nginx/nginx.conf. В нем прописываем строки:
server {listen 0.0.00.000:80 default;server_name _;R ewrite ^/(.*)$ http://ваш_домен.ru/$1 permanent;}
Нолями обозначили IP, через который был доступен сайт и порт 80. Таким способом перенаправляем любой запрос по IP на нормальную ссылку. Можно обойтись и без 301 редиректа, а указать закрытие доступа, строкой return 444, вместо R ewrite ^/(.*)$ http://ваш_домен.ru/$1 permanent, и выполнить ‘invoke-rc.d nginx reload’.
Одним из вариантов не ковыряться в nginx является корректная настройка HTTP-сервера, на котором закрывается соединение через IP. Если страницы через доступ по IP попалив индекс, то после таких манипуляций, со временем они исчезнут оттуда. Но как всегда Яндекс может самостоятельно этого не сделать — и тогда опять пишем в поддержку.
301 редирект на nginx с www на без www
server
{
listen 80;
server_name www.имя_сайта.ru;
R ewrite ^ http://имя_сайта.ru$request_uri? permanent;
}
Permanent Redirect 301 на nginx с домена без www на домен с www
server
{
listen 80;
server_name имя_сайта.ru;
R ewrite ^ http://www.имя_сайта.ru$request_uri? permanent;
}
Redirect 301 в nginx.conf со страницы с index.php на адрес без index.php
location = /index.php {
if ($request_uri = /index.php) {
R ewrite ^ http://$host? permanent;#301 redirect
}
fastcgi_pass unix:/tmp/fastcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Как сделать Редирект с http на https без htaccess — ковыряем web.config
Если вы хотите сделать 301 редирект с http на https без htaccess и вам не подходят настройки nginx, возможно, у вас хостинг под управлением Windows? Тогда добавляем вот такие строчки в файл web.config на сервере:
<?xml version=»1.0″ encoding=»UTF-8″?>
<configuration>
<system.webServer>
<R ewrite>
<rules>
<rule name=»Redirect to https» stopProcessing=»true»>
<match url=»(.*)» />
<conditions>
<add input=»{HTTPS}» pattern=»off» ignoreCase=»true» />
</conditions>
<action type=»Redirect» url=»https://{HTTP_HOST}{REQUEST_URI}» redirectType=»Permanent» />
</rule>
</rules>
</R ewrite>
</system.webServer>
</configuration>
Таким образом, будет настроено полное перенаправление домена с http на https, вместе с поддоменами. Но если поддомены трогать запрещено, тогда используем код ниже, вставляя его в тот же web.config:
<?xml version=»1.0″ encoding=»UTF-8″?>
<configuration>
<system.webServer>
<R ewrite>
<rules>
<rule name=»Redirect to https» stopProcessing=»true»>
<match url=»(.*)» />
<conditions>
<add input=»{HTTPS}» pattern=»off» ignoreCase=»true» />
<add input=»{HTTP_HOST}» pattern=»^domain.ru» />
</conditions>
<action type=»Redirect» url=»https://{HTTP_HOST}{REQUEST_URI}» redirectType=»Permanent» />
</rule>
</rules>
</R ewrite>
</system.webServer>
</configuration>
Когда редирект с https на http не работает — что делать?
Не всегда прописывание одного кода на разных сайтах срабатывает с полным успехом. Бывает, возникают ошибки по вине сервера, из-за бардака в конфигурационных файлах или элементарно сделана ошибка в командных строчках.
Когда 301 редирект с https на http не работает — пользуемся другими вариациями кода. В htaccess меняем предыдущий распространенный код на вот такой:
# Redirect HTTPS to HTTP
R ewriteCond %{HTTP:X-Forwarded-Proto} =https
R ewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Если не работает redirect 301 с http:// на https://, в .htaccess прописываем следующее:
R ewriteEngine On
R ewriteCond %{SERVER_PORT} !^443$
R ewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
В случае возникновения циклической реакции — корректируем под такой шаблон:
R ewriteEngine On
R ewriteCond %{HTTPS} off
R ewriteCond %{HTTP:X-Forwarded-Proto} !https
R ewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
301 moved permanently что это и как исправить
Что это за глава? Подумаете вы после прочтения всего того, что было описано выше. А я, в двух словах, поясню. Moved permanently в переводе означает «переехал навсегда». Некоторые вебмастера еще и краем уха не слышали о 301 Moved permanently, тем более о Permanent Redirect, то есть о постоянном редиректе, и ищут ответ, почему у них выбивает такую ошибку на странице. А теперь обращение к тем, кто искал, как исправить 301 moved permanently — начинайте читать статью сначала и находите свой конкретный случай для решения своих задач. А мы переходим к следующему этапу: коротко о том, что такое 302 редирект и зачем он нужен, если есть 301-й.
302 Редирект — временное переселение
Что такое 302 редирект и чем он отличается от 301? Исходя из названия, 302 Temporary redirect (временное перенаправлению) осмелюсь сказать, что этим редиректом мы можем временно перенаправлять робота и посетителей с одной страницы на другую. Сколько может длиться период временного перенаправления — это никем не указано, то есть догажываемся, что до момента, пока это перенаправление будет актуальным. Здесь хочеться уточнить, что после злоупотребления сеошниками временными перенаправлениями и введения санкций от поисковых систем к недобросовестным сайтам, крайне не рекомендуется делать 302 Redirect с одного домена на другой. То есть мы можем решать временные задачи только в пределах одного сайта.
Чем отличается 302 Редирект от 301?
Какая особенность 302 Редиректа? Сравнивая его с 301 можно сказать, что постоянное перенаправление полностью передает весь вес сайта, включая ТИЦ, PR и фильтры, а также дает роботам понять, что страница, с которой идет 301 Редирект больше не нуждается в индексации. То есть из поиска она выпадает и заменяется второй. 302 Редирект ничего подобного не передает странице, на которую делается перенаправление, разве что вторая страница быстрее индексируется. А это означает для робота, что обе страницы доступны и должны присутствовать в поиске.
Для каких нужд используют 302 Redirect? Чаще всего для перенаправления на обновленные данные, пока на «редирекнутой» странице не будет обновлена информация или для придания акцента и большего внимания новой странице. Например, вместо страницы категории для выбора можно переадресовать посетителя сначала на акцию, а по его желанию он может по заметной ссылке перейти снова на страницу категории. Команды для создания 302 Temporary redirect не привожу, так это будет уже совсем иная статья. Пользуемся с умом.
Сервисы для контроля Редиректов
Конечно же, как же без сервисов для отслеживания редиректов на сайтах. За всем нужен глаз да глаз. Поэтому посоветую парочку вариантов для контроля.
Расширения для браузера, которые контролируют редиректы:
- HttpFox для Mozilla;
- HTTP Headers для Google Chrome.
С помощью этих инструментов можно отслеживать перенаправление по адресам, скорость и порядок загрузки страниц. Таким способом можно выявить циклическую цепочку, если она образовалась. На этом закругляю свои длинную статейку, надеюсь, мои советы вам помогут разобраться во всех основных тонкостях перенаправления ссылок.
На чтение 6 мин. Опубликовано 15.12.2019
Код состояния HTTP 301 или Moved Permanently (с англ. — «Перемещено навсегда») — стандартный код ответа HTTP, получаемый в ответ от сервера в ситуации, когда запрошенный ресурс был на постоянной основе перемещён в новое месторасположение, и указывающий на то, что текущие ссылки, использующие данный URL, должны быть обновлены. Адрес нового месторасположения ресурса указывается в поле Location получаемого в ответ заголовка пакета протокола HTTP. В RFC 2616 указано, что:
- если у клиента есть возможность редактирования ссылки, то ему следует обновить все ссылки на запрашиваемый URL;
- запрос кэшируется [1] ;
- в случае, если метод запроса был не HEAD, то содержимое должно включать в себя небольшое гипертекстовое примечание с гиперссылкой на новый URL;
- если код состояния 301 был получен в ответ на запрос любого другого типа, кроме GET или HEAD, то клиент должен спросить пользователя о перенаправлении.
Содержание
- Содержание
- Примеры [ править | править код ]
- Поисковые системы [ править | править код ]
- Ошибка 301 или редирект 301 что это?
- Редирект 301 и для чего он нужен?
- 301 редирект и файл htaccess — как правильно настроить?
Содержание
Примеры [ править | править код ]
Примеры перенаправления для веб-сервера Apache:
Использование файла .htaccess для перенаправления на ресурс, работающий на протоколе шифрования SSL:
Перенаправление с нежелательных сайтов в .htaccess
Пример использования перенаправления в PHP:
Примеры перенаправления для веб-сервера nginx: — Перенаправление с веб-страницы.
Перенаправление с нескольких несуществующих веб-страниц или путей на главную.
Перенаправление с нежелательных сайтов. Помещается внутри server <>.
Перенаправление с www.
Перенаправление со старого домена на новый.
Поисковые системы [ править | править код ]
Google рекомендует использовать код состояния 301 для изменения URL страницы так, как она показана в результатах поиска [2] .
Яндекс также рекомендует использовать код состояния 301 при перенаправлении страниц [3] .
С точки зрения SEO, именно код состояния 301 сообщает поисковым роботам, что нужно объединить два разных адреса в один, где основным будет тот, на который и происходит перенаправление.
Поисковые системы также рекомендуют настраивать данное перенаправление с дополнительных зеркал на основное, например, когда сайт одновременно доступен по адресам с www и без www или использует защищённый протокол (https), но также доступен по http.
Options -Indexes
ErrorDocument 404 /404.php
php_flag session.use_trans_sid off
#php_value display_errors 1
#php_value mbstring.internal_encoding UTF-8
DirectoryIndex index.php index.html
ExpiresActive on
ExpiresByType image/jpeg «access plus 3 day»
ExpiresByType image/gif «access plus 3 day»
ExpiresByType image/png «access plus 3 day»
ExpiresByType text/css «access plus 3 day»
ExpiresByType application/javascript «access plus 3 day»
Здравствуйте, уважаемые друзья и гости блога! Сегодня пойдет речь о такой странной вещи на сайте, как ошибка 301 Moved Permanently (переехал навсегда) или по другому редирект 301.
Думаю. что все с таким сталкивались, а некоторые даже использовали данную «ошибку 301» на своих сайтах. Но не все знают для чего эта ошибка 301 или иначе редирект 301 нужна на сайте? Для чего он, 301 редирект, используется?!
Вот сейчас мы с вами и займемся разбором этого вопроса во всех его подробностях и нюансах …
Ошибка 301 или редирект 301 что это?
Как Вы уже наверное догадались по переводу слов «moved permanently» — это дословно, что сайт или отдельная его страница «переехал навсегда» по адресу на который Вас перекинул ваш браузер. Тут надеюсь все понятно и ясно без лишних пояснений!
Но возникает вопрос. Для чего это сделано вебмастером этого сайта? Почему он поставил редирект 301 и у нас с вами выскакивает иногда 301 ошибка? А все просто! Ошибка 301 появляется, когда сервер перебрасывает нас с уже не работающего сайта на страницу сделанную специально для перенаправления пользователя на рабочий сайт, но просто с некоторой задержкой или вообще на этой странице нужно самостоятельно перейти по ссылке. Вот это в двух словах об ошибке 301.
Теперь самый важный момент, зачем же все таки нужен редирект 301 на сайте …
Редирект 301 и для чего он нужен?
Есть несколько причин у вебмастера, чтобы использовать редирект 301. Вот они:
- Причина первая: Склейка домена с www и без www. При этом все seo показатели сайта и его ссылочный вес будут совмещены и не будут отличаться друг от друга.
- Причина вторая: Если вдруг пришлось сменить домен для сайта. Тогда применяется редирект 301 и он как раз перенаправляет посетителя сайта и поисковые роботы на рабочий домен сайта. Это также позволит вам сохранить все seo показатели вашего переехавшего сайта, как тИЦ, PR, так и своих посетителей.
- Причина третья: Использование редиректа 301 при переносе отдельной страницы сайта на другой ресурс. Бывают и такие случаи, когда это нужно сделать.
- Причина четвертая: Например у Вас есть сайт, где высокий тИЦ и PR и много посетителей. И еще есть другой сайт, который нужно немного пропиарить и прибавить к нему посещения. Тогда Вы просто на просто перенаправляете при помощи того же редирект 301, с одной страницы высоко посещаемого сайта на страницу более низко посещаемого сайта и тем самым выигрываете, добавив ему веса ссылочной массы и соответственно посещений.
Вот основные причины для использования редирект 301 или ошибка 301 Moved Permanently.
Теперь давайте узнаем, как правильно использовать редирект 301 на своем сайте и как настроить его через файл htaccess …
301 редирект и файл htaccess — как правильно настроить?
Как я вам уже говорил выше — 301 редирект это переадресация посетителя и поискового робота на сайт или отдельно взятую страницу сайта на URL адрес отличный от первоначально запрошенного в браузере.
Для чего это нужно мы с вами также уже разобрали. Но как же это сделать правильно на нашем сайте используя файл htaccess? Сейчас я вам все подробно объясню и приведу примеры внесения изменений в файл htaccess для вашего сайта!
- Перенаправление домена с www на без-www
или вот более понятный синтаксис:
- 301 редирект запросов без-www на домен с www префиксом
- 301 редирект старого домена на новый в фале htaccess
- Если вам нужно, чтобы вместо rewrite.htm загружался файл rewrite.html, добавьте в файл htaccess вот это:
- Чтобы заменить все .htm файлы на .html внесите в файл htaccess:
- Варианты, когда не нужно использовать 301 редирект на вашем сайте:
- Если реализация 301 редиректа невозможна или она займет неоправданно много времени.
- Если контент вашего сайта дублируется на двух или нескольких страницах, но эти страницы должны быть доступны в поиске пользователю ввиду некоторых отличий (на пример, выбор какого-то товара).
- Если одна страница имеет несколько URL адресов (сортировка каталога товаров по различным категориям или критериям).
- Для кросс-доменов. Это, когда контент сайта на двух URL адресах дублируется, но он должен быть доступен на каждом из двух или нескольких доменах.
Этот материал посвящен выходу 301-ой статьи на моем блоге!
Может вам интересно узнать, что такое ошибка 503 и как ее устранить?
На этом пока все. Всем удачи и благополучия!
Команда SeoProfy подготовила пошаговое руководство для вебмастеров, в котором рассказала и показала все детали и нюансы использования 301 редиректа.
Редирект — это способ перенаправить пользователей и поисковых систем на другой URL отличный от того, который они первоначально запросили. Ниже приведены описания некоторых из наиболее часто используемых видов перенаправления.
301 Moved Permanently
301 редирект является постоянным редиректом, который передает около 90-99% ссылочного веса. Данный редирект указывает, что страница перемещена по новому адресу и старый url следует считать устаревшим.
302 Found (HTTP 1.1) / Moved Temporarily (HTTP 1.0)
302 редирект — временный редирект. Данный редирект передает 0% от ссылочного веса и, в большинстве случаев, не должен использоваться. На данный момент интернет работает по протоколу HTTP, который и определяет, как обрабатывать URL-адреса. В двух версиях этого протокола этот ответ сервера имеет разный статус ответа:
- HTTP 1.0: 302 ответ сервера это «Moved Temporarily » — текущий документ временно перемещен на другой URL.
- HTTP 1.1: произошло изменение ответа сервера на «Found» — текущий документ найден.
307 Moved Temporarily (HTTP 1.1 Only)
307 редирект в протоколе HTTP 1.1 стал приемником 302 редиректа. В то время как основные поисковые боты начнут рассматривать его как аналог 302, для почти всех случаев лучше всего использовать 301. Исключением из этого правила является, когда контент действительно переехал только временно (например, во время технического обслуживания) и поисковые системы уже понимают, что ваш сервер совместим с HTTP 1.1. Но, так как практически невозможно определить, действительно ли поисковые системы поняли, что ваш сервер совместим с этим новым протоколом, то лучше использовать 302 редирект для контента, который был временно перемещен.
Другие виды редиректов
Существуют также и другие виды редиректов: Meta Refresh или с помощью JavaScript — которые выполняются на уровне страницы, а не на уровне сервера. Вот как выглядит типичный редирект Meta Refresh:
meta http-equiv="refresh" content="5;url=http://www.seoprofy.ua/" />
Но, данные редиректы желательно использовать крайне редко, так как ими очень любят злоупотреблять спамеры и дорвейщики. Кроме этого, при использовании этих редиректов ссылочный вес почти не передается.
Канонизация домена сайта или как склеить домен?
Чтобы склеить домен с www на без www:
RewriteCond %{HTTP_HOST} ^www.site.com$ [NC]
RewriteRule ^(.*)$ http://site.com/$1 [R=301,L]
Для склейки с без www на с www:
RewriteCond %{HTTP_HOST} ^site.com$ [NC]
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]
Для того чтобы правильно выбрать на какой из вариантов склеивать, желательно посмотреть:
- который из этих вариантов больше находится в ТОПе
- у какого из вариантов больше страниц в индексе
Канонизация слеша в конце урла
При проектирование сайта важно определиться с одним форматом использование слеша в конце урла, так как для поисковых систем 2 урла вида
- http://www.site.com/cat1/
- http://www.site.com/cat1
являются разными. Поэтому после того как вы определились, как именно у вас будет на сайте, необходимо прописать следующие редиректы:
Для того чтобы удалить слэш в конце:
RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} /$ [NC]
RewriteRule ^(.*)(/)$ $1 [L,R=301]
Для того чтобы добавить слэш в конец адресной строки:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
Редирект одной страницы на другую страницу:
Redirect 301 /oldpage.html http://www.site.com/newpage.html
Редирект для дублей главной страницы:
Этот код гарантирует, что любой адрес домашней страницы, который включает несколько версий прямых ссылок имени страницы, например, default.htm или index.html, будет перенаправлен на каноническую главную страницу, http://www.site.com:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /([^/]+/)*(default|index|main).(html|php|htm) HTTP/ [NC]
RewriteRule ^(([^/]+/)*)(default|main|index).(html|php|htm)$ http://www.site.com/$1 [L,R=301]
Редирект каталога
Если структура каталога у вас отображается в url-ле, то при перекаталогизации у вас, соответственно, будут изменяться и url. В таком случае необходимо прописать следующий редирект:
RewriteRule ^(.*)/old-catalog/(.*)$ $1/new-catalog/$2 [R=301,L]
Но, если url старого каталога начинается сразу после домена: www.site.com/old-catalog/, то необходимо воспользоваться следующим кодом
RewriteRule old-catalog /(.*) / old-catalog /$1 [R=301,L]
Редирект при смене расширения файлов
Если вы вдруг переехали на другую платформу или CMS, и при этом у url-ов изменились только расширение, то в этой случае вам поможет вот такой редирект:
RedirectMatch 301 (.*).php$ http://www.site.com$1.html
Примеры использования для защиты сайта от множественных дублей страниц
Редирект с разных доменов и субдоменов
Если вы купили несколько доменов в разных доменных зонах или разрабатывали новый сайт и повесили его на субдомен, а этот субдомен забыли закрыть от индексации, то необходимо сделать редирект на основной домен:
RewriteCond %{HTTP_HOST} !^www.site.com
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]
Таким образом, все домены типа www.site.ru, www.site.net, test.site.com будут переадресовываться на сайт www.site.com.
Как удалить несколько слешей/тире в урле
Иногда «по случайности» в урле могут появиться по несколько слешей, например, www.site.com/catalog////page-1.html. В таких случаях необходимо делать 301 редирект на страницу с одним слешем www.site.com/catalog/page-1.html :
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
Аналогично, можно склеить в урле несколько дефисов в один: с www.site.com/catalog/page—1.html на www.site.com/catalog/page-1.html:
RewriteCond %{REQUEST_URI} ^(.*)—(.*)$
RewriteRule . %1-%2 [R=301,L]
Как сделать редирект с любого урла на url только в нижнем регистре
Поскольку поисковыми системами регистр букв учитывается, то при проектировании сайта желательно, чтобы все урлы были в нижнем регистре. Однако, если вы изначально упустили данный момент, то лучше всего воспользоваться следующим кодом для редиректа на уровне php-скрипта:
$lowerURI=strtolower($_SERVER[’REQUEST_URI’]);
if($_SERVER[’REQUEST_URI’]!=$lowerURI)
{
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://" . $_SERVER[’HTTP_HOST’] . $lowerURI);
exit();
}
Как переехать на новый домен? Оптимальная стратегия 301 редиректа
Оптимальной стратегией переезда на новый домен, учитывая пожелания 2-ух основных поисковых систем рунета Яндекс и Google, это:
- постраничный 301 редирект со старого сайта на новый.
- при этом для файла robots.txt редирект не делаем, а прописываем в нем директиву Host на новый домен.
Тогда код для настройки редиректа на старом сайте может иметь следующий вид:
RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC]
RewriteRule ^([^/]+) $1 [L]
RewriteCond %{HTTP_HOST} !^www.site.com
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]
а файл robots.txt для старого сайта:
User-agent: Yandex
Disallow:
Host: newsite.com
Генерация 301 редиректов
Если вы не очень технически подкованы, то можно воспользоваться сервисами генерации базовых редиректов:
http://www.webconfs.com/htaccess-redirect-generator.php
http://www.rapidtables.com/web/tools/redirect-generator.htm
На таких сервисах можно только подставлять собственные данные и сразу получать готовый код для редиректов между доменами, директориями или урлами.
Как проверить 301 редирект
После каждого изменение логики работы 301 редиректа необходимо проверять работоспособность сайта:
- вообще ли работает сайт: зайти на главную страницу)
- походить по основным разделам и страницам сайта
Также для более тщательной проверки отработки редиректов можно использовать следующие сервисы:
http://bertal.ru — максимально подробная информация по ответам сервера.
http://www.internetmarketingninjas.com/header-checker/.
Как и когда лучше использовать 301 редирект vs Canonical
Хотя есть некоторые нюансы, Google предоставляет некоторые четкие правила, для того чтобы он понимал, что именно мы хотим сказать. В очень простой ситуации вот, как понимают данные инструкции поисковые системы:
301 — Эй, Поисковики: моя страница уже не здесь, и она навсегда переехала на новую страницу. Пожалуйста, удалите старую страницу из индекса и передайте её вес на новую страницу.
Canonical — Эй, Поисковики (так для большинства поисковых систем): у меня есть несколько версий этой страницы (или содержания), пожалуйста, индексируйте только ту версию страницы, на которую стоит canonical. Я буду держать другие страницы доступными для людей, чтобы они могли их видеть, но, Поисковик, не включай их в свой индекс и пожалуйста, передай вес на мою предпочтительную страницу.
Когда лучше использовать 301 редирект
- По умолчанию — это предпочтительный метод
- Для страниц: если страница навсегда переехала или была заменена на новый адрес
- Для доменов: если сайт переехал на новый домен (продажа сайта, ребрендинг и т.д.)
- Для 404 страниц и страниц с контентом, который потерял свою актуальность (при условии соответствующего содержания). Например, если удален товар из определенного каталога, то можно сделать редирект на похожий товар или на url-категории, к которой принадлежал данный товар.
Когда лучше не использовать 301 редирект?
- Когда 301 редиректы не могут быть реализованы, или их внедрение займет слишком много времени
- Дублированный контент, но вы хотите сохранить обе страницы для людей (например, показывать на разных урлах разный размер одежды)
- Страницы с несколькими разными url по сути одной страницы (например, сортировки каталога, отслеживания партнерских ссылок, …)
- Кросс-доменов, когда оба сайта похожи, но похожий контент нужно оставить на каждом из доменов.
Итого
В общем оба варианта позволяют сохранить ссылочный вес, и они будут аналогично рассматриваться Google. Но в целом, 301 редирект является более предпочтительным методом.
Ошибки при использовании редиректов
- Любой многошаговый редирект. Если есть возможность, то желательно не допускать многошаговых редиректов, чтобы он и быстрее сработал, и передалось максимум ссылочного веса.
- Использование неправильного типа редиректов. При выборе типа редиректа необходимо учитывать нюансы каждого из них.
- Внедрение внутренних редиректов без смены ссылок на новые адреса. После внедрения всех редиректов у себя на сайте, необходимо проверить, чтобы каждая страница вашего сайта уже ссылалась на новую и внутри сайта у вас не было ссылок на страницы, с которых происходит редирект.
- Редирект на нерелевантные страницы/контент. Редирект всегда желательно проставлять на максимально релевантную страницу: или на похожую страницу, или на ветку каталога/раздела, к которому принадлежала данная страница.
- Неправильный выбор использования rel=canonical vs 301 редирект.
- Редирект, конечной точкой которого является не 200-я страница. Редирект должен вести на правильно работающую страницу с 200 ответом сервера. Иначе, желательно не сбивать поисковых роботов и отдавать 404 ответ.
- Редирект robots.txt. Так как, например, нужно прописывать директиву Host для Яндекса при склейке доменов.
Надеемся, что данное руководство станет вам шпаргалкой и помощником для использования 301-го редиректа для вашего сайта.
Содержание
Составили подробный классификатор кодов состояния HTTP. Добавляйте в закладки, чтобы был под рукой, когда понадобится.
Что такое код ответа HTTP
Когда посетитель переходит по ссылке на сайт или вбивает её в поисковую строку вручную, отправляется запрос на сервер. Сервер обрабатывает этот запрос и выдаёт ответ — трехзначный цифровой код HTTP от 100 до 510. По коду ответа можно понять реакцию сервера на запрос.
Первая цифра в ответе обозначает класс состояния, другие две — причину, по которой мог появиться такой ответ.
Как проверить код состояния страницы
Проверить коды ответа сервера можно вручную с помощью браузера и в панелях веб‑мастеров: Яндекс.Вебмастер и Google Search Console.
В браузере
Для примера возьмём Google Chrome.
-
Откройте панель разработчика в браузере клавишей F12, комбинацией клавиш Ctrl + Shift + I или в меню браузера → «Дополнительные инструменты» → «Инструменты разработчика». Подробнее об этом рассказывали в статье «Как открыть исходный код страницы».
-
Переключитесь на вкладку «Сеть» в Инструментах разработчика и обновите страницу:
В Яндекс.Вебмастере
Откройте инструмент «Проверка ответа сервера» в Вебмастере. Введите URL в специальное поле и нажмите кнопку «Проверить»:
Как добавить сайт в Яндекс.Вебмастер и другие сервисы Яндекса
В Google Search Console
Чтобы посмотреть код ответа сервера в GSC, перейдите в инструмент проверки URL — он находится в самом верху панели:
Введите ссылку на страницу, которую хотите проверить, и нажмите Enter. В результатах проверки нажмите на «Изучить просканированную страницу» в блоке «URL есть в индексе Google».
А затем в открывшемся окне перейдите на вкладку «Подробнее»:
Теперь расскажем подробнее про все классы кодов состояния HTTP.
1* класс кодов (информационные сообщения)
Это системный класс кодов, который только информирует о процессе передачи запроса. Такие ответы не являются ошибкой, хотя и могут отображаться в браузере как Error Code.
100 Continue
Этот ответ сообщает, что полученные сведения о запросе устраивают сервер и клиент может продолжать отправлять данные. Такой ответ может требоваться клиенту, если на сервер отправляется большой объём данных.
101 Switching Protocols
Сервер одобрил переключение типа протокола, которое запросил пользователь, и в настоящий момент выполняет действие.
102 Processing
Запрос принят — он находится в обработке, и на это понадобится чуть больше времени.
103 Checkpoint
Контрольная точка — используется в запросах для возобновления после прерывания запросов POST или PUT.
POST отправляет данные на сервер, PUT создает новый ресурс или заменяет существующий данными, представленными в теле запроса.
Разница между ними в том, что PUT работает без изменений: повторное его применение даёт такой же результат, что и в первый раз, а вот повторный вызов одного и того же метода POST часто меняет данные.
Пример — оформленный несколько раз интернет‑заказ. Такое часто происходит как раз по причине неоднократного использования запроса PUT.
105 Name Not Resolved
Не удается преобразовать DNS‑адрес сервера — это означает ошибку в службе DNS. Эта служба преобразует IP‑адреса в знакомые нам доменные имена.
2* класс кодов (успешно обработанные запросы)
Эти коды информируют об успешности принятия и обработки запроса. Также сервер может передать заголовки или тело сообщений.
200 ОК
Все хорошо — HTTP‑запрос успешно обработан (не ошибка).
201 Created
Создано — транзакция успешна, сформирован новый ресурс или документ.
202 Accepted
Принято — запрос принят, но ещё не обработан.
203 Non‑Authoritative Information
Информация не авторитетна — запрос успешно обработан, но передаваемая информация была взята не из первичного источника (данные могут быть устаревшими).
204 No Content
Нет содержимого — запрос успешно обработан, однако в ответе только заголовки без контента сообщения. Не нужно обновлять содержимое документа, но можно применить к нему полученные метаданные.
205 Reset Content
Сбросить содержимое. Запрос успешно обработан — но нужно сбросить введенные данные. Страницу можно не обновлять.
206 Partial Content
Частичное содержимое. Сервер успешно обработал часть GET‑запроса, а другую часть вернул.
GET — метод для чтения данных с сайта. Он говорит серверу, что клиент хочет прочитать какой‑то документ.
Представим интернет‑магазин и страницы каталога. Фильтры, которые выбирает пользователь, передаются благодаря методу GET. GET‑запрос работает с получением данных, а POST‑запрос нужен для отправки данных.
При работе с подобными ответами следует уделить внимание кэшированию.
207 Multi‑Status
Успешно выполнено несколько операций — сервер передал результаты выполнения нескольких независимых операций. Они появятся в виде XML‑документа с объектом multistatus.
226 IM Used
Успешно обработан IM‑заголовок (специальный заголовок, который отправляется клиентом и используется для передачи состояния HTTP).
3* класс кодов (перенаправление на другой адрес)
Эти коды информируют, что для достижения успешной операции нужно будет сделать другой запрос, возможно, по другому URL.
300 Multiple Choices
Множественный выбор — сервер выдает список нескольких возможных вариантов перенаправления (максимум — 5). Можно выбрать один из них.
301 Moved Permanently
Окончательно перемещено — страница перемещена на другой URL, который указан в поле Location.
302 Found/Moved
Временно перемещено — страница временно перенесена на другой URL, который указан в поле Location.
303 See Other
Ищите другую страницу — страница не найдена по данному URL, поэтому смотрите страницу по другому URL, используя метод GET.
304 Not Modified
Модификаций не было — с момента последнего визита клиента изменений не было.
305 Use Proxy
Используйте прокси — запрос к нужному ресурсу можно сделать только через прокси‑сервер, URL которого указан в поле Location заголовка.
306 Unused
Зарезервировано. Код в настоящий момент не используется.
307 Temporary Redirect
Временное перенаправление — запрашиваемый ресурс временно доступен по другому URL.
Этот код имеет ту же семантику, что код ответа 302 Found, за исключением того, что агент пользователя не должен изменять используемый метод HTTP: если в первом запросе использовался POST, то во втором запросе также должен использоваться POST.
308 Resume Incomplete
Перемещено полностью (навсегда) — запрашиваемая страница была перенесена на новый URL, указанный в поле Location заголовка. Метод запроса (GET/POST) менять не разрешается.
4* класс кодов (ошибки на стороне клиента)
Эти коды указывают на ошибки со стороны клиентов.
400 Bad Request
Неверный запрос — запрос клиента не может быть обработан, так как есть синтаксическая ошибка (возможно, опечатка).
401 Unauthorized
Не пройдена авторизация — запрос ещё в обработке, но доступа нет, так как пользователь не авторизован.
Для доступа к запрашиваемому ресурсу клиент должен представиться, послав запрос, включив при этом в заголовок сообщения поле Authorization.
402 Payment Required
Требуется оплата — зарезервировано для использования в будущем. Код предусмотрен для платных пользовательских сервисов, а не для хостинговых компаний.
403 Forbidden
Запрещено — запрос принят, но не будет обработан, так как у клиента недостаточно прав. Может возникнуть, когда пользователь хочет открыть системные файлы (robots, htaccess) или не прошёл авторизацию.
404 Not Found
Не найдено — запрашиваемая страница не обнаружена. Сервер принял запрос, но не нашёл ресурса по указанному URL (возможно, была ошибка в URL или страница была перемещена).
405 Method Not Allowed
Метод не разрешён — запрос был сделан методом, который не поддерживается данным ресурсом. Сервер должен предложить доступные методы решения в заголовке Allow.
406 Not Acceptable
Некорректный запрос — неподдерживаемый поисковиком формат запроса (поисковый робот не поддерживает кодировку или язык).
407 Proxy Authentication Required
Нужно пройти аутентификацию прокси — ответ аналогичен коду 401, только нужно аутентифицировать прокси‑сервер.
408 Request Timeout
Тайм‑аут запроса — запрос клиента занял слишком много времени. На каждом сайте существует свое время тайм‑аута — проверьте интернет‑соединение и просто обновите страницу.
409 Conflict
Конфликт (что‑то пошло не так) — запрос не может быть выполнен из‑за конфликтного обращения к ресурсу (несовместимость двух запросов).
410 Gone
Недоступно — ресурс раньше был размещён по указанному URL, но сейчас удалён и недоступен (серверу неизвестно месторасположение).
411 Length Required
Добавьте длины — сервер отклоняет отправляемый запрос, так как длина заголовка не определена, и он не находит значение Content‑Length.
Нужно исправить заголовки на сервере, и в следующий раз робот сможет проиндексировать страницу.
412 Precondition Failed
Предварительное условие не выполнено — стоит проверить правильность HTTP‑заголовков данного запроса.
413 Request Entity Too Large
Превышен размер запроса — перелимит максимального размера запроса, принимаемого сервером. Браузеры поддерживают запросы от 2 до 8 килобайт.
414 Request‑URI Too Long
Превышена длина запроса — сервер не может обработать запрос из‑за длинного URL. Такая ошибка может возникнуть, например, когда клиент пытается передать чересчур длинные параметры через метод GET, а не POST.
415 Unsupported Media Type
Формат не поддерживается — сервер не может принять запрос, так как данные подгружаются в некорректном формате, и сервер разрывает соединение.
416 Requested Range Not Satisfiable
Диапазон не поддерживается — ошибка возникает в случаях, когда в самом HTTP‑заголовке прописывается некорректный байтовый диапазон.
Корректного диапазона в необходимом документе может просто не быть, или есть опечатка в синтаксисе.
417 Expectation Failed
Ожидания не оправдались — прокси некорректно идентифицировал содержимое поля «Expect: 100‑Continue».
418 I’m a teapot
Первоапрельская шутка разработчиков в 1998 году. В расшифровке звучит как «я не приготовлю вам кофе, потому что я чайник». Не используется в работе.
422 Unprocessable Entity
Объект не обработан — сервер принял запрос, но в нём есть логическая ошибка. Стоит посмотреть в сторону семантики сайта.
423 Locked
Закрыто — ресурс заблокирован для выбранного HTTP‑метода. Можно перезагрузить роутер и компьютер. А также использовать только статистический IP.
424 Failed Dependency
Неуспешная зависимость — сервер не может обработать запрос, так как один из зависимых ресурсов заблокирован.
Выполнение запроса напрямую зависит от успешности выполнения другой операции, и если она не будет успешно завершена, то вся обработка запроса будет прервана.
425 Unordered Collection
Неверный порядок в коллекции — ошибка возникает, если клиент указал номер элемента в неупорядоченном списке или запросил несколько элементов в порядке, отличном от серверного.
426 Upgrade Required
Нужно обновление — в заголовке ответа нужно корректно сформировать поля Upgrade и Connection.
Этот ответ возникает, когда серверу требуется обновление до SSL‑протокола, но клиент не имеет его поддержки.
428 Precondition Required
Нужно предварительное условие — сервер просит внести в запрос информацию о предварительных условиях обработки данных, чтобы выдавать корректную информацию по итогу.
429 Too Many Requests
Слишком много запросов — отправлено слишком много запросов за короткое время. Это может указывать, например, на попытку DDoS‑атаки, для защиты от которой запросы блокируются.
431 Request Header Fields Too Large
Превышена длина заголовков — сервер может и не отвечать этим кодом, вместо этого он может просто сбросить соединение.
Исправляется это с помощью сокращения заголовков и повторной отправки запроса.
434 Requested Host Unavailable
Адрес запрашиваемой страницы недоступен.
444 No Response
Нет ответа — код отображается в лог‑файлах, чтобы подтвердить, что сервер никак не отреагировал на запрос пользователя и прервал соединение. Возвращается только сервером nginx.
Nginx — программное обеспечение с открытым исходным кодом. Его используют для создания веб‑серверов, а также в качестве почтового или обратного прокси‑сервера. Nginx решает проблему падения производительности из‑за роста трафика.
449 Retry With
Повторите попытку — ошибка говорит о необходимости скорректировать запрос и повторить его снова. Причиной становятся неверно указанные параметры (возможно, недостаточно данных).
450 Blocked by Windows Parental Controls
Заблокировано родительским контролем — говорит о том, что с компьютера попытались зайти на заблокированный ресурс. Избежать этой ошибки можно изменением параметров системы родительского контроля.
451 Unavailable For Legal Reasons
Недоступно по юридическим причинам — доступ к ресурсу закрыт, например, по требованию органов государственной власти или по требованию правообладателя в случае нарушения авторских прав.
456 Unrecoverable Error
Неустранимая ошибка — при обработке запроса возникла ошибка, которая вызывает некорректируемые сбои в таблицах баз данных.
499 Client Closed Request
Запрос закрыт клиентом — нестандартный код, используемый nginx в ситуациях, когда клиент закрыл соединение, пока nginx обрабатывал запрос.
5* класс кодов (ошибки на стороне сервера)
Эти коды указывают на ошибки со стороны серверов.
При использовании всех методов, кроме HEAD, сервер должен вернуть в теле сообщения гипертекстовое пояснение для пользователя. И его можно использовать в работе.
500 Internal Server Error
Внутренняя ошибка сервера — сервер столкнулся с неким условием, из‑за которого не может выполнить запрос.
Проверяйте, корректно ли указаны директивы в системных файлах (особенно htaccess) и нет ли ошибки прав доступа к файлам. Обратите внимание на ошибки внутри скриптов и их медленную работу.
501 Not Implemented
Не выполнено — код отдается, когда сам сервер не может идентифицировать метод запроса.
Сами вы эту ошибку не исправите. Устранить её может только сервер.
502 Bad Gateway
Ошибка шлюза — появляется, когда сервер, выступая в роли шлюза или прокси‑сервера, получил ответное сообщение от вышестоящего сервера о несоответствии протоколов.
Актуально исключительно для прокси и шлюзовых конфигураций.
503 Service Unavailable
Временно не доступен — сервер временно не имеет возможности обрабатывать запросы по техническим причинам (обслуживание, перегрузка и прочее).
В поле Retry‑After заголовка сервер укажет время, через которое можно повторить запрос.
504 Gateway Timeout
Тайм‑аут шлюза — сервер, выступая в роли шлюза или прокси‑сервера, не получил ответа от вышестоящего сервера в нужное время.
Исправить эту ошибку самостоятельно не получится. Здесь дело в прокси, часто — в веб‑сервере.
Первым делом просто обновите веб‑страницу. Если это не помогло, нужно почистить DNS‑кэш. Для этого нажмите горячие клавиши Windows+R и введите команду cmd (Control+пробел). В открывшемся окне укажите команду ipconfig / flushdns и подтвердите её нажатием Enter.
505 HTTP Version Not Supported
Сервер не поддерживает версию протокола — отсутствует поддержка текущей версии HTTP‑протокола. Нужно обеспечить клиента и сервер одинаковой версией.
506 Variant Also Negotiates
Неуспешные переговоры — с такой ошибкой сталкиваются, если сервер изначально настроен неправильно. По причине ошибочной конфигурации выбранный вариант указывает сам на себя, из‑за чего процесс и прерывается.
507 Insufficient Storage
Не хватает места для хранения — серверу недостаточно места в хранилище. Нужно либо расчистить место, либо увеличить доступное пространство.
508 Loop Detected
Обнаружен цикл — ошибка означает провал запроса и выполняемой операции в целом.
509 Bandwidth Limit Exceeded
Превышена пропускная способность — используется при чрезмерном потреблении трафика. Владельцу площадки следует обратиться к своему хостинг‑провайдеру.
510 Not Extended
Не продлён — ошибка говорит, что на сервере отсутствует нужное для клиента расширение. Чтобы исправить проблему, надо убрать часть неподдерживаемого расширения из запроса или добавить поддержку на сервер.
511 Network Authentication Required
Требуется аутентификация — ошибка генерируется сервером‑посредником, к примеру, сервером интернет‑провайдера, если нужно ввести пароль для получения доступа к сети через платную точку доступа.
Здравствуйте, уважаемые друзья и гости блога! Сегодня пойдет речь о такой странной вещи на сайте, как ошибка 301 Moved Permanently (переехал навсегда) или по другому редирект 301.
Думаю. что все с таким сталкивались, а некоторые даже использовали данную “ошибку 301” на своих сайтах. Но не все знают для чего эта ошибка 301 или иначе редирект 301 нужна на сайте? Для чего он, 301 редирект, используется?!
Вот сейчас мы с вами и займемся разбором этого вопроса во всех его подробностях и нюансах …
Ошибка 301 или редирект 301 что это?
Как Вы уже наверное догадались по переводу слов “moved permanently” – это дословно, что сайт или отдельная его страница “переехал навсегда” по адресу на который Вас перекинул ваш браузер. Тут надеюсь все понятно и ясно без лишних пояснений!
Но возникает вопрос. Для чего это сделано вебмастером этого сайта? Почему он поставил редирект 301 и у нас с вами выскакивает иногда 301 ошибка? А все просто! Ошибка 301 появляется, когда сервер перебрасывает нас с уже не работающего сайта на страницу сделанную специально для перенаправления пользователя на рабочий сайт, но просто с некоторой задержкой или вообще на этой странице нужно самостоятельно перейти по ссылке. Вот это в двух словах об ошибке 301.
Теперь самый важный момент, зачем же все таки нужен редирект 301 на сайте …
Редирект 301 и для чего он нужен?
Есть несколько причин у вебмастера, чтобы использовать редирект 301. Вот они:
- Причина первая: Склейка домена с www и без www. При этом все seo показатели сайта и его ссылочный вес будут совмещены и не будут отличаться друг от друга.
- Причина вторая: Если вдруг пришлось сменить домен для сайта. Тогда применяется редирект 301 и он как раз перенаправляет посетителя сайта и поисковые роботы на рабочий домен сайта. Это также позволит вам сохранить все seo показатели вашего переехавшего сайта, как тИЦ, PR, так и своих посетителей.
- Причина третья: Использование редиректа 301 при переносе отдельной страницы сайта на другой ресурс. Бывают и такие случаи, когда это нужно сделать.
- Причина четвертая: Например у Вас есть сайт, где высокий тИЦ и PR и много посетителей. И еще есть другой сайт, который нужно немного пропиарить и прибавить к нему посещения. Тогда Вы просто на просто перенаправляете при помощи того же редирект 301, с одной страницы высоко посещаемого сайта на страницу более низко посещаемого сайта и тем самым выигрываете, добавив ему веса ссылочной массы и соответственно посещений.
Вот основные причины для использования редирект 301 или ошибка 301 Moved Permanently.
Теперь давайте узнаем, как правильно использовать редирект 301 на своем сайте и как настроить его через файл htaccess …
301 редирект и файл htaccess – как правильно настроить?
Как я вам уже говорил выше – 301 редирект это переадресация посетителя и поискового робота на сайт или отдельно взятую страницу сайта на URL адрес отличный от первоначально запрошенного в браузере.
Для чего это нужно мы с вами также уже разобрали. Но как же это сделать правильно на нашем сайте используя файл htaccess? Сейчас я вам все подробно объясню и приведу примеры внесения изменений в файл htaccess для вашего сайта!
- Перенаправление домена с www на без-www
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.(.*) [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
или вот более понятный синтаксис:
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC] RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
- 301 редирект запросов без-www на домен с www префиксом
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^domain.com$ [NC] RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
Альтернативный вариант:
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} !^www.(.*) [NC] RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
- 301 редирект старого домена на новый в фале htaccess
Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]
- Если вам нужно, чтобы вместо rewrite.htm загружался файл rewrite.html, добавьте в файл htaccess вот это:
RewriteEngine on RewriteBase / RewriteRule ^rewrite.htm$ rewrite.html [R=permanent]
- Чтобы заменить все .htm файлы на .html внесите в файл htaccess:
RewriteEngine on RewriteBase / RewriteRule ^(.*).htm$ $1.html [R=permanent]
- Варианты, когда не нужно использовать 301 редирект на вашем сайте:
- Если реализация 301 редиректа невозможна или она займет неоправданно много времени.
- Если контент вашего сайта дублируется на двух или нескольких страницах, но эти страницы должны быть доступны в поиске пользователю ввиду некоторых отличий (на пример, выбор какого-то товара).
- Если одна страница имеет несколько URL адресов (сортировка каталога товаров по различным категориям или критериям).
- Для кросс-доменов. Это, когда контент сайта на двух URL адресах дублируется, но он должен быть доступен на каждом из двух или нескольких доменах.
Этот материал посвящен выходу 301-ой статьи на моем блоге!
Может вам интересно узнать, что такое ошибка 503 и как ее устранить?
На этом пока все. Всем удачи и благополучия!
From Wikipedia, the free encyclopedia
HTTP 301 is the HTTP response status code for 301 Moved Permanently. It is used for permanent redirecting, meaning that links or records returning this response should be updated. The new URL should be provided in the Location field, included with the response. The 301 redirect is considered a best practice for upgrading users from HTTP to HTTPS.
RFC 2616[1] states that:
- If a client has link-editing capabilities, it should update all references to the Request URL.
- The response is cacheable unless indicated otherwise.
- Unless the request method was HEAD, the entity should contain a small hypertext note with a hyperlink to the new URL(s).
- If the 301 status code is received in response to a request of any type other than GET or HEAD, the client must ask the user before redirecting.
Examples[edit]
Client request:
GET /index.php HTTP/1.1 Host: www.example.org
Server response:
HTTP/1.1 301 Moved Permanently Location: https://www.example.org/index.asp
Using an .htaccess file[edit]
To fix problems with non-existing files or directories using a distributed .htaccess file:
Redirect 301 /calendar.html /calendar/ Redirect 301 /not_found.html /
Here is an example using a .htaccess file to redirect a non-secure URL to a secure address without the leading «www»:
RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] RewriteCond %{HTTPS} on RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://example.com/$1 [R,L]
100% Completed
Static HTML[edit]
A custom directory redirect, using an index.html file:
<meta http-equiv="refresh" content="0; url=/" /> <p><a href="/">Home</a></p>
Using programming languages[edit]
Here is an example using Perl CGI.pm:
print redirect("https://example.com/newpage.html");
Here is an example using a PHP redirect:
<?php header("Location: https://example.com/newpage.html", true, 301); exit;
Here is one way to redirect using Express.js:
app.all("/old/url", (req, res) => { res.redirect(301, "/new/url"); });
Caching server[edit]
Equivalently simple for an nginx configuration:
location /old/urlblocked/ { return 301 /new/url/stay standard structure }
On
Search engines[edit]
Both Bing and Google recommend using a 301 redirect to change the URL of a page as it is shown in search engine results, providing that URL will permanently change and is not due to be changed again any time soon.[2][3]
See also[edit]
- Hypertext Transfer Protocol
- List of HTTP status codes
- URL redirection
References[edit]
- ^ Fielding; et al. (June 1999). 10.3.2 301 Moved Permanently. IETF. p. 61. sec. 10.3.2. doi:10.17487/RFC2616. RFC 2616.
- ^ «Site Move Tool». Bing Webmaster Help & How-to.
- ^ «301 redirects». Google Webmaster Tools Help.
Уровень сложности
Простой
Время на прочтение
9 мин
Количество просмотров 15K
Привет! Меня зовут Ивасюта Алексей, я техлид команды Bricks в Авито в кластере Architecture. Я решил написать цикл статей об истории и развитии HTTP, рассмотреть каждую из его версий и проблемы, которые они решали и решают сейчас.
Весь современный веб построен на протоколе HTTP. Каждый сайт использует его для общения клиента с сервером. Между собой сервера тоже часто общаются по этому протоколу. На данный момент существует четыре его версии и все они до сих пор используются. Поэтому статьи будут полезны инженерам любых уровней и специализаций, и помогут систематизировать знания об этой важной технологии.
Что такое HTTP
HTTP — это гипертекстовый протокол передачи данных прикладного уровня в сетевой модели OSI. Его представил миру Тим Бернерс-Ли в марте 1991 года. Главная особенность HTTP — представление всех данных в нём в виде простого текста. Через HTTP разные узлы в сети общаются между собой. Модель клиент-серверного взаимодействия классическая: клиент посылает запрос серверу, сервер обрабатывает запрос и возвращает ответ клиенту. Полученный ответ клиент обрабатывает и решает: прекратить взаимодействие или продолжить отправлять запросы.
Ещё одна особенность: протокол не сохраняет состояние между запросами. Каждый запрос от клиента для сервера — отдельная транзакция. Когда поступают два соседних запроса, сервер не понимает, от одного и того же клиента они поступили, или от разных. Такой подход значительно упрощает построение архитектуры веб-серверов.
Как правило, передача данных по HTTP осуществляется через открытое TCP/IP-соединение1. Серверное программное обеспечение по умолчанию обычно использует TCP-порт 80 для работы веб-сервера, а порт 443 — для HTTPS-соединений.
HTTPS (HTTP Secure) — это надстройка над протоколом HTTP, которая поддерживает шифрование посредством криптографических протоколов SSL и TLS. Они шифруют отправляемые данные на клиенте и дешифруют их на сервере. Это защищает данные от чтения злоумышленниками, даже если им удастся их перехватить.
HTTP/0.9
В 1991 году была опубликована первая версия протокола с названием HTTP/0.9. Эта реализация была проста, как топор. От интернет-ресурса того времени требовалось только загружать запрашиваемую HTML-страницу и HTTP/0.9 справлялся с этой задачей. Обычный запрос к серверу выглядел так:
GET /http-spec.html
В протоколе был определен единственный метод GET и и указывался путь к ресурсу. Так пользователи получали страничку. После этого открытое соединение сразу закрывалось.
HTTP/1.0
Годы шли и интернет менялся. Стало понятно, что нужно не только получать странички от сервера, но и отправлять ему данные. В 1996 году вышла версия протокола 1.0.
Что изменилось:
-
В запросе теперь надо было указывать версию протокола. Так сервер мог понимать, как обрабатывать полученные данные.
-
В ответе от сервера появился статус завершения обработки запроса.
-
К запросу и ответу добавился новый блок с заголовками.
-
Добавили поддержку новых методов:
-
HEAD запрашивает ресурс так же, как и метод GET, но без тела ответа. Так можно получить только заголовки, без самого ресурса.
-
POST добавляет сущность к определённому ресурсу. Часто вызывает изменение состояния или побочные эффекты на сервере. Например, так можно отправить запрос на добавление нового поста в блог.
Структура запроса
Простой пример запроса:
GET /path HTTP/1.0
Content-Type: text/html; charset=utf-8
Content-Length: 4
X-Custom-Header: value
test
В первой строчке указаны метод запроса — GET
, путь к ресурсу — /path
и версия протокола — HTTP/1.0
.
Далее идёт блок заголовков. Заголовки — это пары ключ: значение
, каждая из которых записывается с новой строки и разделяется двоеточием. Они передают дополнительные данные и настройки от клиента к серверу и обратно.
HTTP — это текстовый протокол, поэтому и все данные передаются в виде текста. Заголовки можно отделить друг от друга только переносом строки. Нельзя использовать запятые, точку с запятой, или другие разделители. Всё, что идет после имени заголовка с двоеточием и до переноса строки, будет считаться значением заголовка2.
В примере серверу передали три заголовка:
-
Content-Type
— стандартный заголовок. Показывает, в каком формате будут передаваться данные в теле запроса или ответа. -
Content-Length
— сообщает длину контента в теле запроса в байтах. -
X-Custom-Header
— пользовательские заголовки, начинающиеся сX-
с произвольными именем. Через них реализуется специфическая логика обработки для конкретного сервера. Если веб-сервер не поддерживает такие заголовки, то он проигнорирует их.
После блока заголовков идёт тело запроса, в котором передается текст test
.
А так может выглядеть ответ от сервера:
HTTP/1.1 200 OK
Date: Thu, 29 Jul 2021 19:20:01 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 2
Connection: close
Server: gunicorn/19.9.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
OK
В первой строке — версия протокола и статус ответа, например, 200 ОК
. Далее идут заголовки ответа. После блока заголовков — тело ответа, в котором записан текст OK
.
Статусы ответов
Клиенту зачастую недостаточно просто отправить запрос на сервер. Во многих случаях надо дождаться ответа и понять, как сервер обработал запрос. Для этого были придуманы статусы ответов. Это трёхзначные числовые коды с небольшими текстовыми обозначениями. Их можно увидеть в терминале или браузере. Сами коды делятся на 5 классов:
-
Информационные ответы: коды 100–199
-
Успешные ответы: коды 200–299
-
Редиректы: коды 300–399
-
Клиентские ошибки: коды 400–499
-
Серверные ошибки: коды 500–599
Мы рассмотрим основные коды, которые чаще всего встречаются в реальных задачах. С остальными более подробно можно ознакомиться в реестре кодов состояния HTTP.
Информационные ответы
100 Continue — промежуточный ответ. Он указывает, что запрос успешно принят. Клиент может продолжать присылать запросы или проигнорировать этот ответ, если запрос был завершён.
Примечание
Этот код ответа доступен с версии HTTP/1.1.
101 Switching Protocol присылается в ответ на запрос, в котором есть заголовок Upgrade. Это означает, что сервер переключился на протокол, который был указан в заголовке. Такая методика используется, например, для переключения на протокол Websocket.
102 Processing — запрос получен сервером, но его обработка ещё не завершена.
Успешные ответы
200 OK — запрос принят и корректно обработан веб-сервером.
201 Created — запрос корректно обработан и в результате был создан новый ресурс. Обычно он присылается в ответ на POST запрос.
Редиректы
301 Moved Permanently — запрашиваемый ресурс на постоянной основе переехал на новый адрес. Тогда новый путь к ресурсу указывается сервером в заголовке Location
ответа.
Примечание
Клиент может изменить метод последующего запроса с POST на GET.
302 Found — указывает, что целевой ресурс временно доступен по другому URl. Адрес перенаправления может быть изменен в любое время, а клиент должен продолжать использовать действующий URI для будущих запросов. Тогда временный путь к ресурсу указывается сервером в заголовке Location
ответа.
Примечание
Клиент может изменить метод последующего запроса с POST на GET.
307 Temporary Redirect — имеет то же значение, что и код 302, за исключением того, что клиент не может менять метод последующего запроса.
308 Permanent Redirect — имеет то же значение, что и код 301, за исключением того, что клиент не может менять метод последующего запроса.
Клиентские ошибки
400 Bad Request — запрос от клиента к веб-серверу составлен некорректно. Обычно это происходит, если клиент не передаёт необходимые заголовки или параметры.
401 Unauthorized — получение запрашиваемого ресурса доступно только аутентифицированным пользователям.
403 Forbidden — у клиента не хватает прав для получения запрашиваемого ресурса. Например, когда обычный пользователь сайта пытается получить доступ к панели администратора.
404 Not Found — сервер не смог найти запрашиваемый ресурс.
405 Method Not Allowed — сервер знает о существовании HTTP-метода, который был указан в запросе, но не поддерживает его. В таком случае сервер должен вернуть список поддерживаемых методов в заголовке Allow
ответа.
Серверные ошибки
500 Internal Server Error — на сервере произошла непредвиденная ошибка.
501 Not Implemented — метод запроса не поддерживается сервером и не может быть обработан.
502 Bad Gateway — сервер, действуя как шлюз или прокси, получил недопустимый ответ от входящего сервера, к которому он обращался при попытке выполнить запрос.
503 Service Unavailable — сервер не готов обработать запрос (например, из-за технического обслуживания или перегрузки). Обратите внимание, что вместе с этим ответом должна быть отправлена удобная страница с объяснением проблемы. Этот ответ следует использовать для временных условий, а HTTP-заголовок Retry-After
по возможности должен содержать расчётное время до восстановления службы.
504 Gateway Timeout — этот ответ об ошибке выдается, когда сервер действует как шлюз и не может получить ответ за отведенное время.
505 HTTP Version Not Supported — версия HTTP, используемая в запросе, не поддерживается сервером.
В HTTP из всего диапазона кодов используется совсем немного. Те коды, которые не используются для задания определенной логики в спецификации, являются неназначенными и могут использоваться веб-серверами для определения своей специфической логики. Это значит, что вы можете, например, придать коду 513 значение «Произошла ошибка обработки видео», или любое другое. Неназначенные коды вы можете посмотреть в реестре кодов состояния HTTP.3
Тело запроса и ответа
Тело запроса опционально и всегда отделяется от заголовков пустой строкой. А как понять, где оно заканчивается? Всё кажется очевидным: где кончается строка, там и заканчивается тело. Однако, два символа переноса строки в HTTP означают конец запроса и отправляют его на сервер. Как быть, если мы хотим передать в теле текст, в котором есть несколько абзацев с разрывами в две строки?
POST /path HTTP/1.1
Host: localhost
Первая строка
Вторая строка после разрыва
По логике работы HTTP соединение отправится сразу после второй пустой строки и сервер получит в качестве данных только строку Первая строка
. Описанную проблему решает специальный заголовок Content-Length
. Он указывает на длину контента в байтах. Обычно клиенты (например, браузеры) автоматически считают длину передаваемых данных и добавляют к запросу заголовок с этим значением. Когда сервер получит запрос, он будет ожидать в качестве контента ровно столько байт, сколько указано в заголовке.
Однако, этого недостаточно для того, чтобы передать данные на сервер. Поведение зависит от реализации сервера, но для большинства из них необходимо также передать заголовок Content-Type. Он указывает на тип передаваемых данных. В качестве значения для этого заголовка используют MIME-типы.4
MIME (Multipurpose Internet Mail Extensions, многоцелевые расширения интернет-почты) — стандарт, который является частью протокола HTTP. Задача MIME — идентифицировать тип содержимого документа по его заголовку. К примеру, текстовый файл имеет тип text/plain
, а HTML-файл — text/html
.
Для передачи данных в формате обычного текста надо указать заголовок Content-Type: text/plain
, а для JSON — Content-Type: application/json
.
Можно ли передать тело с GET-запросом?
Популярный вопрос на некоторых собеседованиях: «Можно ли передать тело с GET-запросом?». Правильный ответ — да. Тело запроса не зависит от метода. В стандарте не описана возможность принимать тело запроса у GET-метода, но это и не запрещено. Технически вы можете отправить данные в теле, но скорее всего веб-сервер будет их игнорировать.
Представим, что на абстрактном сайте есть форма аутентификации пользователя, в которой есть всего два поля: email и пароль.
Если пользователь ввёл данные и нажал на кнопку «Войти», то данные из полей формы должны попасть на сервер. Самым простым и распространенным форматом передачи таких данных будет MIME application/x-www-form-urlencoded
. В нем все поля передаются в одной строке в формате ключ=значение
и разделяются знаком &
.
Запрос на отправку данных будет выглядеть так:
POST /login HTTP/1.0
Host: example.com
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Content-Length: 26
login=user&password=qwerty
Тут есть небольшая особенность. Как понять, где заканчивается ключ и начинается его значение, если в пароле будет присутствовать знак «=» ?
POST /login HTTP/1.0
Host: example.com
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Content-Length: 26
login=user&password=123=45
В этом случае сервер не сможет понять, как разбить строку на параметры и их значения. На самом деле значения кодируются при помощи механизма url encoding.5 При использовании этого механизма знак «=» будет преобразован в код %3D
.
Тогда наш запрос приобретёт такой вид:
POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Content-Length: 28
login=user&password=123%3D45
Query string
Данные на сервер можно передавать через тело запроса и через так называемую строку запроса Query String. Это параметры формата ключ=значение, которые располагаются в пути к ресурсу:
GET /files?key=value&key2=value2 HTTP/1.0
При этом параметры можно передавать прямо от корня домена:
GET /?key=value&key2=value2 HTTP/1.0
Query String имеет такой же формат, как и тело запроса с MIME application/x-www-form-urlencoded
, только первая пара значений отделяется от адреса вопросительным знаком.
Некоторые инженеры ошибочно полагают, что Query String являются параметрами GET-запроса и даже называют их GET-параметрами, но на самом деле это не так. Как и тело запроса, Query String не имеет привязки к HTTP-методам и может передаваться с любым типом запросов.
Обычно параметры Query String используются в GET-запросах, чтобы конкретизировать получаемый ресурс. Например, можно получить на сервере список файлов, имена которых будут начинаться с переданного значения.
GET-запросы по своей идеологии должны быть идемпотентными. Это значит, что множественный вызов метода с одними и теми же параметрами должен приводить к одному и тому же результату. Например, поисковые боты перемещаются по сайту только по ссылкам и делают только GET-запросы, потому что исходя из семантики они не смогут таким образом изменить данные на сайте и повлиять на его работу.
На этом я закончу говорить про версию протокола 1.0, структуру ответов и запросов. В следующей статье я расскажу, что такое Cookies, для чего нужен CORS и как это всё работает. А пока напоследок оставлю полезные ссылки, которые упомянул в тексте:
-
Основы TCP/IP
-
Заголовки HTTP
-
Реестр кодов состояния HTTP
-
MIME типы
-
Алгоритм кодирования URL encoding
Следующая статья: Ультимативный гайд по HTTP. Cookies и CORS
Обычные посетители сайта обращают внимание в первую очередь на качественный контент, а поисковые краулеры – на ответы сервера.
Сегодня научимся проверять код как одной страницы, так и всех сразу, а также разберем все коды ответа и узнаем, что именно они означают.
Немного теории
Определить доступность веб-страницы поможет анализ кода состояния HTTP. Технически он представляет из себя стандартный запрос. Он отправляется, когда мы переходим по определенной ссылке на сайте или просто вводим ее в поисковой строке браузера. При обработке запроса сервер самостоятельно формирует и отдает трехзначный цифровой код.
Благодаря коду ответа понять реакцию сайта на запрос может не только поисковый краулер, но и обычный пользователь. Здесь нет ничего сложного даже для начинающих вебмастеров.
Сперва определимся с терминами.
- Клиент – компьютер, смартфон или другое мобильное устройство, которое имеет подключение к интернету.
- Сервер – определенный компьютер, который хранит все данные сайта (включая страницы и системные файлы). Именно на сервере «живет» сайт.
Выделяют пять классов ответов. Идентифицировать класс можно по первой цифре.
- 5** – техническая ошибка на стороне сервера. Точная причина указывается сразу после кода. Иногда пятисотая говорит о внутренних сбоях, реже – о превышении статической нагрузки на сервер.
- 4** – сбой на стороне юзера.
- 3** – обнаружен редирект на другой адрес (не ошибка).
- 2** – запрос обработан успешно (не ошибка).
- 1** – служебный класс кодов, который чаще всего относится к информационным сообщениям (не ошибка).
Логика кодов, таким образом, весьма проста:
Продвинем ваш бизнес
В Google и «Яндексе», соцсетях, рассылках, на видеоплатформах, у блогеров
Подробнее
Что значат коды состояния HTTP
Причины / решения / пояснения ошибок, я буду давать только для самых часто встречающихся кодов. Для всех остальных – только краткое описание.
Двухсотые – успешные запросы
200 – успешный запрос данных. Код не является ошибкой.
201 – завершена успешная транзакция. Код говорит о том, что сформирован новый ресурс (или документ).
202 – запрос принят, но еще не завершен. Необходимо дождаться окончания обработки.
203 – данные получены не из первоисточника (возвращаемые данные идут не от исходного сервера, а от какого-то другого) и могут быть устаревшими.
204 – запрос был обработан правильно, но отсутствует содержимое. Есть заголовок ответа, но содержимое для него отсутствует. Обновлять и актуализировать содержимое не нужно.
205 – клиенту необходимо осуществить сброс содержимого. Саму страницу обновлять не требуется.
206 – ошибка частичного содержимого. Если клиент хочет выполнить загрузку данных в несколько потоков, а сервер выполняет только часть GET-запроса, будет возникать 206-ая ошибка.
GET-запрос предназначен для получения данных, в то время как POST-запрос нужен для отправки данных.
Код также может быть отправлен с сервера, когда клиент запросил диапазон (например, условно: «Дайте мне первые 2 МБ видеоданных»). Происходит возврат только частичного контента, соответствующего Range-заголовку (данный заголовок дает понять серверу, какую именно часть страницы от него требуют, и какую ему нужно вернуть).
Если страница отдает этот код, следует обратить внимание на выполнение кэширования и на исходящий запрос.
207 – выполнено несколько операций. Найти их можно в XML, в строке MultiStatus.
226 – обработан IM-заголовок. Содержимое будет возвращено для получения информации об ответе вместе с ранее обозначенными параметрами.
Трехсотые – запросы на редирект
300 – не удалось идентифицировать точный URL. Такой ответ возникает, когда существует множественный выбор, и краулер не знает, к какой именно странице относится ресурс.
301 – документ был навсегда перемещен на новый URL. Так должны отвечать все веб-страницы, которые удалены или являются зеркалами, дублями. Со временем все указанные страницы будут склеены с целевой веб-страницей (присоединены к ней) автоматически. Если возникает такая ошибка, нужно настроить 301-ое перенаправление с устаревшего URL на актуальный (если речь идет о веб-странице, которая уже ранжировалась, но ее URL изменился). В таком случае все позитивные метрики, включая вес URL, будут сохранены.
302 – документ был временно перемещен на новый URL. Это абсолютно корректный ответ сервера, который актуален для веб-страниц с распродажами или сезонными акциями, распространяющимися на какой-либо товар. Код указывает, что данный URI будет учитываться клиентом в последующих запросах. Другими словами, страница была найдена, но перенесена. Такие документы из индекса не удаляются. Если адрес был изменен навсегда, вместо 302-го, лучше использовать 303-ий или 307-ой ответ.
303 – нужно направить пользователя на иной URL. 303-ый код можно получить исключительно GET-запросом. В идеале, этот код нужно отдавать, когда требуется редиректнуть посетителя на близкорелевантую, но не идентичную странице.
304 – документ не модифицировался. Этот код не является стандартным редиректом. Он помогает краулерам определять страницы, которые не изменились с последнего визита.
Если на вашем сайте немного страниц (до 1 000), использовать код 304 нет смысла. Если вас напрягает этот редирект, то в заголовке нужно поправить параметр Last-Modified (последняя дата изменения) – он не должен быть старше, чем заголовок If-Modified-Since (если изменялся спустя заданное количество времени).
305 – доступ к этому документу возможен исключительно через прокси.
307 – документ был временно перемещен на иной URL. Идеальный вариант, если требуется временно редиректнуть посетителя, но оставить техническую возможность отправки POST-запросов.
Четырехсотые – сбои на стороне клиента
400 – ошибка синтаксиса. Сервер не может идентифицировать запрос, так как была допущена опечатка в синтаксисе. Проверьте корректность отправляемого запроса.
401 – отсутствует аутентификация. Код отдается, когда для доступа требуется пароль или регистрация.
403 – отсутствует доступ к документу. Возникает, когда пользователь хочет открыть системные файлы (robots, htaccess). Либо вы сделали опечатку при вводе URL и пытаетесь воспользоваться веб-страницей, которая не предназначена для обычного пользователя, либо вам нужно: пройти авторизацию для доступа к системным файлам.
404 – отсутствует соответствующий ресурс по введенному URL. Разберитесь, по каким причинам была удалена / перемещена страница. Возможно, вы допустили ошибку и удалили ее случайно. Если так – просто восстановите ее.
Задумайтесь над созданием красивой, кастомизированной 404-ой. Например, такой:
405 – некорректный метод (указывается в запросной строке клиента) для выбранного документа. Метод запроса определяет точное действие, которое должно быть выполнено для указанного ресурса.
406 – некорректный / неподдерживаемый краулером формат запроса. Код отдается, когда сервер не способен возвратить ответ, релевантный листу допустимых значений. Самый распространенный случай – поисковый робот не поддерживает кодировку документа или его язык. Убедитесь, что в теле сообщения содержится лист доступных ресурсов. Подробное описание ошибка на сайте веб-разработчиков Mozilla.
407 – отсутствует регистрация прокси или авторизация файервола.
408 – таймаут запроса. Соединение разорвано, так как полный запрос не был передан. Другими словами, запрос занял слишком много времени, а сервер не готов был ждать. На каждом сайте существует свое время таймаута. Проверьте наличие интернета и просто обновите страницу. Подробное объяснение этой ошибки на сайте веб-разработчиков Mozilla.
409 – несовместимость двух запросов. Запрос невозможно выполнить при текущем состоянии сервера. Самый распространенный случай – операции c PUT-запросом. Например, когда нужно скачать файл, возраст которого превышает возраст уже существующего, расположенного на сервере.
410 – ресурс более не существует по указанному URL. Если страница удаляется целенаправленно, лучше делать так, чтобы она отдавала именно 410-ый. Краулер обойдет такую страницу, получит этот код и больше никогда на нее не вернется, так как поймет, что она удалена навсегда. Если речь о веб-странице, которая была удалена временно, гораздо эффективнее использовать 404-ый ответ. Если страница удалена намерено и навсегда, но в SERP имела хорошие места и приносила трафик, лучше сделать редирект на максимально релевантную существующую страницу.
411 – сервер сам отклоняет отправляемый запрос, так как не находит значение Content-Length. Этот ответ характерен как для обычных POST-запросов, так и для PUT-запросов (подразумевают замену существующих представлений документа на данные, которые содержатся в самом запросе).
412 –не были до конца выполнены условные поля HTTP-заголовка, например, If-Match. 412-ый код появляется в случаях, когда доступ к целевому документу отклоняется. Нужно проверить соблюдение и корректность HTTP-заголовков выполняемого запроса.
413 – у каждого сервера есть свой собственный максимальный размер запроса, определяемый не самим HTTP-протоколом (у него ограничения по длине запроса просто напросто отсутствуют), а ограничениями со стороны браузеров. Браузеры поддерживают запросы от 2 до 8 килобайт. Вышеуказанный код отдается, когда сервер не понимает запрос из-за слишком большого размера.
414 – возникает, когда отправляется чрезвычайно длинный URL. Запросы, содержащие излишне длинные URL, не могут правильно интерпретироваться сервером. Самые частые случаи появления этого ответа – попытка передать удлиненные параметры (излишне большое количество данных через GET- запрос).
415 – некорректный медиаформат. Текущий тип данных не может быть интерпретирован сервером.
416 – некорректное значение Range (диапазон). Ответ возникает в случаях, когда в самом HTTP-заголовке прописывается некорректный байтовый диапазон. 416-ый отдается в случаях, когда сервер не может взаимодействовать с запрашиваемыми диапазонами. Причина – отсутствие диапазона в необходимом документе или опечатка в синтаксисе.Сервер просто не имеет возможности работать с запрашиваемыми диапазонами. Проверьте синтаксис значения Range – он должен обязательно соблюдаться. Скорее всего, документ просто не имеет запрашиваемых диапазонов. Обновите страницу.
417 – указанное значение Expect не может быть удовлетворено (речь о заголовке запроса). Прокси некорректно идентифицировал содержимое поля «Expect: 100-Continue». Устранить эту ошибку самостоятельно не удастся. Если вы используете прокси Squid, обратитесь в поддержку. Вам нужно активировать ignore_expect_100. Другой вариант разрешите BS_PingHost обращаться к интернет-сети без участия прокси.
422 – существует определенная логическая ошибка. Какая именно, данный код не указывает. Копайте в сторону ошибок в семантике документа.
423 – используемый ресурс был заблокирован для выбранного HTTP—метода. Перезагрузите роутер и компьютер. Используйте только статистический IP.
424 – зависимый ресурс был блокирован по соображением безопасности. Данный код отдается, если в запросе присутствуют признаки несанкционированного доступа к файлам CMS.
426 – некорректные значения полей Upgrade и Conection. Этот ответ возникает, когда серверу требуется обновление до SSL-протокола, но клиент не имеет его поддержки.
429 – слишком много запросов. Ошибка отдается, когда один пользователь проявляет чрезмерно большую активность за короткий временной интервал. Проверьте плагины используемой CMS. В идеале, отключите их все и включайте по очереди, пока не доберетесь до источника проблемы.
451 – доступ к серверу заблокирован по решению судебных органов. Можно плодить бесконечные дубли или вообще создать новый домен, но рано или поздно страницу с идентичным содержимым все равно заблокируют. Временное решение – разместить проблемное содержимое на другом домене. Провайдеры могут подстраховаться и блокировать не только отдельные страницы, но и сайты целиком. Не нарушать закон – единственное, что можно посоветовать в этом случае.
Пятисотые – серверные сбои
500 – серверу не удается полностью обработать запрос. Такой код отдается, когда существует непредвиденное условие, мешающее выполнению запроса. Чаще всего внутренняя ошибка сервера может появляться при серверных сбоях. Проверяйте, корректно ли указаны директивы в системных файлах (особенно htaccess), нет ли ошибки прав доступа к файлам. Обратите внимание на ошибки внутри скриптов и их медленную работу.
Проверяйте конфликты плагинов и дополнений. Нередко 500-ая возникает, когда в настройках административной панели хостинга указана одна версия PHP, а на самом сайте используется другая. Последнее также создает высокую статическую нагрузку на хостинг. Если вам было бы узнать о пятисотой подробнее, пишите в комментариях, и я напишу развернутый материал на эту тему.
501 – не выполнено. Этот код отдается, когда сам сервер не может идентифицировать метод запроса. Сами вы эту ошибку не исправите. Устранить ее может только сервер.
502 – шлюзовый сбой. Возникает при получении некорректного ответа от сервера, находящегося по иерархии выше. Актуально исключительно для прокси и шлюзовых конфигураций.
503 – данный ответ возникает в случаях, когда существуют технические неполадки, не позволяющие интерпретировать введенный запрос. Скорее всего, ваш сервер просто на обслуживании или сильно перегружен. Уменьшите число перманентных запросов к базам данных. Убедитесь, что на сервере нет профилактических или других работ, ограничивающих его пропускную способность. Не используйте VPN.
504 – отсутствует ответ. Этот код отдается в одной ситуации – если сервер не может получит ответ за необходимый период времени. Отклика нет и возникает таймаут. Как и 501-ый ответ, 504-ый исправить самостоятельно не получится. Здесь дело в прокси, часто – в веб-сервере. Первым делом просто обновите веб-страницу. Если не помогло, нужно почистить DNS-кэш. Для этого используем сочетание горячих клавиш Windows+R и вводим команду cmd (Control+пробел). В открывшемся окне указываем команду ipconfig / flushdns и подтверждаем ее нажатием Enter.
Также полезно посмотреть, как страница ведет себя различных мобильных устройствах и в разных браузерах. Проверьте дебаг. Если сайт на WP, то проверить дебан проще всего. Достаточно добавить этот код в wp-config.php:
Теперь все сбои будут фиксировать в файле debug.log (находится в папке wp-сontents). Если вы используете другую CMS, найдите к ней мануал и посмотрите, как активировать в ней журнал ошибок.
Также 504-ая отдает, когда на сайте существуют проблемы, связанные с задействованием CDN или кастомизированных серверов DNS. Отключите CDN на своем сайте.
Иногда 504-ый код пропадает, если просто подождать несколько часов. Часто 504-ая появляется на сайтах, которые используют CloudFlare.
505 – отсутствует поддержка текущей версии HTTP-протокола.
507 – не хватает места на жестком диске для выполнения запроса.
510 – не найдено расширение, желающее задействовать клиент.
Массово проверяем ответ веб-страницы
Самый простой способ проверить ответ веб-страницы – воспользоваться готовыми сервисами. Наиболее популярны:
- mainspy;
- 2ip;
- cy-pr;
- wwhois;
- 4seo.
Возьмем для примера mainspy. Тут проверить код ответа проще всего:
Таким образом, для проверки кода просто открываем страницу и вводим необходимые URL. Кликаем «Проверить». Будет выведен отчет. Напротив каждого проверяемого URL будет отображаться код ответа сервера:
Кроме перечисленных сервисов есть также замечательный плагин для Google Chrome – HTTP Header Spy. Он позволяет проверять код ответа сервера как одной, так и нескольких страниц сразу:
Послесловие
Коды ответа HTTP – это универсальный язык, который понимают не только краулеры Google / «Яндекса», но и люди. 5 классов кодов позволят с первого взгляда определить, где именно существует ошибка при выполнении HTTP запроса и куда копать для ее устранения.
Если ваш код ответа не указан в этом мануале, значит речь идет о кастомизированном сервере. Чтобы правильно истолковать ответ такого сервера и перевести его на человеческий язык, придется обратится к его разработчику.