Slug Generator
This generator turns any title into a clean URL slug: Unicode text is folded with NFKD so accents disappear, runs of non-alphanumerics collapse into a single separator, and everything lands in lowercase. It runs entirely in your browser, and the separator is yours to choose.
Die Oberfläche dieses Tools ist auf Englisch.
Die folgende Anleitung ist nur auf Englisch verfügbar.
Slug Generator explained
A slug is the human-chosen part of a URL, because URLs are read by people, quoted in emails, indexed by search engines and compared as strings. Lowercase letters, digits and a hyphen separator survive all four uses without surprises.
Getting there from real titles — full of accents, punctuation and capitals — is a pipeline, not a single replace call. NFKD Unicode folding strips accents and untangles compatibility forms like the fi ligature; apostrophes are deleted so don't becomes dont; runs of non-alphanumerics collapse into one separator; everything lands lowercase and trimmed.
Honesty about scope matters, because folding is not translation: NFKD works on characters that decompose — accents, ligatures, fullwidth letters. Scripts with no Latin decomposition, such as Arabic, Hebrew or Chinese, do not fold, and this page says what happens rather than inventing a transliteration. Everything runs in your browser.
Lowercasing is fixed by slug convention, but the copy around a link often needs other treatment — the case converter handles Title Case, camelCase and the rest.
Slugs exist to avoid escaping entirely; when a URL must carry raw Unicode anyway, the URL encoder and decoder shows how percent-encoding does it.
The pipeline, step by step
Order matters: folding runs before lowercasing, and separator replacement runs last, so it can never split a letter folding produced. The sequence:
- Normalise to NFKD — é becomes e plus a combining accent, fi becomes fi, fullwidth A becomes A.
- Strip the combining accent marks (the U+0300–U+036F range) — café is now cafe.
- Lowercase — Cafe becomes cafe.
- Delete apostrophes — don't becomes dont, with no stray separator left behind.
- Replace every run of non-alphanumerics — spaces, punctuation, emoji, symbols — with a single space.
- Trim, then join the words with your separator — a hyphen by default.
What NFKD folding catches — and what it cannot
Folding handles the European accented alphabet thoroughly: é, è, ü and friends land on their base letters — Ångström becomes angstrom, crème brûlée becomes creme-brulee. Compatibility characters decompose too: ½ unfolds to 1, a fraction slash and 2, and the slash — being a symbol — becomes the separator, so the slug reads 1-2.
The honest boundary is characters with no decomposition. German ß has none, so Straße folds to stra-e — the ß turns into a separator mid-word. Surprising, but not a bug: ß→ss is an orthography rule, not a Unicode one. The same wall appears for every non-Latin script.
RTL scripts, CJK and the empty-slug case
Arabic and Hebrew are written right-to-left, but direction is not the obstacle — decomposition is. Their letters have no NFKD spelling in Latin letters, so under an ASCII-slug policy they map to the separator. A mixed title keeps its foldable words; a title that is entirely Arabic, Chinese or emoji folds to nothing, and this generator returns an empty slug rather than guessing.
That empty result is information, not a failure: the ASCII policy cannot represent this title, and a placeholder like post-123 would hide that from you. The legitimate alternatives are a Unicode-preserving slug — modern standards treat URLs as IRIs, and browsers percent-encode non-ASCII on the wire — or language-aware transliteration, which needs mappings no folding table provides.
Choosing the separator
The hyphen is the default because the web reads it that way: search-engine guidance has long treated hyphens as word separators while underscores historically join words. Underscore and dot remain available for systems that expect them.
Whichever you pick, the hygiene is identical: runs collapse to one separator and both ends come out clean, so 12 Tips & Tricks! never becomes -12-tips-tricks-.
Frequently asked questions
Is my text uploaded anywhere when I generate a slug?
No. Slug generation is a handful of string operations run after the page loads — normalise, fold, lowercase, replace, trim. No request is made while you convert, which DevTools' Network panel confirms, and the site's Content-Security-Policy sets connect-src 'self' so the browser would block any outbound call a script attempted.
Why lowercase and hyphens — does it matter for SEO?
Paths are case-sensitive on most servers, so /Guides and /guides are two addresses that split links and analytics; lowercasing prevents that. Hyphens read as spaces — to people scanning results pages and to search engines — while a glued-together slug reads as one word. Neither is a ranking lever alone; both are cheap consistency wins.
How does accent folding actually work?
NFKD normalisation decomposes a character into its parts: é becomes a base letter e plus a combining acute accent. The generator removes the combining marks — a fixed Unicode range — leaving the bare letter. Ligatures and fullwidth forms decompose the same way; it is mechanical un-accenting, not translation.
What happens with Arabic, Hebrew, Chinese or emoji titles?
None of them decompose to Latin letters, so under the ASCII policy they are replaced by the separator like any other symbol. A title made entirely of such characters folds to an empty slug — the tool saying the policy cannot represent it. Unicode-preserving slugs are a valid alternative; transliteration needs language rules this tool does not fake.
Can I use underscores or dots instead of hyphens?
Yes — the separator control accepts them, and the pipeline is otherwise unchanged. The hyphen stays the default because search engines have documented it as a word separator while the underscore has historically been a joiner; consistency matters more than the choice.
Why did Straße become stra-e, not strasse?
ß has no NFKD decomposition — Unicode treats it as a letter of its own — so under the ASCII policy it is replaced by the separator, even mid-word. Expanding ß to ss is a German orthography rule no normalisation table contains. If you need strasse, pre-replace ß with ss in the title; everything else folds as expected.
Which related tools should I use next?
- Case ConverterRename identifiers, acronyms handled properly.Open
- Text ToolsDiff, convert and reshape plain text and code.Open
- URL Encoder and DecoderEncode and decode, with + and %20 told apart.Open
- Encoding ToolsBase64, URL encoding, hashing and token inspection.Open
- Base64 Decode & EncodeDecode and encode standard and URL-safe Base64, with binary download.Open
- How Does Base64 WorkPlain-English guideOpen