Чем опасен слишком «жадный» маршрут
Шаблон вида «любое значение после /blog/» соответствует бесконечному числу адресов. Если приложение на каждый из них отвечает страницей или ошибкой с кодом 200, поисковая система может начать обходить и запоминать мусорные варианты.
Ограничение допустимых символов
Разумный минимум для слага — строчные латинские буквы, цифры и дефис. Всё остальное отсекается на уровне описания маршрута.
Route: /blog/{slug}
Требование: [a-z0-9-]+
Ограничение длины сегмента
- задайте максимальную длину, например шестьдесят-сто символов;
- для чисел укажите допустимое количество цифр;
- для вложенных путей ограничьте общую глубину.
Слишком длинный сегмент почти наверняка ошибка или попытка проверки уязвимостей и обрабатывать его как содержимое не нужно.
Что отвечать на неподходящие значения
Значение, не соответствующее требованию, не находит маршрута и получает обычный ответ 404. Это правильное поведение: страницы по такому адресу не существует, и робот не должен считать её реальной. Подробнее — в статье про обработку неизвестных адресов.
Согласуйте ограничения с генерацией слагов
Важно: правило в маршруте и алгоритм создания слага должны совпадать. Иначе легитимная страница может получить слаг, который её же маршрут не пропустит. Про пределы платформ читайте в статье про длину и формат адреса.
Ограничение глубины вложенности
Маршрут, допускающий произвольное число вложенных сегментов, открывает путь к бесконечному пространству адресов. Даже безобидная цепочка вида /a/b/c/d/e/… может быть перебрана автоматически. Задайте предельную глубину и для публичных разделов не допускайте вложенности больше нескольких уровней.
- каталог — обычно два-три уровня;
- статьи и блог — один-два уровня;
- служебные пути — фиксированный набор без вложенности.
Ограничения для параметров запроса
Похожие ограничения нужны и для параметров: допустимые значения сортировки, номера страниц, идентификаторы фильтров. Номер страницы пагинации не может быть отрицательным или превышать реальное число страниц — за пределами диапазона нужно отдавать ошибку, а не пустую страницу с кодом 200.
Как проверить, что ограничения работают
Отправьте на сайт несколько заведомо неправильных адресов: с очень длинным сегментом, с заглавными буквами, со странными символами. Каждый должен вернуть код 404, а не страницу с кодом 200. Полезно также прогнать сайт краулером и убедиться, что он не находит бесконечных цепочек адресов.
Частые вопросы
Зачем ограничивать символы в маршруте?
Чтобы маршрут не принимал бесконечное число посторонних значений и не порождал лишние адреса, которые попадут в индекс.
Какой код отдавать, если значение не подходит под шаблон?
Обычный код 404: страницы по такому адресу не существует.
Как согласовать ограничения с созданием слагов?
Использовать одно и то же правило и при генерации слага, и в описании маршрута, чтобы допустимые значения совпадали.
Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.