Текстовый slugify (URL)

Професійний інструмент для текстового slugify, який нормалізує текст у зручні для URL слаги, підтримуючи перетворення на нижній регістр, користувацькі роздільники та видалення англійських стоп-слів. Використовує нормалізацію Unicode для обробки символів більшості мов, забезпечуючи, що згенеровані слаги відповідають найкращим практикам SEO. Ідеально для URL блогових дописів, імен файлів, ідентифікаторів баз даних та інших сценаріїв. Повністю обробляється локально для захисту вашої приватності — реєстрація не потрібна. Надає детальні рекомендації з використання та найкращих практик, допомагаючи згенерувати високоякісні слаги.

Параметри та ввід

Рекомендовано: використовуйте - або _, довжина 1–3 символи

Результат

Навіщо використовувати Slugify?

🔍 Оптимізація SEO

Ключові слова в URL допомагають пошуковим системам зрозуміти зміст сторінки та покращують позиції в результатах пошуку. Наприклад, example.com/blog/how-to-learn-javascript ефективніший за example.com/blog/123.

👁️ Читабельність та поширення

Користувачі можуть негайно зрозуміти зміст за URL. Шляхи (slugs) краще поширюються в соціальних мережах та легше запам'ятовуються або вводяться вручну.

💻 Сумісність з системами

Запобігає помилкам, викликаним спеціальними символами в назвах файлів або URL. Забезпечує кросплатформну сумісність (Windows/Linux/macOS) та запобігає проблемам з кодуванням.

🗄️ Зручність для бази даних

Використовуються як унікальні ідентифікатори (наприклад, імена користувачів, теги), зменшують ризики SQL-ін'єкцій та покращують індексацію та продуктивність запитів.

Що таке Slugify?

Слаг — це скорочена, стандартизована версія тексту, що використовується як URL, ім'я файлу або ідентифікатор. Стандартна обробка включає нормалізацію регістру, видалення пунктуації та об'єднання слів роздільниками.

  • Пріоритет ASCII: Видалити акценти та символи, залишити лише буквено-цифрові символи та пробіли
  • Сумісність з Unicode: Нормалізувати символи більшості мов за допомогою NFKD перед обробкою
  • Безпечно для URL: Вихід містить лише літери, цифри та роздільники — готовий до прямого використання в шляхах

Випадки використання

URL для публікацій блогу

Як вивчати JavaScript?

yak-vyvchaty-javascript

Назви файлів

Документ вимог до продукту v2.0.docx

dokument-vymog-do-produktu-v2-0.docx

Ідентифікатор для бази даних

Користувач-Чжан-Сань

korystuvach-zhang-san

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

З: Як обробляються китайські символи?

А: За замовчуванням діакритики видаляються, а літери піньїню залишаються. Чистий китайський текст може бути порожнім; рекомендується вручну перетворити його на піньїнь перед slugізацією або використати інструмент для перетворення китайського тексту на піньїнь.

З: Чому результат порожній?

А: Ваше введення може складатися виключно з розділових знаків, символів або пробілів, або всі слова можуть бути видалені фільтром стоп-слів. Спробуйте вимкнути опцію стоп-слів або налаштувати введення.

З: Чи варто використовувати - чи _ як роздільник?

А: Для SEO використовуйте - (дефіс), оскільки Google розглядає його як пробіл; _ (підкреслення) розглядається як символ злиття, що заважає розділенню слів. Для назв файлів підходить будь-який варіант.

З: Чи є обмеження за довжиною для шляхів (slugs)?

А: Технічних обмежень немає, але рекомендується зберігати шляхи довжиною менше 50 символів для кращого відображення в URL та SEO. Надто довгі шляхи можуть бути обрізані пошуковими системами.

Найкращі практики

Рекомендовані практики

  • ✓ Зробіть коротко (рекомендовано < 50 символів)
  • ✓ Уникайте спеціальних символів; використовуйте лише літери, цифри та роздільники
  • ✓ Використовуйте мали літери, щоб уникнути проблем з чутливістю до регістру
  • ✓ Видаліть стоп-слова для підвищення семантичної щільності

Практики, яких потрібно уникати

  • ✗ Не вмикайте чутливу інформацію (напр., ідентифікатори, електронні пошти, паролі)
  • ✗ Не використовуйте спеціальні символи (напр., @#$%^&*)
  • ✗ Не залишайте пробіли або послідовні роздільники
  • ✗ Не повторюйте одне й те саме слово

Технічні деталі

Нормалізація Unicode:

Використовує розкладання NFKD + видалення сполучених діакритичних знаків (\p{M}), перетворюючи Café на Cafe. Підтримує більшість латинських символів.

Список стоп-слів:

Базується на поширених англійських словах (a/an/the/and/or/of/to/in/on/for/at/by/with); можна настроювати. Китайські стоп-слова потребують окремої обробки.

Сумісність з браузерами:

Потребує підтримки ES6+ та регулярних виразів Unicode (\p{...}). Підтримується в сучасних браузерах: Chrome 64+, Firefox 78+, Safari 11.1+.

Як згенерувати slug за допомогою мови програмування?

JavaScript

function slugify(text) {
  return text
    .toLowerCase()
    .normalize("NFKD")
    .replace(/[\u0300-\u036f]/g, "")
    .replace(/[^\w\s-]/g, "")
    .trim()
    .replace(/[\s_-]+/g, "-")
    .replace(/^-+|-+$/g, "");
}

PHP

function slugify($text) {
  $text = mb_strtolower($text);
  $text = iconv("UTF-8", "ASCII//TRANSLIT", $text);
  $text = preg_replace("/[^\w\s-]/", "", $text);
  $text = preg_replace("/[\s_-]+/", "-", $text);
  return trim($text, "-");
}

Python

import re
import unicodedata

def slugify(text):
    text = text.lower()
    text = unicodedata.normalize("NFKD", text)
    text = text.encode("ascii", "ignore").decode("ascii")
    text = re.sub(r"[^\w\s-]", "", text)
    text = re.sub(r"[\s_-]+", "-", text)
    return text.strip("-")

Go

import (
    "regexp"
    "strings"
    "golang.org/x/text/unicode/norm"
)

func Slugify(text string) string {
    text = strings.ToLower(text)
    text = norm.NFKD.String(text)
    re := regexp.MustCompile(`[^\w\s-]`)
    text = re.ReplaceAllString(text, "")
    re = regexp.MustCompile(`[\s_-]+`)
    text = re.ReplaceAllString(text, "-")
    return strings.Trim(text, "-")
}

Ruby

require "unicode"

def slugify(text)
  text = text.downcase
  text = Unicode.nfkd(text).gsub(/[^\x00-\x7F]/, "")
  text = text.gsub(/[^\w\s-]/, "")
  text = text.gsub(/[\s_-]+/, "-")
  text.strip.gsub(/^-+|-+$/, "")
end

Java

import java.text.Normalizer;

public static String slugify(String text) {
    text = text.toLowerCase();
    text = Normalizer.normalize(text, Normalizer.Form.NFKD);
    text = text.replaceAll("[^\\w\\s-]", "");
    text = text.replaceAll("[\\s_-]+", "-");
    return text.replaceAll("^-+|-+$", "");
}