URL Slug Generator — clean, SEO-friendly slugs
Turn any title into a clean URL slug in your browser. Sinhala & Tamil transliteration built in, accented Latin folds to ASCII, hyphen-separated by default. RFC-3986-safe, no signup, sources cited below.
How it works
A URL slug is the readable tail of a URL path — /blog/your-slug-here. To stay safe across every browser, server, and search-engine crawler, the slug should contain only the unreserved-character subset of RFC 3986 §2.3: [A-Za-z0-9-._~]. This generator emits the kebab-safe core [a-z0-9] plus the chosen separator (hyphen by default; underscore or dot if you switch). Every step is a pure function — no network call, no state, no dependency beyond the JavaScript engine's built-in Unicode case mapping and normalisation.
- Transliterate Indic clusters. Sinhala and Tamil consonants carry an inherent
avowel. A virama (Sinhala්U+0DCA, Tamil்U+0BCD) suppresses that vowel; a vowel sign replaces it. The generator walks the input cluster-by-cluster and emits an ASCII-simplified ISO 15919 romanisation — for exampleක + ි = කි → ki,ස + ් = ස් → s,த + ை = தை → thai. - Fold accented Latin to ASCII. The string is normalised to Unicode form NFKD — the decomposition step that splits
éintoe + ́— and combining marks (Unicode category\p{M}) are stripped. That is the same approach the GitHub Issues anchor slugifier and most CMS engines use; it leaves base Latin letters in place while removing every diacritic. A small table of ligatures (ß → ss, æ → ae, œ → oe, ø → o, þ → th, ł → l) is applied first because NFKD does not decompose those. - Collapse to separator. Every run of characters that is not in
[A-Za-z0-9]— whitespace, punctuation, emoji, symbols — collapses to a single separator character. Leading and trailing separators are trimmed. - Case fold and length cap.Lowercase is applied (default on; the toggle preserves case if you need it). If the slug is longer than the configured cap, it is truncated at the last separator boundary inside the second half of the budget so you don't lose meaningful suffix words; if no separator falls in that window a hard cut is applied.
The result is verified by two independent checks. First, the slugifier is idempotent — slugify(slugify(x)) === slugify(x) — for every input. Second, a strict NFKD-only cross-check (no Indic transliteration, no ligature shortcuts) is run alongside the main function; its output must be a subsequence of the main output on the ASCII characters. The "verified · idempotent" badge in the tool header is wired to both checks running live.
Worked examples
Frequently asked questions
Sources & references
- RFC 3986 §2.3 — Unreserved characters (URI generic syntax)
- WHATWG URL Living Standard — Path-state and path-percent-encode set
- Unicode UAX #15 — Unicode Normalization Forms (NFKD)
- ISO 15919 — Transliteration of Devanagari and related Indic scripts
- ISO 15919 reference table (Wikipedia summary used for Sinhala / Tamil)
- Google Search Central — URL structure best practices
The transliteration tables and slug rules on this page were last cross-checked on 2026-05-11. The page is reviewed whenever ISO 15919 is revised, when the WHATWG URL spec changes the path-percent-encode set, or when a new Sinhala / Tamil orthography reference becomes the canonical romanisation source. If you spot a transliteration that disagrees with another tool, please email me below.
Related tools
Comments & feedback
Spotted a bug or want an improvement? Tell us — our team reviews every comment, and good ideas get built. Comments are public and anonymous.
Spotted a slug mismatch, an edge case, or want to suggest a transliteration tweak?
Email me at [email protected] — most fixes ship within 24 hours.