Создать URL
Генератор Правила транслитерации Как сделать ЧПУ Блог Вопросы и ответы Создать URL
Разработка

История адресов в базе: таблица переездов

Разобрав генерацию слагов, посмотрим, как сохранить память об адресах, которые записи носили раньше.

Проблема, которую решает история адресов

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

Простая структура таблицы

slug_history
  id            — идентификатор
  entity_type   — тип записи (товар, статья)
  entity_id     — идентификатор записи
  old_slug      — прежний слаг (уникальный)
  changed_at    — дата смены

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

Как обрабатывать обращение к старому адресу

  1. ищем запись по актуальному слагу;
  2. если не нашли, ищем слаг в таблице истории;
  3. при совпадении отдаём постоянный редирект 301 на актуальный адрес;
  4. иначе отдаём код 404.

Предотвращение цепочек и циклов

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

Связь: подробнее о вреде цепочек — в статье про цепочки редиректов.

Нужно ли когда-нибудь чистить историю

Таблица растёт медленно, а её польза сохраняется годами, пока на старые адреса ссылаются извне. Удалять записи имеет смысл только если по журналу видно, что обращения к ним прекратились полностью.

Возврат к прежнему адресу

Редактор может передумать и вернуть записи прежний слаг. Приложение должно корректно обработать такую ситуацию: запись из таблицы истории удаляется, а текущий слаг снова становится основным. Иначе получится петля — актуальный адрес будет перенаправлять сам на себя.

  • перед сохранением проверяйте наличие слага в истории этой же записи;
  • удаляйте такую строку из истории при возврате;
  • для слагов других записей возвращать значение нельзя.

История как журнал для аудита

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

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

Зачем хранить прежние слаги записей?

Чтобы при обращении по старому адресу автоматически отдавать постоянный редирект на актуальный и не терять трафик и ссылки.

Какой код ответа использовать для старых адресов?

Постоянный редирект 301 на актуальный адрес записи.

Можно ли отдать освободившийся слаг другой записи?

Нет, иначе история адресов начнёт вести на неправильное содержимое; освободившиеся значения лучше резервировать.

Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.

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