Начните с https://example.com/p?q=a%20b&utm_source=old&flag&utm_source=older#buy. Введите linkedin, paid_social, launch и hero/card.
Ожидаемый URL
Результат: https://example.com/p?q=a%20b&flag&utm_source=linkedin&utm_medium=paid_social&utm_campaign=launch&utm_content=hero%2Fcard#buy. В q сохраняется %20, флаг остаётся без знака равенства, слеш content становится %2F, а #buy остаётся в конце.
Ожидаемые данные
Сохраняются два сторонних сегмента, оба utm_source в нижнем регистре заменяются, добавляются четыре пары кампании. Имя UTM_SOURCE в другом регистре считалось бы сторонним и осталось бы видимым: совпадение точное и учитывает регистр. Проверяйте такие имена вручную, не полагаясь на скрытое исправление.
Повторите и проверьте результат
Загрузите проверенный пример в UTMLink или введите значения точно как указано. Соберите ссылку и посимвольно сравните каждый сохранённый сегмент, пару кампании и фрагмент с ожидаемой строкой. Счётчики объясняют преобразование без отправки адреса: сохранено — число сторонних исходных сегментов, заменено — число удалённых вхождений UTM в нижнем регистре, добавлено — число непустых итоговых полей. Измените одно необязательное значение, соберите снова и убедитесь, что старый результат исчез до появления нового. Очистите форму и перезагрузите страницу: история не должна вернуться, потому что первая версия намеренно не хранит введённые и созданные ссылки.