Slugify String
Convert any text to a URL-friendly slug. Handles Unicode, removes special characters, and supports custom separators. Free, browser-based.
- Runs in your browser
- Your data never leaves your browser
- Free · No Sign-Up
Scan with WeChat to share this tool
Examples, details and FAQ Worked examples, how it compares with other tools, and answers to common questions.
Examples
Each row was produced by the tool’s own function with the default options (hyphen, Lowercase on, Trim on):
| Input | Slug |
|---|---|
10 Tips & Tricks for Node.js (2026 Edition)! | 10-tips-and-tricks-for-node-js-2026-edition |
Crème Brûlée: A 30-Minute Recipe | creme-brulee-a-30-minute-recipe |
Straße in Łódź | strasse-in-lodz |
C++ vs C# — Which One? | c-plus-plus-vs-c-hash-which-one |
東京 Travel Guide 2026 | travel-guide-2026 |
user_profile.v2 | user-profile-v2 |
What happens in order: full-width forms such as W, % and the ideographic space are converted to ASCII (NFKC); the text is decomposed (NFD) and combining marks are dropped; the symbols and letters in the tables below
are replaced; any other non-ASCII character becomes a space; every remaining character that is not a letter, digit, space,
hyphen, underscore or dot becomes a space; runs of spaces become one separator; and runs of -, _ and .
collapse into one separator. That last step is why user_profile.v2 loses its underscore and dot: existing
separators are normalised to the one you picked. With Lowercase off and the underscore separator, the first example gives
10_Tips_and_Tricks_for_Node_js_2026_Edition, a common form for file names and Python identifiers.
Because a removed character counts as a space, words around CJK text stay apart: Vue3入门Vite教程 gives vue3-vite,
and Hello World with a full-width space gives hello-world.
Character Mappings
Symbols become a separate word, so Rock & Roll gives rock-and-roll and Tom&Jerry gives tom-and-jerry. Accented letters lose their marks (Unicode NFD decomposition, then combining marks are removed): é → e, ñ → n, Łódź → lodz, Tiếng Việt → tieng-viet. Letters that do not decompose use the second table, with values from sindresorhus/transliterate. Uppercase letters keep their case (Ø → O, Œ → OE) until Lowercase is applied. The currency signs in the table become the word in their Unicode character name; others, such as $ and ¢, are removed (YEN SIGN → yen, WON SIGN → won; see the Unicode currency symbols chart).
| Symbol | Word |
|---|---|
& | and |
@ | at |
# | hash |
% | percent |
+ | plus |
© | c |
® | r |
™ | tm |
€ | euro |
£ | pound |
¥ | yen |
₩ | won |
° | deg |
× | x |
÷ | div |
| Letters | Replaced with |
|---|---|
| ß ẞ | ss / Ss |
| æ Æ | ae / AE |
| œ Œ | oe / OE |
| ð Ð đ Đ | d / D |
| ø Ø | o / O |
| þ Þ | th / TH |
| ł Ł | l / L |
| ı | i |
| ħ Ħ | h / H |
| ij IJ | ij / IJ |
| ə Ə | a / A |
Limitations
- Marks are removed without language-specific rules: German
ä ö übecomea o u(notae oe ue), and TurkishİbecomesI. - Non-Latin scripts are removed, so input written only in Chinese, Japanese or Korean gives an empty slug with Trim on. With Trim off it gives a single separator:
東京→-. - An apostrophe (
',’,‘,ʼ,ʻ,´,′) after a letter or digit and before a letter is deleted:John's Guide→johns-guide,1990's Music→1990s-music. Next to a space or at the start or end of the text it acts as a separator:rock 'n' roll→rock-n-roll. - With Trim off, separators at the start and end stay:
Hello World!→hello-world-. - Words are never shortened and stop words (a, the, of) are kept. There is no length limit, so a long sentence gives a long slug; trim it by hand if your CMS caps slug length.
#becomes the wordhash, soC#givesc-hashrather thanc-sharp. Edit such names before converting.- The tool converts one string at a time; each line break counts as a space, so pasting a list produces one long slug.
Differences From sindresorhus/slugify
sindresorhus/slugify, a widely used npm package, shares the
& → and rule and the letter table, but the README examples show where results part ways. The same inputs here give:
| Input | sindresorhus/slugify (README) | This tool |
|---|---|---|
fooBar 123 $#% | foo-bar-123 | foobar-123-hash-percent |
я люблю единорогов | ya-lyublyu-edinorogov | empty (Cyrillic is removed) |
I ♥ Dogs | i-love-dogs | i-dogs |
The package also splits camelCase and, through transliterate,
turns Fußgängerübergänge into fussgaengeruebergaenge; this tool gives fussgangerubergange. An apostrophe
between letters is deleted here, straight or curly (Conway's Law and Conway’s Law both give conways-law), as WordPress does; the package deletes it only before a final s or t, so Rock'n'Roll becomes rock-n-roll there and rocknroll here. If your site already has published URLs, match the generator that made them,
and use this page for one-off slugs or to check what a title would turn into. To encode a string for a query parameter instead of a path,
use the URL encoder.
When to Use Slugs
- Blog post URLs:
/blog/how-to-use-slugs - Product pages:
/products/red-running-shoes - File names:
my-important-document.pdf - Database keys: Unique, human-readable identifiers without spaces.
Consistent slug generation ensures your URLs remain stable and SEO-friendly even when the original title changes formatting or punctuation.
FAQ
What is a slug?
A slug is a URL-friendly string derived from human-readable text. It typically contains only lowercase letters, numbers, and hyphens — for example 'hello-world' from 'Hello World!'. Slugs are used in URLs to identify pages, posts, or resources.
How does the tool handle non-ASCII characters?
Full-width forms are first converted to ASCII (W → W, % → %, ¥ → ¥). Accented Latin letters lose their marks (é → e, ź → z, so Łódź → lodz), and letters that do not decompose, such as ß, ł, œ and ø, are replaced from the table on this page. The symbols & @ # % + © ® ™ € £ ¥ ₩ ° × ÷ become words (& → and). Other non-ASCII characters, including Chinese, Japanese, Korean, Cyrillic and Arabic, are removed and act as a space, so the words on either side stay apart. Invisible format characters, such as the soft hyphen and the zero-width space, are deleted without a separator.
Can I use underscores instead of hyphens?
Yes. Use the Separator dropdown to choose between hyphen (-), underscore (_), or dot (.).
Is the result safe to use directly in a URL path?
Yes. The output contains only ASCII letters, digits and the chosen separator, so it needs no percent-encoding. One edge case: with Trim off and the dot separator, input with no letters or digits (only punctuation or only CJK text, for example) can give a single dot, which browsers treat as a dot segment and remove from the path.
Does the slug change if I edit the title later?
Yes, the slug is recomputed from whatever text is in the box. If the old URL is already published, keep the old slug or add a 301 redirect from it; changing a published slug breaks inbound links.
Is the text I type sent to a server or saved?
No. The slug is built in your browser tab; the text and the result are not sent to a server and are not written to browser storage. Page analytics record only the tool name and the action (convert) when you finish editing the text or change an option, never the text itself.