Сколько адресов у одной страницы
Без нормализации страница нередко доступна сразу в нескольких видах: со слешем и без него, с заглавными буквами, с двойными слешами, с лишним фрагментом в конце. Для человека это одна страница, для поисковой системы — потенциальные дубли, как объясняет статья про дубли из-за адресов.
Что приводить к единому виду
- регистр букв — к нижнему;
- завершающий слеш — всегда или никогда;
- повторяющиеся слеши — к одному;
- служебные фрагменты вроде index.html — убирать;
- порядок и набор параметров запроса — по установленному правилу.
Нормализация через постоянный редирект
Не стоит молча обрабатывать любой вариант. Лучше перенаправлять запрос на единственный правильный адрес кодом 301, чтобы поисковая система запомнила именно его.
// Псевдокод
path = request.path
clean = normalize(path) // нижний регистр, один слеш, без index.html
if (clean !== path) redirect(301, clean)
Порядок операций имеет значение
Нормализацию выполняют до выбора маршрута: иначе разные варианты адреса совпадут с разными маршрутами или вовсе ни с одним. Кроме того, перед сравнением полезно привести к общему виду и символы Unicode, как описано в статье про нормализацию Unicode.
Как проверить результат
Тест: откройте одну и ту же страницу с заглавной буквой, с двойным слешем и без завершающего слеша. Каждый вариант должен вести одним редиректом на единственный правильный адрес.
Параметры запроса и их порядок
Адрес с теми же параметрами, записанными в другом порядке, — это для сервера другой запрос, хотя содержимое одинаково. Чтобы не плодить варианты, сортируйте параметры по алфавиту, отбрасывайте пустые и технические, а для значимых задавайте канонический вид.
- уберите служебные метки рекламных кампаний;
- отсортируйте оставшиеся параметры;
- перенаправьте на канонический вид или укажите его в мета-теге.
Кириллические адреса и процентное кодирование
Один и тот же кириллический сегмент может приходить в разных формах записи: в виде букв или в виде процентных кодов, а также с разными вариантами кодирования символов. Перед сравнением приводите значение к единому виду, иначе одна и та же страница получит несколько «разных» адресов.
Частые вопросы
Зачем приводить адрес к единому виду?
Чтобы одна страница не была доступна по нескольким адресам, которые поисковая система воспримет как дубли.
Как правильно перенаправлять неправильные варианты адреса?
Постоянным редиректом с кодом 301 на единственный основной вариант.
На каком этапе выполнять нормализацию?
До выбора маршрута, чтобы все варианты записи адреса гарантированно приводились к одному виду.
Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.