Slug Üreteci
Herhangi bir metni temiz ve URL dostu bir slug'a dönüştürün
Giriş metni
Slug
URL Slug Nedir?
URL slug, bir web adresinin belirli bir sayfayı insan tarafından okunabilir biçimde tanımlayan bölümüdür. https://example.com/blog/ilk-yazim adresinde slug ilk-yazi kısmıdır. Bir slug üreteci, sayfa başlığını veya açıklamasını yalnızca küçük harf, rakam ve kısa çizgi (ya da seçilen başka bir ayırıcı) içeren bir dizgeye dönüştürür. Bu işlem boşlukları kaldırır, aksan işaretlerini ve diakritik karakterleri temizler, özel karakterleri siler ve ardışık boşlukları tek bir ayırıcıya indirger.
Slug üretimi, içerik yönetim sistemlerinde, statik site üreticilerinde, blog platformlarında ve URL'leri kullanıcı girdisinden türeten her uygulamada standart bir adımdır. WordPress, Ghost, Hugo, Next.js ve Django slug üretimi mantığını bünyesinde barındırır; çünkü okunabilir URL'ler hem kullanılabilirliği hem de arama motoru optimizasyonunu iyileştirir. İyi biçimlendirilmiş bir slug, kullanıcıya bağlantıya tıklamadan önce sayfanın içeriğini anlatır.
"Slug" terimi gazetecilikten gelir; burada bir haberi üretim sürecinde tanımlamak için kullanılan kısa etiketi ifade ederdi. Web geliştirmede slug aynı işlevi görür: daha uzun bir başlık veya isimden türetilen, kompakt, benzersiz ve URL'de kullanılabilir bir tanımlayıcıdır. Slug'lar programatik olarak türetildiğinden güvenilir bir slug üreteci, her sayfa ve yerel ayar genelinde tutarlılığı sağlar.
Bu Slug Üreteci Neden Kullanılır?
URL slug'larını elle oluşturmak hata yapmaya açıktır. Bir aksan işaretini atlamak, çift kısa çizgi bırakmak veya Unicode girdisindeki bir uç durumu gözden kaçırmak bozuk ya da çirkin URL'lere yol açabilir. Bu araç söz konusu sorunları otomatik olarak çözer.
Slug Üreteci Kullanım Senaryoları
Slug Üretim Kuralları ve Karakter İşleme
Slug üretimi, öngörülebilir bir dönüşüm dizisini izler. Her adımı anlamak, beklenmedik çıktıda hata ayıklamanıza veya kendi slugify işlevinizi oluşturmanıza yardımcı olur.
- 1. Unicode Normalleştirme (NFD)Birleşik karakterleri temel karakter ve birleştirici işarete ayrıştırın. Örneğin é (U+00E9), e + birleştirici akut aksan (U+0301) olur. Bu, bir sonraki adımda diakritik işaretlerin kaldırılabilmesini sağlar.
- 2. Diakritik İşaretleri KaldırUnicode Birleştirici Diakritik İşaretler bloğundaki (U+0300–U+036F) tüm karakterleri kaldırın. Bu adımdan sonra café, cafe'ye; Ñ ise N'ye dönüşür.
- 3. Özel Karakterleri KaldırHarf, rakam, boşluk veya kısa çizgi olmayan her karakteri boşlukla değiştirin. Bu adım noktalama işaretlerini, sembolleri ve ASCII karşılığı bulunmayan karakterleri eler.
- 4. Baştaki/Sondaki Boşlukları Kaldır ve DaraltBaştaki ve sondaki boşlukları kaldırın, ardından ardışık boşluk, alt çizgi veya kısa çizgi dizilerini tek bir seçilen ayırıcıya daraltın.
- 5. Büyük/Küçük Harf ve Ayırıcı Uygulaİsteğe bağlı olarak küçük harfe dönüştürün ve kelimeleri seçilen ayırıcı karakterle birleştirin: kısa çizgi (-), alt çizgi (_) veya nokta (.).
Karakter Dönüşüm Başvurusu
Aşağıdaki tablo, slug üretimi sırasında yaygın karakterlerin nasıl işlendiğini göstermektedir:
| Giriş | Çıkış | Uygulanan Kural |
|---|---|---|
| Hello World | hello-world | Lowercase + space → hyphen |
| Café au Lait | cafe-au-lait | NFD normalization strips é → e |
| naïve résumé | naive-resume | Multiple diacritics removed |
| Price: $9.99! | price-9-99 | Symbols ($, !, :) removed |
| too many | too-many | Whitespace trimmed and collapsed |
| one--two___three | one-two-three | Mixed separators collapsed |
| Привет мир | privet-mir | Cyrillic (if transliteration) or removed |
| file_name.txt | file-name-txt | Dots and underscores replaced |
| React & Vue | react-vue | Ampersand removed |
| 2026-03-30 | 2026-03-30 | Digits and hyphens preserved |
Kod Örnekleri
Popüler diller ve çerçevelerde slug üretimi. Her örnek Unicode normalleştirmeyi, diakritik kaldırma işlemini ve ayırıcı eklemeyi kapsar.
function slugify(text, separator = '-') {
return text
.normalize('NFD') // decompose accented chars
.replace(/[\u0300-\u036f]/g, '') // strip diacritics
.toLowerCase()
.replace(/[^\w\s-]/g, ' ') // drop special chars
.trim()
.replace(/[\s_-]+/g, separator) // collapse whitespace → separator
// slugify('Café au Lait') → "cafe-au-lait"
// slugify('Hello World', '_') → "hello_world"
}
// Node.js alternative using the `slugify` npm package:
// npm install slugify
// const slugify = require('slugify')
// slugify('Hello World', { lower: true, strict: true }) → "hello-world"import re
import unicodedata
def slugify(text: str, separator: str = '-') -> str:
"""Convert text to a URL-safe slug."""
text = unicodedata.normalize('NFD', text)
text = text.encode('ascii', 'ignore').decode('ascii') # strip non-ASCII
text = text.lower()
text = re.sub(r'[^\w\s-]', ' ', text)
text = text.strip()
text = re.sub(r'[\s_-]+', separator, text)
return text
# slugify('Café au Lait') → "cafe-au-lait"
# slugify('Hello World', '_') → "hello_world"
# Alternative: python-slugify (pip install python-slugify)
# from slugify import slugify
# slugify('Café au Lait') → "cafe-au-lait"package main
import (
"regexp"
"strings"
"unicode"
"golang.org/x/text/unicode/norm"
"golang.org/x/text/transform"
"golang.org/x/text/runes"
)
func slugify(text string) string {
// NFD normalize and strip diacritics
t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC)
result, _, _ := transform.String(t, text)
result = strings.ToLower(result)
re := regexp.MustCompile(`[^\w\s-]+`)
result = re.ReplaceAllString(result, " ")
result = strings.TrimSpace(result)
re = regexp.MustCompile(`[\s_-]+`)
result = re.ReplaceAllString(result, "-")
return result
}
// slugify("Café au Lait") → "cafe-au-lait"
// slugify("Hello World") → "hello-world"function slugify(string $text, string $separator = '-'): string {
// Transliterate non-ASCII characters
$text = transliterator_transliterate(
'Any-Latin; Latin-ASCII; Lower()', $text
);
// Remove anything that is not a word char, space, or hyphen
$text = preg_replace('/[^\w\s-]/', ' ', $text);
$text = trim($text);
$text = preg_replace('/[\s_-]+/', $separator, $text);
return $text;
}
// slugify('Café au Lait') → "cafe-au-lait"
// slugify('Hello World', '_') → "hello_world"