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

Нормализуйте текст в URL-дружественный slug с поддержкой приведения к нижнему регистру, разделителей и настраиваемого удаления стоп-слов.

Параметры и ввод

Рекомендуется использовать - или _, длина 1–3 символа

Результат

Зачем нужен Slugify?

🔍 Оптимизация для SEO

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

👁️ Читаемость и удобство обмена

Пользователи сразу понимают содержание по URL, что делает его более удобным для обмена в соцсетях и легким для запоминания и ручного ввода.

💻 Совместимость с системами

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

🗄️ Дружественность к базам данных

Используйте slug как уникальный идентификатор (например, для имён пользователей или тегов), избегайте рисков SQL-инъекций, упрощайте индексацию и запросы.

Что такое Slugify?

Slug — это стандартизированная строка, используемая в качестве URL, имени файла или идентификатора. Типичные операции включают унификацию регистра, удаление знаков препинания и соединение слов с помощью разделителя.

  • Приоритет ASCII: удалить акценты и символы, оставив только буквы, цифры и пробелы
  • Совместимость с Unicode: нормализация NFKD для большинства символов языков
  • URL-дружественный: результат содержит только буквы, цифры и разделитель — подходит для путей

Сценарии использования

URL статей в блоге

Как изучить JavaScript?

how-to-learn-javascript

Именование файлов

Документ с требованиями к продукту v2.0.docx

product-requirements-v2-0.docx

Идентификаторы базы данных

Пользователь-张三

user-zhang-san

Часто задаваемые вопросы

В: Как обрабатываются китайские символы?

О: По умолчанию диакритические знаки удаляются, а сохраняются только латинские буквы пиньиня. Чистый китайский текст может превратиться в пустую строку. Рекомендуется сначала вручную преобразовать в пиньинь, а затем применить slugify, или использовать инструмент преобразования китайского пиньиня.

В: Почему мой результат пустой?

О: Возможно, ввод состоит только из знаков препинания/символов/пробелов, или после фильтрации стоп-слов не осталось слов. Попробуйте отключить опцию фильтрации стоп-слов или изменить вводимый текст.

В: Какой разделитель лучше использовать — дефис (-) или подчеркивание (_)?

О: Для SEO рекомендуется использовать дефис (-), так как Google воспринимает его как пробел. Подчеркивание (_) воспринимается как соединительный символ, что затрудняет разбиение на слова. Для имен файлов можно выбирать любой вариант.

В: Есть ли ограничения на длину slug?

О: Технически ограничений нет, но рекомендуется сохранять длину до 50 символов для удобства отображения URL и SEO. Слишком длинные slug могут быть обрезаны поисковыми системами.

Лучшие практики

Рекомендуемые подходы

  • Сохраняйте краткость (рекомендуется < 50 символов)
  • Избегайте специальных символов; используйте только буквы, цифры и разделители
  • Приводите к нижнему регистру, чтобы избежать проблем с регистром
  • Удаляйте стоп-слова для повышения семантической плотности

Чего избегать

  • Не включайте конфиденциальную информацию (например, ID, электронную почту, пароли)
  • Не используйте специальные символы (например, @#$%^&*)
  • Не оставляйте пробелы или множественные разделители подряд
  • Не повторяйте одни и те же слова

Технические заметки

Нормализация 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("^-+|-+$", "");
}