URL-адреса має обмежений набір «безпечних» символів: латинські літери, цифри, дефіс і кілька інших знаків. Slug — це перетворена версія довільного тексту (наприклад, заголовка статті), яка вписується в ці обмеження й водночас лишається читабельною для людини.
Що робить перетворення на slug
- Приводить усі літери до нижнього регістру.
- Замінює пробіли та розділові знаки на дефіси.
- Транслітерує або видаляє символи поза базовою латиницею (наприклад, кирилицю чи діакритичні знаки).
- Прибирає повторювані дефіси й дефіси на початку та в кінці рядка.
Наприклад, заголовок «Привіт, Світ! Як справи?» перетворюється на щось на кшталт pryvit-svit-yak-spravy.
Чому просто URL-encode не підходить
Percent-encoding (наприклад, %D0%9F%D1%80%D0%B8%D0%B2%D1%96%D1%82 для кирилиці) технічно валідний в URL, але нечитабельний для людини і виглядає ненадійно в адресному рядку чи при копіюванні посилання. Slug вирішує саме проблему читабельності, а не лише технічної валідності.
Навіщо це потрібно
- Автоматично генерувати URL-адресу статті блогу з її заголовка.
- Створити читабельний ідентифікатор із назви продукту для інтернет-магазину.
- Сформувати ім’я файлу чи CSS-клас із довільного тексту, уникнувши недопустимих символів.
Колізії: коли різні заголовки дають однаковий slug
Заголовки «Привіт, світ!» і «привіт світ» після нормалізації (нижній регістр, видалення пунктуації) перетворяться на той самий slug pryvit-svit, хоча вихідні тексти різні. Якщо slug використовується як унікальний ідентифікатор (наприклад, у URL статті), таку колізію потрібно вирішувати додатково — типово додаванням числового суфікса чи ID до дублікату.