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
Lowercase is on by default. Turn it off to keep the case of the remaining ASCII letters and mapped letters.
Trim is on by default and removes the selected separator from both ends. With it off, leading and trailing separators stay. With Trim off, input with no letters or digits can produce a single separator, for example a single dot.
Choose hyphen, underscore or dot. Runs of whitespace and existing hyphens, underscores and dots become the selected separator. The option changes the result immediately.
The slug updates as you type or change an option. Full-width letters, digits and symbols are converted to ASCII first. Accented Latin letters lose combining marks; mapped letters and symbols are replaced, and other non-ASCII characters are removed and act as a space; invisible format characters such as the soft hyphen are deleted without a separator. An empty result shows a warning and disables Copy. Ctrl/⌘+L inside the tool clears the input and result. This tool does not save them.
Slug
Copy copies the entire current slug. If copying fails, select the slug and copy it manually.

Your slug will appear here.

Read the full guide URL Slug Guide: Google's Rules, WordPress and Shopify Slugs, and Why Slugifiers Disagree
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):

InputSlug
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 Recipecreme-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 2026travel-guide-2026
user_profile.v2user-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).

SymbolWord
&and
@at
#hash
%percent
+plus
©c
®r
™tm
€euro
£pound
¥yen
₩won
°deg
×x
÷div
LettersReplaced with
ß ẞss / Ss
æ Æae / AE
œ Œoe / OE
ð Ð đ Đd / D
ø Øo / O
þ Þth / TH
ł Łl / L
ıi
ħ Ħh / H
ij IJij / IJ
ə Əa / A

Limitations

  • Marks are removed without language-specific rules: German ä ö ü become a o u (not ae oe ue), and Turkish İ becomes I.
  • 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 word hash, so C# gives c-hash rather than c-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:

Inputsindresorhus/slugify (README)This tool
fooBar 123 $#%foo-bar-123foobar-123-hash-percent
я люблю единороговya-lyublyu-edinorogovempty (Cyrillic is removed)
I ♥ Dogsi-love-dogsi-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.