Трассировка редиректов

У сайта четыре входные двери: http и https, каждая с www и без. Эта трассировка проходит через все четыре, отмечает каждый переход и проверяет, что все они приводят к одному адресу HTTPS.

Или попробуйте github.com, bbc.co.uk

Один сайт, четыре адреса

Человеку все это кажется одним и тем же местом:

http://example.com/
http://www.example.com/
https://example.com/
https://www.example.com/

Браузер или поисковый робот видит четыре разных источника. Схема может отличаться, имя хоста может отличаться, и ничто в устройстве веба не требует, чтобы они отдавали одно и то же. А печатная листовка, старая закладка и ссылка в пятилетнем сообщении на форуме будут использовать каждая свой вариант.

Связывает их редирект. Сервер не отдает страницу, а отвечает трехзначным статусом из диапазона 300 и заголовком Location с другим адресом, и браузер идет туда. Аккуратный сайт выбирает один из четырех как настоящий адрес, а остальные три отвечают одним редиректом на него.

Коды ответа, которые перемещают посетителей

КодЗначениеКогда использовать
301Перемещено навсегдаHTTP на HTTPS, www на без www, переименованная страница. Браузеры его кэшируют, а поисковики переносят запись в индексе на новый адрес.
308Навсегда, метод сохраняетсяТо же, что 301, но POST остается POST. Распространен на новых платформах.
302Найдено (временно)Обход через вход в аккаунт, страница техработ, A/B-тест.
307Временно, метод сохраняетсяТо же, что 302, для форм и API. Браузеры также показывают 307 при переходе на HTTPS по HSTS, который выполняют сами.
303Смотреть другоеОтправка браузера на страницу результата после отправки формы.

Трассировка выводит код каждого перехода в колонке «Путь», в том порядке, в каком их вернул сервер.

Как оценивается трассировка

Наш сервер запрашивает каждый из четырех адресов и проходит до восьми редиректов. Адрес, к которому приходит большинство, считается главным адресом сайта, и каждая начальная точка сравнивается с ним.

Конечный адрес / 1 переход
Вариант и есть главный адрес или попадает на него одним редиректом. К этому и надо стремиться.
2 перехода и больше
Цепочка, например http://www на https://www, затем на https://. Работает, но каждый лишний переход стоит полного круга запроса, на телефоне часто от 100 до 300 ms.
Временный редирект
По пути встречается 302, 303 или 307. Если правило задумано постоянным, поисковики не понимают, какой адрес оставить.
Другой адрес
Вариант приводит в другое место, то есть сайт существует в двух версиях. Оценивается как ошибка.
Сбой
Нет ответа. Для голого домена это ошибка, для www предупреждение.

Конечный адрес без HTTPS это всегда ошибка. На конечной странице трассировка также ищет в HTML смешанное содержимое, то есть скрипты, таблицы стилей, фреймы, адреса форм, картинки и медиа, которые все еще указаны через http://. Первые четыре вида браузеры блокируют, поэтому это ошибки, а картинки и медиа предупреждения. Наконец, она читает ссылку rel="canonical" и предупреждает, если в ней указан не тот хост, к которому ведут редиректы.

Одно правило вместо нескольких

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

nginx

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}
server {
    listen 443 ssl;
    server_name www.example.com;
    return 301 https://example.com$request_uri;
}

Apache (.htaccess)

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]

В Cloudflare включите «Always Use HTTPS» и добавьте одно правило редиректа для имени хоста. Имени www нужна своя DNS-запись, и оно должно входить в сертификат, иначе посетители до редиректа просто не дойдут. Это проверяет инспектор TLS-сертификата.

Трассируется только главная страница и только редиректы, отправленные кодами HTTP. Редирект через JavaScript или тег <meta http-equiv="refresh"> не прослеживается, а для внутренних страниц могут действовать другие правила. Смешанное содержимое ищется в исходном HTML, поэтому ресурсы, которые скрипты добавляют позже, остаются незамеченными.

Частые вопросы

Чем редирект 301 отличается от 302?

301 говорит, что переезд постоянный. Браузеры его запоминают, а поисковики заменяют старый адрес новым. 302 говорит, что исходный адрес по-прежнему правильный, а обход может закончиться. Для правил HTTPS и www используйте 301 или 308.

Использовать на сайте www или нет?

Для позиций в поиске это неважно. Голый домен короче. Вариант с www может быть CNAME, что требуется в некоторых конфигурациях CDN и хостинга. Важно, чтобы один перенаправлял на другой.

Вредят ли цепочки редиректов SEO?

Цепочка из двух-трех переходов все еще передает сигналы ранжирования, а Googlebot проходит до десяти переходов. Теряется скорость для каждого посетителя, пришедшего по длинному пути, и каждое лишнее звено цепочки это еще одно место, которое может сломаться.

Что такое смешанное содержимое?

Страница HTTPS, которая загружает ресурс по обычному http://. Браузеры блокируют такие скрипты, таблицы стилей и фреймы, а картинки пытаются перевести на HTTPS. Обычно это остаток переезда на HTTPS, после которого старые адреса остались в содержимом.

Я исправил редирект, но браузер все равно идет на старый адрес. Почему?

Браузеры кэшируют ответы 301, иногда на месяцы. Проверьте в приватном окне или командой curl -I http://example.com либо запустите трассировку здесь еще раз. Наш сервер не хранит кэш между проверками.