Транслітерація·UA

Генератор слагів для URL

Перетворює український заголовок на адресу сторінки: транслітерація за офіційною таблицею КМУ № 55, далі нижній регістр і заміна всього іншого на дефіси. Показуємо кожен крок, щоб було видно, звідки взявся результат.

Слаг для URL
...

Чому саме паспортна таблиця

Для URL немає обов'язкового стандарту, тож теоретично можна вигадати власну схему. Але якщо сайт українською, то збіг з офіційним написанням дає практичну користь: адреса сторінки про Запоріжжя виглядає як zaporizhzhia, як і в документах та на мапах, а не як zaporozhye з російської форми. Ті самі правила діють у нашому конвертері, тому результати не розходяться.

Що робить генератор після транслітерації

Функція для вашого проєкту

Якщо слаги треба генерувати в коді, ось самодостатня функція без залежностей. Вона реалізує ту саму таблицю, включно з правилом зг у вигляді zgh і окремими формами Я, Ю, Є, Ї, Й на початку слова.

// Транслітерація КМУ-2010 + URL-безпечний слаг
const TABLE = {
  а:"a", б:"b", в:"v", г:"h", ґ:"g", д:"d", е:"e", є:"ie", ж:"zh",
  з:"z", и:"y", і:"i", ї:"i", й:"i", к:"k", л:"l", м:"m", н:"n",
  о:"o", п:"p", р:"r", с:"s", т:"t", у:"u", ф:"f", х:"kh", ц:"ts",
  ч:"ch", ш:"sh", щ:"shch", ю:"iu", я:"ia", ь:"", "'":"",
};
const INITIAL = { є:"ye", ю:"yu", я:"ya", ї:"yi", й:"y" };

export function slugify(text) {
  let out = "";
  let atWordStart = true;
  let prev = "";
  for (const ch of text.toLowerCase()) {
    if (ch === "г" && prev === "з") { out += "gh"; prev = ch; atWordStart = false; continue; }
    const mapped = atWordStart && ch in INITIAL ? INITIAL[ch] : TABLE[ch];
    if (mapped === undefined) { out += ch; atWordStart = true; prev = ""; continue; }
    out += mapped;
    if (ch !== "ь" && ch !== "'") atWordStart = false;
    prev = ch;
  }
  return out
    .normalize("NFD").replace(/[\u0300-\u036f]/g, "")
    .replace(/[^a-z0-9]+/g, "-")
    .replace(/-{2,}/g, "-")
    .replace(/^-|-$/g, "");
}

Для пакетної обробки списку заголовків зручніший інструмент для Excel і CSV: він транслітерує цілий стовпчик у браузері.

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

Чому не використати Google Translate для слагів?
Він часто дає російську транслітерацію або переклад замість передавання літер: Kiev замість Kyiv, Sergey замість Serhii. Для URL це означає адреси, які не збігаються з офіційним написанням і виглядають чужими для української аудиторії.
Чи можна змінювати вже опубліковані слаги?
Небажано. Зміна адреси скидає накопичені сигнали сторінки, тому робіть це лише разом із постійним перенаправленням 301 зі старої адреси на нову.
Дефіс чи підкреслення в URL?
Дефіс. Пошукові системи трактують дефіс як межу між словами, а підкреслення склеює слова в одне. Підкреслення доречне хіба що в іменах файлів або технічних ідентифікаторах.
Що робиться з апострофом і м'яким знаком?
Вони зникають, бо цього вимагає сама таблиця КМУ № 55: Мар'яна стає mariana, Львів стає lviv. Це узгоджено з написанням у документах, тому окремого правила для URL вигадувати не треба.