Текст Slugify (URL)
Нормалізуйте текст у URL-дружній slug, підтримує нижній регістр, роздільники, власні стоп-слова.
Чому потрібен Slugify?
🔍 Оптимізація для SEO
Ключові слова в URL допомагають пошуковим системам розуміти вміст сторінки та покращують її позиції. Наприклад, example.com/blog/how-to-learn-javascript значно краще, ніж example.com/blog/123.
👁️ Читабельність та обмін
Користувачі зразу розуміють вміст за URL — це зручно для обміну в соцмережах, легше запам'ятовувати та вводити вручну.
💻 Сумісність з системами
Уникніть помилок через спеціальні символи в іменах файлів чи URL — гарантія сумісності між платформами (Windows, Linux, macOS) та уникнення проблем з кодуванням.
🗄️ Дружній до баз даних
Використовуйте як унікальний ідентифікатор (наприклад, ім'я користувача, теги) — уникайте ризиків SQL-ін'єкцій, полегшуйте індексацію та запити.
Що таке Slugify?
Slug — це нормалізована версія тексту, призначена для використання як URL, ім'я файлу чи ідентифікатор. Звичайні операції: приведення до одного регістру, видалення пунктуації, з'єднання слів за допомогою роздільників.
- Пріоритет ASCII: максимально видаляйте акценти та символи, залишаючи лише літери, цифри та пробіли
- Сумісність Unicode: нормалізація NFKD для більшості символів різних мов
- URL-дружній: результат містить лише літери, цифри та роздільники — готовий до використання в шляхах
Часті питання
Q: Як обробляються китайські символи?
A: За замовчуванням акценти видаляються, залишаються латинські літери пінінь. Чистий китайський текст може стати порожнім. Рекомендується спочатку вручну перетворити на пінінь, а потім застосувати slugify, або скористатися інструментом для перетворення китайської мови на пінінь.
Q: Чому мій результат порожній?
A: Можливо, вхідні дані складаються лише з розділових знаків/символів/пробілів, або після фільтрації стоп-слів не залишилося жодного слова. Спробуйте вимкнути опцію фільтрації стоп-слів або змінити вхідний текст.
Q: Який роздільник краще використовувати — - чи _?
A: Для SEO рекомендується використовувати - (дефіс), оскільки Google сприймає його як пробіл. _ (підкреслення) сприймається як з’єднувальний символ, що погіршує розбиття на слова. Для імен файлів можна вибирати будь-який.
Q: Чи є обмеження на довжину slug?
A: Технічно обмежень немає, але рекомендується триматися в межах 50 символів для зручного відображення URL та SEO. Дуже довгі slug можуть бути обрізані пошуковими системами.
Найкращі практики
Рекомендовані дії
- ✓ Зберігайте короткі (рекомендується < 50 символів)
- ✓ Уникайте спеціальних символів, використовуйте лише літери, цифри та роздільники
- ✓ Використовуйте нижній регістр, щоб уникнути проблем з чутливістю до регістру
- ✓ Видаляйте стоп-слова для збільшення семантичної щільності
Що уникати
- ✗ Не включайте конфіденційну інформацію (наприклад, ID, електронну пошту, паролі)
- ✗ Не використовуйте спеціальні символи (наприклад, @#$%^&*)
- ✗ Не залишайте пробіли або кілька роздільників поспіль
- ✗ Не дублюйте однакові слова
Технічні деталі
Використовується 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("^-+|-+$", "");
}