Slug Generator

Turn a title or phrase into a lowercase, hyphen-separated slug suitable for URLs, filenames, and CSS classes, stripping accents and punctuation along the way. A free online tool from Staaarter, right in your browser.

Runs locallyUpdated 2026-07-18

Overview

Introduction

Blog post titles, product names, and page headings all need a clean, predictable identifier for use in a URL, no spaces, no accents, no punctuation a browser or file system would choke on. That identifier is a slug.

Writing that transform by hand is fiddlier than it looks. A naive replace(/ /g, '-') leaves accented letters, curly quotes, and stray symbols in the output, and getting it wrong produces a slug that looks fine in a text editor but breaks the moment it's used as a URL path segment or a filename on a case-sensitive filesystem.

What Is Slug Generator?

A slug is a lowercase string containing only letters, digits, and hyphens, typically derived from a longer human-readable title, and commonly used as the final segment of a URL path.

It's the same convention you see in a blog platform's /posts/10-tips-for-better-photography or a documentation site's /docs/getting-started: short, readable at a glance, and safe to type, bookmark, or share without any character needing to be escaped.

How Slug Generator Works

The tool lowercases the input, Unicode-normalizes it (NFKD) to separate accented letters from their accent marks, strips those accent marks, replaces every run of non-alphanumeric characters with a single hyphen, and trims any leading or trailing hyphens.

The NFKD step is what lets 'café' become 'cafe' instead of 'caf' or a mangled byte sequence. Normalization decomposes the é into a plain e plus a separate combining accent character, and a Unicode range regex then removes just the accent marks, leaving the base letters intact.

When To Use Slug Generator

Use it when generating a URL path segment from a blog post title, creating a filename from a document name, or producing a stable CSS class or HTML id from arbitrary text.

It's especially handy anywhere a title might contain accents, curly quotes, or emoji that would otherwise need manual cleanup. Paste the raw title in and get something safe to store as a permalink or route parameter.

Often used alongside Lowercase Text Converter.

Features

Advantages

  • Strips accents intelligently instead of dropping accented letters entirely.
  • Collapses multiple consecutive spaces or symbols into a single hyphen, avoiding double hyphens.
  • Produces output safe to use directly in URLs, filenames, and CSS identifiers.

Limitations

  • Doesn't guarantee uniqueness. Different inputs can slugify to the same output.
  • Only handles scripts that Unicode NFKD normalization can decompose into base + accent. Some non-Latin scripts won't be transliterated into ASCII.

Slug Generator vs. Lowercase Converter

Slug Generator vs. Lowercase Converter
Slugify (this tool)Lowercase only
Strips accentsYesNo
Replaces spaces and punctuation with hyphensYesNo
Lowercases the textYesYes
Safe to use directly in a URLYesNo

Examples

Slugifying a blog post title

Input

10 Tips for Better Café Photography!

Output

10-tips-for-better-cafe-photography

Accents get stripped, punctuation removed, and spaces collapse into single hyphens.

A fully accented phrase

Input

Crème brûlée à la carte

Output

creme-brulee-a-la-carte

Every accented letter (è, û, à) gets decomposed by NFKD into a base letter plus a combining mark, and the combining marks are stripped, leaving plain ASCII letters behind.

Collapsing consecutive separators

Input

Hello   ---  World!!!

Output

hello-world

The run of spaces, hyphens, and more spaces between the words, and the run of exclamation marks at the end, each get treated as a single separator and collapsed into one hyphen, with the trailing hyphen trimmed.

Leading and trailing punctuation

Input

  ***Amazing Deal***  

Output

amazing-deal

Leading and trailing whitespace and punctuation produce a hyphen at the very start or end of the intermediate result, and the final trim step removes it.

Input with no alphanumeric characters

Invalid input

🔥🔥🔥

Parser error

Error: Input has no alphanumeric characters to slugify.

Emoji aren't decomposed by NFKD and aren't ASCII letters or digits, so once they're stripped there's nothing left to build a slug from. Add actual words and it works fine.

Corrected version

Hot Deal 🔥🔥🔥

Best Practices & Notes

Best Practices

  • Enforce slug uniqueness at the application level (e.g., by appending a counter or ID) rather than relying on the slug alone.
  • Slugify consistently at creation time and store the result, rather than re-slugifying the title on every request.
  • Keep slugs reasonably short, since very long titles produce unwieldy URLs even after slugifying.
  • Handle the 'no alphanumeric characters' error explicitly in your own code path instead of assuming a slug is always produced. Text that's entirely punctuation, emoji, or non-Latin script will hit it.
  • Need true transliteration of non-Latin scripts rather than accent-stripping? Use a dedicated transliteration library. NFKD normalization alone won't Romanize Cyrillic or CJK text.

Developer Notes

This relies on String.prototype.normalize('NFKD') to decompose accented characters before stripping combining marks with a Unicode range regex. No transliteration library is used, so non-Latin scripts pass through only as far as NFKD can decompose them, which for most non-Latin scripts is not at all, leaving those characters to be removed by the subsequent /[^a-z0-9]+/g collapse rather than converted to anything. The empty-input check runs on the trimmed input before any transformation, and a second, separate check after the full pipeline catches input that survives that initial check but reduces to nothing once accents, punctuation, and non-alphanumeric characters are all stripped away.

Slug Generator Use Cases

  • Generating a URL path segment from a blog post or article title
  • Creating a safe filename from a user-provided document name
  • Producing a stable HTML id or CSS class name from arbitrary text
  • Sanitizing a filename generated from a user-provided product or document title before saving it to a filesystem

Common Mistakes

  • Assuming slugify guarantees uniqueness across an entire site without an additional uniqueness check.
  • Re-slugifying a title on every page load instead of storing the slug once, causing URLs to change if the title is edited.
  • Assuming slugify will transliterate non-Latin scripts into readable ASCII, when unsupported scripts are stripped entirely rather than Romanized.
  • Not handling the empty-result error case for input that's entirely punctuation, emoji, or non-Latin text.

Tips

  • Two records might produce the same slug? Append a short unique suffix (like an id) rather than relying on the text alone.
  • Run the result through the lowercase tool if you're combining it with other manually-typed URL segments to keep casing consistent.
  • Slugifying returns an error on text that looks like it has real words? Check whether that text is in a non-Latin script. NFKD only decomposes accented Latin characters, not other alphabets.

References

Frequently Asked Questions