Toolvore

Slug Generator

Turn any text into a clean, URL-friendly slug.

This tool runs entirely in your browser. Your data is never uploaded, never stored, and never leaves your device.

Turns a headline into the form a URL wants — lowercase, accents folded to plain letters, and every run of spaces or punctuation collapsed into a single hyphen — so the link reads as words rather than as percent-encoding.

How to use it

  1. 1Type or paste the title; the slug rewrites itself on every keystroke.
  2. 2Switch the separator to an underscore if your router or CMS expects one, or untick Lowercase to keep the original capitalisation — 'My Blog Post' then stays My_Blog_Post rather than my_blog_post.
  3. 3Copy the slug.

Example

Input
10 Things I Learned in Zürich — Straße Edition (2026)!
Output
10-things-i-learned-in-zurich-stra-e-edition-2026

Two things worth reading out of that. Punctuation is replaced rather than encoded, and consecutive replacements collapse, so the space-em dash-space run costs a single hyphen rather than three, and the ')!' left dangling at the end is trimmed away instead of becoming a trailing separator. But ß came through as 'stra-e'. Accent folding works by pulling combining marks off letters, and ß has no mark to pull — the sharp s is a letter in its own right, so it is discarded like any other character outside A-Z and 0-9. Substitute 'ss' yourself before pasting. The same rule is why a title written in Cyrillic, Greek or Japanese returns an empty slug instead of a transliterated one: nothing here romanises a non-Latin script, so those need a slug written by hand or a language-aware library. There is no length cap and no stop-word removal either, so 'the', 'a' and 'of' stay in and a long headline yields a long slug — trim it yourself if your CMS or your taste says otherwise.

What happens to your data

Slugifying is a normalize('NFD') pass and four regular expressions running in this tab, so the headline is never posted anywhere and no draft is saved. That is not an abstract point when the title belongs to a post, a product or an announcement that has not gone out yet — a slug typed into someone else's server is a leak of the thing you are about to launch.

Last updated August 2026

The headline is written and the CMS is asking for a URL. What you have is a sentence with an em dash, an ampersand, brackets and a colon in it; what the address bar wants is a short run of words with nothing that has to be escaped. The two are rarely the same, which is why a slug is a separate decision from the title rather than a copy of it.

Before you type anything, work out whether this URL has already been published. For a draft, a slug is free — rewrite it as often as the title changes. Once it is live it is an address other people hold: links from other sites, bookmarks, a row in a search index. Changing it then means putting a redirect in place from the old one, and skipping that redirect means everything pointing at the old address stops working.

The other thing to settle first is the separator, which is a dropdown here. Hyphens are what public page URLs settled on; underscores turn up where the slug is really an identifier for a machine, such as a file name or an export key. Either will work, but mixing both across one site is the version that hurts.

The common mistake is treating this as a formatter and pasting the whole headline in. Everything you feed it survives, so a long title makes a long slug. Cut the phrase down to the few words that would still identify the page in six years, then convert that.

How it works

Toolvore rewrites the slug on every keystroke rather than behind a button, and the whole job is one small function. Your text is first put through Unicode NFD normalisation, which splits an accented letter into a plain letter followed by a separate combining mark, and those marks are then deleted. Lowercasing happens next, when the box is ticked. A single regular expression then replaces every run of characters outside A-Z, a-z and 0-9 with the separator you chose, which is why a space, a full stop, an ampersand and a bracket are treated identically, and why a cluster of them costs one separator rather than several. Anything left at the start or the end is stripped. What the design cannot do is decide meaning: it does not know that an ampersand is a word, or that your site already has a page at this address, since it never sees your site. The field is a single line, so it takes one title at a time.

Common use cases

  • Naming a blog post URL before it goes into the CMS
  • Turning a product or category name into a shop path
  • Making a filename-safe string out of a document title
  • Writing heading anchors for a long documentation page
  • Building static site routes from Markdown front matter
  • Producing consistent image and asset file names

Frequently asked questions

What is a URL slug?

The part of a web address that names one page in readable words. In /blog/how-to-repot-a-fern, the slug is how-to-repot-a-fern: it sits at the end of the path, and it is usually the only piece of a URL you write yourself. The name comes from newspaper production, where a slug was the short working label a story carried through the newsroom before anyone had agreed a headline. That is still a fair description of the job: a short stable label for a piece of content, not a second copy of the title.

Should a URL use hyphens or underscores?

For a public page, hyphens. It is the convention the web settled on, and a hyphen stays visible when a URL is underlined in a link while an underscore hides under the line. Underscores belong where the slug is really an identifier another program will read: a file name, an export key, a database column. Both are offered here for that reason rather than as a matter of taste. What matters more than the choice is making it once, because a site using both is one where nobody can guess an address.

How long should a URL slug be?

Short enough to read in a search result, long enough to say what the page is. Three to six words is a sensible working range. Nothing here truncates, so a forty-word headline gives a forty-word slug. Trim by hand before converting: drop the subtitle after the colon, drop the year unless the page is genuinely about that year, and drop words describing the format rather than the subject, such as guide or update. Read the result aloud, and if you would not say it to someone over the phone, it is too long.

Is it safe to change a slug after the page is published?

You can, and the cost is not the change but everything already pointing at the old address. Links from other sites, bookmarks and the entry sitting in a search index all still ask for the URL you retired. Without a redirect each of those becomes a 404, and whatever standing that address had built goes with it. With a 301 from the old slug to the new one, most of it carries over. That is the argument for spending a minute on the slug before publishing rather than after, while changing it still costs nothing.

Should stop words like the, a and of be removed from a slug?

Opinion on this has hardened further than the evidence supports. Cutting the, a, of and for makes a slug shorter; it also makes some of them read like telegrams, and how-repot-fern is harder to recognise in a list than how-to-repot-a-fern. The workable rule is to cut words carrying no meaning, keep the ones carrying grammar, and judge the result by whether it still reads. Nothing is stripped for you here, so every word of the title arrives in the slug and this is an edit you make in the input box before copying.

Can a URL contain capital letters?

Technically yes. The path part of a URL is case-sensitive by the standard, so /About and /about are two different addresses, even though the domain name is not. In practice mixed case causes trouble: people retyping a link lowercase it out of habit, and some servers treat the two spellings as one page while others serve one and return 404 for the other, leaving a site with two addresses for the same content. Lowercase is the safe default, which is why that box starts ticked. Untick it only when something downstream expects the original capitalisation.

What happens to an ampersand or an emoji in a URL?

A URL carries only a limited set of characters directly, and the rest has to be percent-encoded, which is how a space becomes %20 and an emoji becomes an unreadable run of hex. Browsers hide that in the address bar, then reveal it the moment the link is pasted into plain text. The way out is removal, not encoding. An ampersand here becomes a separator instead of the word and, and a pound sign or an emoji between words leaves a separator rather than a symbol; at the end of a title it goes entirely, which is why C++ comes back as c.

Is the title I type here sent anywhere or saved?

No. The rewriting happens in the page you are looking at, so there is no request to send and nothing to record at the other end. It is not stored either: the text lives in one piece of component state while the tab is open, there is no history and no autosave, and a refresh puts the box back to empty. The Copy button reads that same value through your browser's clipboard and stays disabled while the slug is empty, so there is nothing to copy by accident. Close the tab and the title is gone.