Slug Generator

Перетворіть будь-який текст на чистий URL-slug

Спробувати приклад
Роздільник

Вхідний текст

Slug

Працює локально · Безпечно вставляти секрети
Slug з'явиться тут…

Що таке URL-slug?

URL-slug — це частина веб-адреси, яка ідентифікує конкретну сторінку у зрозумілій для людини формі. У URL https://example.com/blog/my-first-post slug — це my-first-post. Генератор slug перетворює заголовок або опис сторінки на рядок, що містить лише рядкові літери, цифри та дефіси (або інший обраний роздільник). Цей процес видаляє пробіли, знімає наголоси та діакритичні знаки, відкидає спеціальні символи та нормалізує пробіли до одиничних роздільників.

Генерація slug є стандартним кроком у системах керування контентом, генераторах статичних сайтів, блог-платформах і будь-якому застосунку, що формує URL-адреси на основі введення користувача. WordPress, Ghost, Hugo, Next.js і Django — всі вони містять логіку генерації slug, бо читабельні URL покращують як зручність використання, так і пошукову оптимізацію. Добре сформований slug повідомляє користувачу зміст сторінки ще до того, як він перейде за посиланням.

Термін «slug» походить з газетної справи, де він означав короткий ярлик для ідентифікації матеріалу під час виробничого процесу. У веб-розробці slug виконує ту саму функцію: це компактний, унікальний, URL-безпечний ідентифікатор, похідний від більш довгого заголовка або назви. Оскільки slug формуються програмно, надійний генератор забезпечує узгодженість на кожній сторінці та в кожній локалі.

Навіщо використовувати цей генератор slug?

Створення URL-slug вручну схильне до помилок. Забутий наголос, зайвий подвійний дефіс або необроблений крайній випадок з Unicode можуть призвести до зламаних або непривабливих URL. Цей інструмент автоматично вирішує всі ці проблеми.

Миттєве перетворення
Вставте або введіть будь-який текст і спостерігайте, як slug оновлюється в реальному часі. Без надсилання форми, без перезавантаження сторінки. Корисно, коли потрібно сформувати slug для партії заголовків статей або назв товарів.
🔒
Конфіденційність перш за все
Вся генерація slug відбувається у вашому браузері. Ваш текст ніколи не залишає сторінку, тому можна безпечно перетворювати чернетки заголовків, внутрішні назви проєктів або імена товарів, що ще не виходили.
⚙️
Налаштовуваний результат
Оберіть між дефісом, підкресленням або крапкою як роздільником. Увімкніть або вимкніть нижній регістр. Це охоплює найпоширеніші угоди щодо slug у різних фреймворках і CMS.
🌐
Обробка Unicode та наголосів
Генератор застосовує NFD-нормалізацію для видалення діакритичних знаків із букв з наголосами. Café стає cafe, naïve стає naive. Не-латинські символи, які не піддаються транслітерації, видаляються коректно.

Варіанти використання генератора slug

Фронтенд-розробник — планування маршрутів
Формуйте узгоджені slug для маршрутів сторінок у React Router, Next.js або Nuxt перед налаштуванням динамічних сегментів маршрутів. Перевіряйте, що заголовки зі спецсимволами дають чисті шляхи.
Бекенд-розробник — ідентифікатори бази даних
Створюйте URL-безпечні slug для записів бази даних, яким потрібні читабельні ідентифікатори. Slug добре працюють як вторинні ключі поруч із числовими ID для ендпоінтів REST API, наприклад /api/products/wireless-headphones.
DevOps — іменування файлів конфігурації
Перетворюйте імена сервісів або мітки середовища на безпечні для файлової системи рядки для файлів конфігурації, тегів образів Docker або назв ресурсів Kubernetes, де спеціальні символи не дозволені.
QA-інженер — генерація тестових даних
Швидко генеруйте варіанти slug із заголовків тестових випадків для перевірки маршрутизації URL, правил перенаправлення та поведінки канонічних тегів у тестових середовищах.
Інженер з даних — нормалізація стовпців
Нормалізуйте неохайні заголовки стовпців із CSV або Excel у узгоджені ідентифікатори у форматі snake_case або kebab-case для використання в схемах баз даних або конвеєрах обробки даних.
Студент — проєкти з CMS і блогами
Дізнайтеся, як працює генерація slug, коли ви створюєте блог на WordPress, Jekyll або власній CMS. Використовуйте цей інструмент, щоб порівняти свої slug з еталонною реалізацією.

Правила генерації slug та обробка символів

Генерація slug слідує передбачуваній послідовності перетворень. Розуміння кожного кроку допомагає відлагоджувати несподіваний результат або написати власну функцію slugify.

  1. 1. Нормалізація Unicode (NFD)
    Розкладіть складені символи на базовий символ і поєднувальний знак. Наприклад, é (U+00E9) стає e + combining acute accent (U+0301). Це дає змогу видалити діакритику на наступному кроці.
  2. 2. Видалення діакритичних знаків
    Видаліть усі символи блоку Unicode Combining Diacritical Marks (U+0300–U+036F). Після цього кроку café стає cafe, а Ñ стає N.
  3. 3. Видалення спецсимволів
    Замініть будь-який символ, що не є літерою, цифрою, пробілом або дефісом, пробілом. Це видаляє розділові знаки, символи та символи без ASCII-еквівалента.
  4. 4. Обрізання та стиснення пробілів
    Видаліть пробіли на початку та в кінці рядка, потім стисніть усі послідовності пробілів, підкреслень або дефісів в один обраний роздільник.
  5. 5. Застосування регістру та роздільника
    Перетворіть на нижній регістр (необов'язково) і з'єднайте слова обраним роздільником: дефісом (-), підкресленням (_) або крапкою (.).

Довідник перетворення символів

Таблиця нижче показує, як типові символи обробляються під час генерації slug:

ВхіднийВихіднийЗастосоване правило
Hello Worldhello-worldLowercase + space → hyphen
Café au Laitcafe-au-laitNFD normalization strips é → e
naïve résuménaive-resumeMultiple diacritics removed
Price: $9.99!price-9-99Symbols ($, !, :) removed
too many too-manyWhitespace trimmed and collapsed
one--two___threeone-two-threeMixed separators collapsed
Привет мирprivet-mirCyrillic (if transliteration) or removed
file_name.txtfile-name-txtDots and underscores replaced
React & Vuereact-vueAmpersand removed
2026-03-302026-03-30Digits and hyphens preserved

Приклади коду

Генерація slug у популярних мовах та фреймворках. Кожен приклад обробляє нормалізацію Unicode, видалення діакритики та вставку роздільників.

JavaScript
function slugify(text, separator = '-') {
  return text
    .normalize('NFD')                   // decompose accented chars
    .replace(/[\u0300-\u036f]/g, '')    // strip diacritics
    .toLowerCase()
    .replace(/[^\w\s-]/g, ' ')          // drop special chars
    .trim()
    .replace(/[\s_-]+/g, separator)     // collapse whitespace → separator

  // slugify('Café au Lait')      → "cafe-au-lait"
  // slugify('Hello World', '_')  → "hello_world"
}

// Node.js alternative using the `slugify` npm package:
// npm install slugify
// const slugify = require('slugify')
// slugify('Hello World', { lower: true, strict: true }) → "hello-world"
Python
import re
import unicodedata

def slugify(text: str, separator: str = '-') -> str:
    """Convert text to a URL-safe slug."""
    text = unicodedata.normalize('NFD', text)
    text = text.encode('ascii', 'ignore').decode('ascii')  # strip non-ASCII
    text = text.lower()
    text = re.sub(r'[^\w\s-]', ' ', text)
    text = text.strip()
    text = re.sub(r'[\s_-]+', separator, text)
    return text

# slugify('Café au Lait')      → "cafe-au-lait"
# slugify('Hello World', '_')  → "hello_world"

# Alternative: python-slugify (pip install python-slugify)
# from slugify import slugify
# slugify('Café au Lait')  → "cafe-au-lait"
Go
package main

import (
	"regexp"
	"strings"
	"unicode"

	"golang.org/x/text/unicode/norm"
	"golang.org/x/text/transform"
	"golang.org/x/text/runes"
)

func slugify(text string) string {
	// NFD normalize and strip diacritics
	t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC)
	result, _, _ := transform.String(t, text)

	result = strings.ToLower(result)
	re := regexp.MustCompile(`[^\w\s-]+`)
	result = re.ReplaceAllString(result, " ")
	result = strings.TrimSpace(result)
	re = regexp.MustCompile(`[\s_-]+`)
	result = re.ReplaceAllString(result, "-")
	return result
}

// slugify("Café au Lait") → "cafe-au-lait"
// slugify("Hello World")  → "hello-world"
PHP
function slugify(string $text, string $separator = '-'): string {
    // Transliterate non-ASCII characters
    $text = transliterator_transliterate(
        'Any-Latin; Latin-ASCII; Lower()', $text
    );
    // Remove anything that is not a word char, space, or hyphen
    $text = preg_replace('/[^\w\s-]/', ' ', $text);
    $text = trim($text);
    $text = preg_replace('/[\s_-]+/', $separator, $text);
    return $text;
}

// slugify('Café au Lait')      → "cafe-au-lait"
// slugify('Hello World', '_')  → "hello_world"

Часті запитання

У чому різниця між slug і URL-шляхом?
URL-шлях — це повний сегмент після домену, наприклад /blog/2026/my-post. Slug — це читабельна для людини частина, що ідентифікує конкретний ресурс у цьому шляху, зазвичай останній сегмент: my-post. Slug часто похідні від заголовків, тоді як решта шляху відображає структуру маршрутизації сайту.
Як генерація slug обробляє не-латинські системи письма, наприклад китайську або арабську?
Стандартні генератори slug, що використовують NFD-нормалізацію та видалення діакритики, не можуть транслітерувати не-латинські системи письма. Символи на зразок китайських ієрогліфів або арабських літер не мають ASCII-еквівалента, тому вони видаляються під час очищення спецсимволів. Щоб зберегти не-латинський контент у slug, потрібна бібліотека транслітерації: limax (JavaScript), python-slugify з бекендом unidecode або власна таблиця відповідностей.
Що краще використовувати в URL-slug — дефіси чи підкреслення?
Google розглядає дефіси як роздільники слів, а підкреслення — як з'єднувачі слів. Slug my-first-post читається як три слова (my, first, post), тоді як my_first_post — як один токен. З точки зору SEO дефіси є стандартним вибором для URL-slug. Підкреслення поширені в іменах файлів, стовпцях баз даних і програмних ідентифікаторах, де вони слугують безпечними для змінних з'єднувачами.
Якої довжини має бути URL-slug?
Google відображає приблизно 60 символів URL у результатах пошуку перед скороченням. Коротші slug легше читати, поширювати й набирати. Орієнтуйтеся на 3–6 слів. Видаляйте стоп-слова (the, a, an, and, or, in), коли вони не змінюють сенс: how-to-build-nextjs-app кращий за how-to-build-a-next-js-app-in-2026.
Чи є генерація slug тим самим, що й URL-кодування?
Ні. URL-кодування (percent-encoding) замінює небезпечні символи трійками зі знаком відсотка, наприклад %20 для пробілу. Генерація slug повністю видаляє або замінює небезпечні символи, даючи чистий рядок без артефактів кодування. Slug ніколи не містить знаків відсотка, пробілів або спецсимволів. URL-кодування зберігає вихідний вміст; генерація slug перетворює його на щось нове.
Чи можуть два різні заголовки дати однаковий slug?
Так. Заголовки, що відрізняються лише розділовими знаками, наголосами або регістром, часто зводяться до одного slug. Наприклад, Résumé Tips і Resume Tips обидва дають resume-tips. У контексті CMS або бази даних потрібна перевірка унікальності, що додає числовий суфікс (resume-tips-2) у разі конфлікту.
Як генерувати slug у WordPress або Django?
WordPress автоматично генерує slug із заголовка запису за допомогою sanitize_title(). Slug можна редагувати в редакторі запису. Django надає функцію slugify() у django.utils.text, яка добре обробляє ASCII-введення. Для підтримки Unicode передайте allow_unicode=True. Обидві платформи зберігають slug у базі даних поруч із повним заголовком.