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

Ограничение длины и набора символов в маршруте

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

Чем опасен слишком «жадный» маршрут

Шаблон вида «любое значение после /blog/» соответствует бесконечному числу адресов. Если приложение на каждый из них отвечает страницей или ошибкой с кодом 200, поисковая система может начать обходить и запоминать мусорные варианты.

Ограничение допустимых символов

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

Route: /blog/{slug}
Требование: [a-z0-9-]+

Ограничение длины сегмента

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

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

Что отвечать на неподходящие значения

Значение, не соответствующее требованию, не находит маршрута и получает обычный ответ 404. Это правильное поведение: страницы по такому адресу не существует, и робот не должен считать её реальной. Подробнее — в статье про обработку неизвестных адресов.

Согласуйте ограничения с генерацией слагов

Важно: правило в маршруте и алгоритм создания слага должны совпадать. Иначе легитимная страница может получить слаг, который её же маршрут не пропустит. Про пределы платформ читайте в статье про длину и формат адреса.

Ограничение глубины вложенности

Маршрут, допускающий произвольное число вложенных сегментов, открывает путь к бесконечному пространству адресов. Даже безобидная цепочка вида /a/b/c/d/e/… может быть перебрана автоматически. Задайте предельную глубину и для публичных разделов не допускайте вложенности больше нескольких уровней.

  • каталог — обычно два-три уровня;
  • статьи и блог — один-два уровня;
  • служебные пути — фиксированный набор без вложенности.

Ограничения для параметров запроса

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

Как проверить, что ограничения работают

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

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

Зачем ограничивать символы в маршруте?

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

Какой код отдавать, если значение не подходит под шаблон?

Обычный код 404: страницы по такому адресу не существует.

Как согласовать ограничения с созданием слагов?

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

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

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