URL-редиректы для SEO: Техническое руководство

Обширный обзор перенаправлений и надлежащего применения HTTP-перенаправлений и 3XX-серии кодов состояния.

URL-редиректы для SEO: Техническое руководство

автор: Vahan Petrosyan

Перенаправления для SEO следует использовать правильно, потому что они влияют на то, как веб-сайты сканируются и индексируются Google.

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

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

Что такое перенаправление?

Перенаправления веб-сайта сообщают браузерам и поисковым системам информацию о URL и том, где найти веб-страницу.

Перенаправление URL включает код, реализованный для определенного URL или группы URL, так что пользователь (или поисковая система) отправляется на другую страницу по сравнению с фактическим URL, который был введен или нажат.

Перенаправление может быть установлено как:

  • Временное перенаправление: 302, 303, 307, 308.
  • Постоянное перенаправление: 301.

Когда использовать перенаправления

Основные причины использования перенаправлений:

  • Отдельная страница или весь домен был перемещен (изменен URL).
  • Для использования сокращателей URL или «красивых» URL.
  • Миграция сайта (например, с HTTP на HTTPS).

С точки зрения SEO перенаправления URL важны, потому что:

  • Перенаправление вперед авторитета всех ссылок, указывающих на страницу, которая была перемещена или удалена.
  • Избегание ошибок 404 страница не найдена (хотя иногда лучше оставить 404).
  • Перенаправления могут быть реализованы для группы или для всего домена, но часто их нужно устанавливать индивидуально, чтобы избежать проблем.

При использовании RegEX для групповых перенаправлений это может привести к неожиданным результатам, если ваша логика не безупречна!

Типы перенаправлений

Существует три основных типа перенаправлений:

  • Перенаправления Meta Refresh устанавливаются на уровне страницы, но обычно не рекомендуются в целях SEO. Существует два типа перенаправлений Meta Refresh: отложенное, которое рассматривается как временное перенаправление, и мгновенное, которое рассматривается как постоянное перенаправление.
  • Перенаправления Javascript также устанавливаются на стороне клиента и могут вызвать проблемы с SEO. Google выразил предпочтение HTTP-серверным перенаправлениям.
  • HTTP-перенаправления устанавливаются на стороне сервера и являются лучшим подходом в целях SEO – мы рассмотрим подробнее ниже.

Что такое код состояния HTTP Response?

Браузеры и веб-краулеры, такие как GoogleBot, называются пользовательскими агентами.

Когда пользовательский агент пытается получить доступ к веб-странице, происходит следующее: пользовательский агент отправляет запрос, и сервер веб-сайта выдает ответ.

Ответ называется кодом состояния HTTP Response. Он предоставляет статус для запроса URL.

В ситуации, когда пользовательский агент, такой как GoogleBot, запрашивает URL, сервер предоставляет ответ.

Например, если запрос на URL выполнен успешно, сервер предоставит код ответа 200, что означает успешность запроса URL.

Таким образом, когда вы думаете о том, что GoogleBot достигает веб-сайта и пытается его просканировать, происходит серия запросов и ответов.

HTTP-перенаправления

HTTP-перенаправление – это ответ сервера на запрос URL.

Если URL существует по другому URL (потому что он был перемещен), сервер сообщает пользовательскому агенту, что запрос URL перенаправляется на другой URL.

Код ответа для измененного URL обычно представлен в виде кода состояния ответа 301 или 302.

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

Пример действия, которое может предпринять пользовательский агент, – сохранить кэш нового URL, чтобы в следующий раз, когда будет запрошен старый URL, запрос был направлен на новый URL.

Таким образом, 301 и 302 перенаправления – это не просто знак в интернете, который говорит: «Иди сюда, не туда».

Серия статус-кодов 3XX

Перенаправления – это не только два статус-кода, с которыми знакомы все, 301 и 302.

Всего существует семь официальных статус-кодов ответов 3xx.

Вот различные виды перенаправлений, доступные для использования:

  • 300 Множество выборов.
  • 301 Перемещено навсегда.
  • 302 Найдено.
  • 303 Смотреть другое.
  • 304 Не изменено.
  • 305 Использовать прокси.
  • 306 (Не используется).
  • 307 Временное перенаправление.
  • 308 Постоянное перенаправление.

Некоторые из вышеупомянутых статус-кодов не существуют так долго и могут не использоваться. Поэтому, прежде чем использовать какой-либо код перенаправления, кроме 301 или 302, убедитесь, что предназначенный пользовательский агент может его интерпретировать.

Поскольку GoogleBot использует последнюю версию Chrome (называемую безголовым браузером), легко проверить, совместим ли статус-код, проверив, признает ли Chrome статус-код с помощью списка совместимости браузера.

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

301: Перемещено навсегда

Статус-код 301 обычно называют 301 перенаправлением. Но официальное название – 301 Перемещено навсегда.

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

Как упоминалось ранее, существует еще больше информации.

Статус-код 301 также подсказывает пользовательскому агенту:

  • Запросы для URL должны выполняться с новым URL.
  • Тот, кто делает запрос, должен обновить свои ссылки на новый URL.
  • Последующие запросы можно изменить с GET на POST.

Последний пункт – это технический вопрос. Согласно официальным стандартам для статус-кода 301:

"Примечание: по историческим причинам пользовательский агент МОЖЕТ изменить метод запроса с POST на GET для последующего запроса. Если такое поведение нежелательно, вместо этого можно использовать статус-код 308 (Постоянное перенаправление)."

Для SEO, когда поисковые системы видят 301 перенаправление, они передают рейтинг старой страницы новой.

Перед внесением изменений следует быть осторожным при использовании 301 перенаправления. 301 перенаправление должно использоваться только тогда, когда изменение на новый URL является постоянным.

Статус-код 301 не должен использоваться, если изменение является временным.

Кроме того, если вы передумаете позже и вернетесь к старому URL, старый URL может потерять свой ранг и потребует времени для его восстановления.

Таким образом, главное, что следует запомнить, заключается в том, что статус-код 301 будет использоваться, когда изменение является постоянным.

302: Найдено

Основное, что следует понимать про статус-код 302, заключается в том, что он полезен в ситуациях, когда URL временно изменен.

Этот код ответа означает, что URL временно находится по другому URL, и предлагается использовать старый URL для будущих запросов.

Статус-код 302 перенаправления также сопровождается техническим предупреждением, касающимся GET и POST:

"Примечание: по историческим причинам пользовательский агент МОЖЕТ изменить метод запроса с POST на GET для последующего запроса. Если такое поведение нежелательно, вместо этого можно использовать статус-код 307 (Временное перенаправление)."

Ссылка на "исторические причины" может относиться к старым или ошибочным пользовательским агентам, которые могли изменять метод запроса.

307: Временное перенаправление

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

Единственное различие между статус-кодами 302 и 307 заключается в том, что пользовательский агент должен запросить новый URL с тем же HTTP-запросом, который использовался для запроса исходного URL.

Это означает, что если пользовательский агент запрашивает страницу с помощью запроса GET, то пользовательский агент должен использовать запрос GET для нового временного URL и не может использовать запрос POST.

Документация Mozilla по статус-коду 307 объясняет это более ясно, чем официальная документация.

"Сервер отправляет этот ответ, чтобы направить клиента получить запрашиваемый ресурс по другому URI с тем же методом, который использовался в предыдущем запросе.

Это имеет те же семантические характеристики, что и статус-код 302 Found HTTP, за исключением того, что пользовательский агент не должен изменять используемый метод HTTP: если POST был использован в первом запросе, POST должен использоваться во втором запросе."

За исключением того, что статус-код 307 требует, чтобы последующие запросы были того же вида (POST или GET), и что статус-код 302 может двигаться в обе стороны, все остальное идентично между статус-кодами 302 и 307.

302 против 307

Вы можете обработать перенаправление с использованием файлов конфигурации сервера .htaccess на Apache, файла example.conf на Nginx или с использованием плагинов, если вы используете WordPress.

Во всех случаях они имеют одинаковый синтаксис для написания правил перенаправления. Они отличаются только командами, используемыми в файлах конфигурации. Например, перенаправление на Apache будет выглядеть так:

  • Options +FollowSymlinks
  • RewriteEngine on
  • RedirectMatch 301 ^/oldfolder/ /newfolder/

На серверах Nginx это будет выглядеть так:

  • rewrite ^/oldfolder/ /newfolder/ permanent;

Используемые команды для указания статус-кода перенаправления сервера и команды действия различаются.

Например:

  • Статус-код перенаправления сервера: "301" против "permanent".
  • Команда действия: "RedirectMatch" против "rewrite".

Но синтаксис перенаправления (`^/oldfolder/ /newfolder/`) одинаков для обоих.

На Apache убедитесь, что модули mod_rewrite и mod_alias (ответственные за обработку перенаправлений) включены на вашем сервере.

Поскольку самый распространенный тип сервера – это Apache, вот примеры для файлов .htaccess Apache.

Убедитесь, что в файле .htaccess есть эти две строки перед правилами перенаправления, и поместите правила ниже них:

  • Options +FollowSymlinks
    RewriteEngine on

Прочтите официальную документацию.

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

*zero or more times
+One or more times
.any single character
?Zero or one time
^Start of the string
$End of the string
a|bOR operadn “|” a or b
(z)remembers the match to be used when calling $1

Как создать перенаправления

  • Перенаправление одного URL-адреса
  • Перенаправить все кроме
  • Изменение каталога
  • Удалить слово из URL
  • Установить канонический URL
  • Перенаправление с HTTP на HTTPS
  • Перенаправление с старого домена на новый

Перенаправление для одного URL

Наиболее распространенным и широко используемым типом перенаправления является удаление страниц или изменение URL-адресов.

Например, предположим, вы изменили URL-адрес с /old-page/ на /new-page/. Правило перенаправления будет следующим:

RewriteRule ^old-page(/?|/.*)$ /new-page/ [R=301,L]

Или

RedirectMatch 301 ^/old-page(/?|/.*)$ /new-page/

Единственное различие между этими двумя методами заключается в том, что первый использует модуль Apache mod_rewrite, а второй – mod_alias. Оба метода могут быть использованы.

Регулярное выражение "^" означает, что URL должен начинаться с "/old-page", тогда как (/?|/.*)$ указывает, что все, что следует за "/old-page/" с косой чертой "/" или без точного соответствия, должно быть перенаправлено на /new-page/.

Мы также можем использовать (.*), то есть ^/old-page(.*), но проблема в том, что, если у вас есть еще одна страница с похожим URL-адресом, например /old-page-other/, ее тоже перенаправит, когда нам нужно перенаправить только /old-page/.

Следующие URL будут сопоставлены и перенаправлены на новую страницу:

  • /old-page/ – /new-page/
  • /old-page – /new-page/
  • /old-page/?utm_source=facebook.com – /new-page/?utm_source=facebook.com
  • /old-page/child-page/ – /new-page/

Он перенаправит любую вариацию URL страницы на новую. Если мы используем перенаправление в следующей форме:

Redirect 301 /old-page/ /new-page/

Без регулярных выражений все URL с UTM-строкой запроса, например /old-page?utm_source=facebook.com (что распространено, так как URL используются для обмена в социальных сетях), окажутся как 404.

Даже /old-page без завершающей косой черты "/" также приведет к 404.

Перенаправление всех, за исключением

Допустим, у нас есть много URL-адресов вроде /category/old-subcategory-1/, /category/old-subcategory-2/, /category/final-subcategory/, и мы хотим объединить все подкатегории в /category/final-subcategory/. Нам нужно использовать правило "все, за исключением" здесь.

  • RewriteCond %{REQUEST_URI} !/category/final-subcategory/
  • RewriteCond %{REQUEST_FILENAME} !-f
  • RewriteRule ^(category/). /category/final-subcategory/ [R=301,L]

Здесь мы хотим перенаправить все под /category/ на третьей строке, за исключением случая /category/final-subcategory/ на четвертой строке. У нас также есть правило "!-f" на второй строке, игнорируя любые файлы, такие как изображения, CSS или файлы JavaScript.

В противном случае, если у нас есть некоторые ресурсы, такие как "/category/image.jpg", они также будут перенаправлены на "/final-subcategory/" и вызовут разрыв изображения.

Изменение директории

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

  • RewriteRule ^old-directory$ /new-directory/ [R=301,NC,L]
  • RewriteRule ^old-directory/(.*)$ /new-directory/$1 [R=301,NC,L]

Я использовал $1 в цели, чтобы сказать серверу, что он должен запомнить все в URL, следующее за /old-directory/ (т.е. /old-directory/subdirectory/) и передать это (т.е. "/subdirectory/") на место назначения. В результате он будет перенаправлен на /new-directory/subdirectory/.

Я использовал два правила: одно без косой черты в конце и другое с косой чертой в конце.

Я мог бы объединить их в одно правило, используя (/?|.*)$ в конце, но это вызвало бы проблемы и добавило бы " //" слэш в конце URL при запросе URL без косой черты с query string (т.е. "/old-directory?utm_source=facebook" будет перенаправлен на "/new-directory//?utm_source=facebook").

Удаление слова из URL

Предположим, у вас есть 100 URL-адресов на вашем сайте с названием города "Чикаго", и вы хотите их удалить.

Для URL http://ваш_сайт.com/example-chicago-event/ правило перенаправления будет следующим:

RewriteRule ^(.*)-chicago-(.*) http://%{SERVER_NAME}/$1-$2 [NC,R=301,L]

Если пример URL имеет форму http://ваш_сайт.com/example/chicago/event/, тогда перенаправление будет следующим:

RewriteRule ^(.*)/chicago/(.*) http://%{SERVER_NAME}/$1/$2 [NC,R=301,L]

Установка канонического URL

Наличие канонических URL – самая важная часть SEO.

Если их нет, вы можете подвергнуть свой сайт проблемам с дублированием контента, потому что поисковые системы рассматривают URL-адреса с версиями "www" и "non-www" как разные страницы с одинаковым контентом. Поэтому вы должны убедиться, что ваш сайт работает только с одной версией, которую вы выбираете.

Если вы хотите запустить свой сайт с версией "www", используйте это правило:

  • RewriteCond %{HTTP_HOST} ^ваш_сайт.com [NC]
  • RewriteRule ^(.*)$ http://www.ваш_сайт.com/$1 [L,R=301]

Для версии "non-www":

  • RewriteCond %{HTTP_HOST} ^www.ваш_сайт.com [NC]
  • RewriteRule ^(.*)$ http://ваш_сайт.com/$1 [L,R=301]

Косая черта в конце также является частью канонизации, так как URL с косой чертой в конце или без нее также рассматриваются по-разному.

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

Это гарантирует, что /example-page будет перенаправлен на /example-page/. Вы можете выбрать вариант удаления косой черты вместо добавления, тогда вам понадобится другое правило:

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

Перенаправление с HTTP на HTTPS

После инициативы Google по поощрению владельцев веб-сайтов использовать SSL, переход на HTTPS – одно из наиболее часто используемых перенаправлений, которое есть почти на каждом веб-сайте.

Следующее правило Rewrite можно использовать для принудительного использования HTTPS на каждом веб-сайте.

  • RewriteCond %{HTTP_HOST} ^ваш_сайт.com [NC,OR]
  • RewriteCond %{HTTP_HOST} ^www.ваш_сайт.com [NC]
  • RewriteRule ^(.*)$ https://www.ваш_сайт.com/$1 [L,R=301,NC]

С его помощью можно объединить перенаправление версии с "www" или "non-www" в одно правило перенаправления HTTPS.

Перенаправление со старого домена на новый

Это также одно из самых используемых перенаправлений, когда вы решаете провести переосмысление и должны изменить свой домен. Правило ниже перенаправляет old-domain.com на new-domain.com.

  • RewriteCond %{HTTP_HOST} ^old-domain.com$ [OR]
  • RewriteCond %{HTTP_HOST} ^www.old-domain.com$
  • RewriteRule (.*)$ http://www.new-domain.com/$1 [R=301,L]

Оно использует два случая: один с "www" версией URL и другой – "non-www", потому что любая страница по историческим причинам может иметь входящие ссылки на обе версии.

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

Рекомендации по перенаправлениям

1. Не перенаправляйте все сломанные URL-адреса 404 на главную страницу

Это часто происходит, когда вы слишком ленивы, чтобы исследовать ваши URL-адреса 404 и сопоставить их с соответствующей целевой страницей.

В соответствии с Google, они все еще обрабатываются как 404.

Да, это не лучшая практика (сбивает с толку пользователей), и мы все равно обрабатываем их как 404 (они являются мягкими 404), поэтому пользы от этого нет. Это не критически сломано/плохо, но дополнительная сложность без видимой причины – вместо этого создайте лучшую страницу 404.
— Джон (@JohnMu) 8 января 2019 года

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

Google настоятельно рекомендует, чтобы содержимое перенаправленной страницы было эквивалентно старой странице. Иначе такой редирект может быть сочтен мягким 404-кодом, и вы потеряете рейтинг этой страницы.

2. Правильное перенаправление на мобильные страницы

Если у вас разные URL-адреса для настольных и мобильных веб-сайтов (например, «example.com» для настольных компьютеров и «m.example.com» для мобильных устройств), вы должны убедиться, что пользователи перенаправляются на соответствующую страницу мобильной версии.

Правильно:

  • example.com/sport/ → m.example.com/sport/

Неправильно:

  • example.com/sport/ → example.com

Также вы должны убедиться, что если одна страница является 404 на настольном компьютере, она также должна быть 404 на мобильном устройстве.

Если у вас нет мобильной версии для страницы, вы можете избежать перенаправления на мобильную версию и оставить их на настольной странице.

Как использовать мета-обновление

Существует возможность выполнить перенаправление с помощью тега мета-обновления, как показано в примере ниже:

  • <meta http-equiv="refresh" content="0;url=http://example.com/new-page/" />

Если вы вставляете этот тег в /old-page/, он немедленно перенаправит пользователя на /new-page/.

Google не запрещает этот редирект, но не рекомендует его использовать.

Тип редиректа мета-обновления должен просто работать. Мы не рекомендуем его использовать по двум причинам:

    • UX (он сохраняет страницу в истории браузера, насколько мне известно)
    • Время обработки (нам нужно проанализировать страницу, чтобы увидеть ее).

Как только он будет обработан, он будет работать так же, как и любой другой редирект.

— Джон (@JohnMu) 2 марта 2018 года

По словам Джона Мюллера, поисковые системы могут не распознавать этот тип редиректа должным образом. То же самое верно и в отношении JavaScript-редиректов.

4. Избегайте цепочек перенаправлений

Это сообщение отображается, когда у вас неверно настроено регулярное выражение и в результате возникает бесконечный цикл.

бесконечный цикл перенаправлений

Обычно это происходит, когда у вас есть цепочка перенаправлений.

Предположим, вы давно перенаправили страницу 1 на страницу 2. Возможно, вы забыли, что страница 1 перенаправлена, и решили перенаправить страницу 2 обратно на страницу 1.

В результате у вас получится правило:

  • RewriteRule ^page1 /page2 [R=301,NC,L]
  • RewriteRule ^page2 /page1 [R=301,NC,L]

Это создаст бесконечный цикл и вызовет ошибку, показанную выше.

Заключение

Знание того, что такое перенаправления и в какой ситуации требуется конкретный код состояния, является фундаментальным для правильной оптимизации веб-страниц. Это ядро ​​понимания SEO.

Многие ситуации требуют точного знания перенаправлений, например, при переносе веб-сайта на новый домен или создании временного URL-адреса для удержания веб-страницы, которая вернется под своим обычным URL-адресом.

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