Skip to content

URL Slug Generator

Convert titles to clean URL slugs — accented characters transliterated, punctuation stripped, separator and case configurable. Live as you type.

In your browseryour files never leave your device.

Learn more

Example

Café au Laitcafe-au-lait

About this tool

A URL slug is the human-readable tail of a URL — the "my-first-post" in example.com/blog/my-first-post. It needs to be ASCII-safe, hyphenated, and lowercase to behave well across browsers, CMSes, and search engines. This tool takes any title (accented Latin, Cyrillic, Greek, emoji, punctuation, all of it) and produces a clean ASCII slug. Accented characters get transliterated (é becomes e, ş becomes s, ö becomes o, ć becomes c), punctuation gets stripped, multiple spaces collapse into a single separator, and everything goes lowercase by default. Built on the well-tested slugify library with strict mode enabled, so what you get matches what every other serious slug pipeline produces.

How to url slug generator

  1. Type or paste your title

    Headline, blog title, product name, anything you want as a URL path. Any language, any length.

  2. Pick a separator

    Hyphen for SEO (the default, and the right choice for blog posts). Underscore for filenames or programmatic identifiers. None for compact paths like "myblogpost," rarely the best choice but available.

  3. Toggle lowercase

    On by default because most servers are case-insensitive but case-preserving, which causes subtle bugs when one link uses /My-Post and another uses /my-post and they're treated as separate URLs by search engines. Lowercase removes the ambiguity.

  4. Copy the slug

    Output renders live in the green box below. One click on the copy button puts it on your clipboard. Paste straight into your CMS's slug field, your static-site front-matter, or wherever the path lives.

Why use this tool

Three reasons. First, SEO: Google treats hyphens as word separators in URLs but underscores as word joiners, so "my-blog-post" reads as three words while "my_blog_post" reads as one. Hyphens win for ranking. Second, technical correctness: spaces, accents, and non-ASCII characters in URLs trigger percent-encoding ("café" becomes "caf%C3%A9"), which is ugly, breaks copy-paste, and makes links unreadable when shared in plain-text contexts like email or chat. Pre-slugifying gives you a clean URL that stays readable. Third, content workflow: copying a heading directly from a draft is the fastest way to get a slug, but headings have capitals, punctuation, and the occasional emoji. Slugifying strips all of that in one step. Most CMSes auto-slugify on publish, but the result is often wrong, especially for non-English titles — generate manually if you want control over the final URL.

Features

Live conversion as you type

Slug updates on every keystroke. No "generate" button, no submit step. Type a heading, glance at the slug, copy. The whole interaction takes about three seconds. If you tweak the title, the slug updates immediately, so you can dial it in by editing rather than re-running.

Unicode transliteration

Accented Latin gets stripped to ASCII equivalents: é becomes e, ñ becomes n, ş becomes s, ö becomes o, ć becomes c, č becomes c, ø becomes o. Greek, Cyrillic, and several other scripts get romanized via the standard transliteration tables built into the slugify library. The result is always pure ASCII alphanumeric plus the chosen separator, safe across every URL parser ever written.

Three separator options

Hyphen (-) for SEO and blog posts, which is what 99% of CMSes use. Underscore (_) for filenames and code identifiers where some tools dislike hyphens (a few legacy systems treat hyphens as subtraction in certain contexts). None for compact, unbroken paths, rare but occasionally needed for short product codes or vanity URLs. Most use cases want hyphens.

Strict mode by default

The underlying slugify library runs in strict mode, which means anything not [a-z0-9-] gets dropped. No surprise characters in your URLs, no room for ambiguity about what the slug will look like. Symbols, emoji, math characters, mathematical letters: all stripped. The output is predictable; you can copy it to a clipboard, paste into a URL bar, and know it'll work without further encoding.

Privacy & security

Slug generation runs through the slugify library, which is a few hundred lines of JavaScript that knows how to transliterate accented characters into ASCII (é → e, ş → s, ö → o) and strip punctuation. All of that happens in your browser as you type. If you are slugifying unpublished blog titles, product names, or anything else not yet public, the strings never reach our server. The URL preview that shows what your domain plus the slug will look like is also a pure string concatenation in the tab.

Frequently asked questions

What is a URL slug?
The human-readable, identifying portion of a URL — typically the part after the domain or category. In example.com/blog/my-first-post, "my-first-post" is the slug. It identifies the specific page and ideally describes what the page is about. Slugs matter for SEO because Google reads them as part of ranking context, and they matter for users because a readable URL is more clickable than a random ID.
Hyphens or underscores — does it actually matter?
Yes. Google's own SEO guidance is unambiguous: hyphens are treated as word separators in URLs, underscores as word joiners. So "my-blog-post" indexes as three separate words ("my," "blog," "post") and "my_blog_post" indexes as one word ("myblogpost"). Hyphens are strictly better for search ranking on multi-word slugs, which is why every modern CMS defaults to hyphens.
How does transliteration work?
The slugify library carries a character map for hundreds of accented and non-Latin characters. é to e, ñ to n, ş to s, ö to o, ç to c, ć to c. Greek letters get romanized (α to a, β to b, γ to g). Cyrillic gets transliterated by a standard scheme (а to a, в to v, г to g). Characters not in the map (emoji, mathematical symbols, CJK ideographs) get stripped entirely. The map is conservative: it favors readability over perfect phonetic accuracy.
Why lowercase by default?
Because mixed-case URLs cause subtle bugs. Most web servers treat URLs as case-insensitive but case-preserving, so /My-Post and /my-post might both work, but search engines index them as separate pages, splitting your ranking equity across the duplicates. Some CDNs cache them separately, which doubles your cache storage. Forcing lowercase eliminates this entirely. You can disable it with the toggle if you genuinely need title-case slugs for a specific system.
Max slug length?
No hard cap in the tool. SEO best practice is under 60 characters for the slug portion, because that's roughly what Google shows in search results before truncating with an ellipsis. Anything over 80 starts looking bad in the address bar and gets cropped in social-media link previews. Trim the slug to the meaningful nouns: "the-quick-brown-fox" instead of "the-quick-brown-fox-jumps-over-the-lazy-dog."
Privacy?
Everything runs in your browser via the slugify library. No analytics on what you slugified, no upload, no record of the title-slug pairs you generated. The library is open-source and bundled into the page; you can read the source if you're curious about exactly which character maps it uses.
Free?
Yes. No limit, no signup, no premium tier. The library is open-source MIT-licensed, and the conversion is a few microseconds, no cost to support or charge for.
Why does my slug have repeated separators?
It shouldn't. The library collapses runs of separators into one, so "hello — world!!" becomes "hello-world" with a single hyphen. If you're seeing doubles, there might be an unusual whitespace character (non-breaking space, zero-width space, ideographic space) in your input that the tokenizer is treating as a word break. Paste the input into a hex-viewer or use the diff tool to spot the invisible character.
Will my CMS overwrite this slug on publish?
Depends on the CMS. WordPress, Ghost, and most modern CMSes auto-generate a slug from the title when you create a post, then let you override it manually before publish. If you set the slug after the title, it sticks. If you change the title later, the slug usually stays, though some CMSes (older versions of Drupal, for instance) re-slug on every save unless you mark it manual. Check your CMS's slug behavior before relying on a custom slug.