Генератор Slug/ URL-дружественные имена

Преобразуйте заголовки в URL-дружественные slug — обработка акцентов, CJK-символов, пользовательских разделителей и максимальной длины.

Разделитель
Макс. длина
Текст / заголовок
Slug
0 симв.
Slug появится здесь…
Попробовать пример

Этот инструмент решил вашу проблему?

Что такое URL-слаг

URL-слаг — это人 читаемая часть URL, идентифицирующая特定ную страницу,通常 состоящая из строчных букв, цифр и дефисов. В `example.com/posts/how-to-seo` слаг — это `how-to-seo`. Хорошие слаги короткие, читаемые и содержат ключевые слова — важно для SEO и用户体验.

Как создавать хорошие слаги

Преобразуйте в нижний регистр, замените пробелы и特殊ные символы дефисами, удалите стоп-слова и сохраните основные ключевые слова. Более短ие URL лучше, но сохраняйте читаемость. Избегайте дат и ID в слагах除非 необходимо.

Примеры кода

JavaScript / Node.js
// npm install slugify
import slugify from 'slugify';

slugify('Hello World!', { lower: true })
// 'hello-world'

slugify('Cafe au Lait', { lower: true })
// 'cafe-au-lait'

// npm install limax (CJK support)
import limax from 'limax';
limax('你好世界')       // 'ni-hao-shi-jie' (pinyin)
limax('東京')           // 'dong-jing'

// Manual (no deps)
const slugify = (s) => s
  .toLowerCase()
  .normalize('NFD')
  .replace(/[\u0300-\u036f]/g, '')
  .replace(/[^a-z0-9]+/g, '-')
  .replace(/^-|-$/g, '');
Python
# pip install python-slugify
from slugify import slugify

slugify('Hello World!')
# 'hello-world'

slugify('Cafe au Lait')
# 'cafe-au-lait'

slugify('你好世界', allow_unicode=True)
# '你好世界'

# With max length
slugify('A very long title that should be truncated',
        max_length=30, word_boundary=True)
# 'a-very-long-title-that-should'
Go
// go get github.com/gosimple/slug
import "github.com/gosimple/slug"

slug.Make("Hello World!")
// "hello-world"

slug.Make("Cafe au Lait")
// "cafe-au-lait"

// Custom separator
slug.CustomMake("Hello World", "_")
// "hello_world"

// Truncate
s := slug.Make("A very long title here")
if len(s) > 50 {
    s = s[:50]
}
PHP / WordPress
<?php
// WordPress built-in
$slug = sanitize_title('Hello World! Cafe');
// 'hello-world-cafe'

// PHP custom
function to_slug(string $s): string {
    $s = mb_strtolower($s, 'UTF-8');
    $s = iconv('UTF-8', 'ASCII//TRANSLIT', $s);
    $s = preg_replace('/[^a-z0-9]+/', '-', $s);
    return trim($s, '-');
}

// Laravel
use Illuminate\Support\Str;
Str::slug('Hello World!');    // 'hello-world'
Str::slug('Hello World', '_'); // 'hello_world'

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

Что такое URL slug?
Slug — это читаемая часть URL, которая идентифицирует конкретную страницу. Он состоит из строчных букв, цифр и дефисов, например /blog/my-first-post. Хорошие slug-и лаконичны, читабельны и благоприятны для SEO. Они избегают специальных символов, пробелов, заглавных букв и не-ASCII символов (если только не используются URL на родном языке).
Почему в slug используют дефисы, а не подчеркивания?
Google воспринимает дефисы (-) как разделители слов, распознавая my-blog-post как три отдельных слова. Подчеркивания (_) рассматриваются как соединители — my_blog_post воспринимается как одно слово. Поэтому дефисы лучше для SEO. WordPress, GitHub и Shopify также используют дефисы по умолчанию по той же причине.
Как обрабатывать CJK-символы в slug?
Два основных подхода: 1) Транслитерация в пиньинь/ромадзи (например, 你好世界 → ni-hao-shi-jie) — лучше для SEO на латинице. 2) Использовать нативные символы напрямую (например, /blog/你好世界) — современные браузеры и поисковые системы поддерживают это, но ссылки будут отображаться в процентном кодировании при публикации. Этот инструмент поддерживает оба режима.
Какова идеальная длина slug?
Лучшая практика SEO рекомендует держать slug в пределах 60-75 символов, чтобы избежать обрезки в результатах поиска. Включите целевое ключевое слово, удалите стоп-слова (a, the, of и т. д.). Пример: 'how-to-optimize-nextjs-performance' — эффективный slug. Слишком длинные slug разбавляют вес ключевых слов.
Какие символы следует удалять при создании slug?
Удалить или заменить: пробелы (→ разделитель), специальные символы (!@#$%^&*()+=[]{}|;:',.<>?/\`~), символы с ударениями (e→e, u→u) и управляющие символы. Сохранить: буквы (a-z), цифры (0-9), разделители (-._). Сохранять ли CJK-символы зависит от вашего случая использования.
Как генерировать slug в Next.js или Node.js?
В Node.js: npm install slugify или limax (поддержка CJK/пиньинь). Базовая ручная реализация: str.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''). В файловой маршрутизации Next.js slug обычно берется из имени файла или поля базы данных. В WordPress встроена функция sanitize_title().