URL slug generator — one title or a hundred, with collisions flagged
Turn a headline into a clean URL slug as you type. Paste a whole list and get one slug per line, with any two titles that collapse to the same slug marked before you publish them. Accented Latin is folded to plain letters — “Café Münster” becomes cafe-munster — and where that cannot work, the page says so instead of handing you an empty box. Nothing is uploaded or saved.
- Nothing is uploaded or saved
- Works offline
Blank lines are ignored. Nothing is uploaded and nothing is saved — reload the page and this box is empty again.
One title has no slug left. Stripping accents works by pulling a letter apart into a base letter plus its mark — “é” is “e” plus an accent. Cyrillic, Chinese, Japanese, Arabic and Thai have no Latin base underneath, so there is nothing to fall back to and the whole title is dropped. This tool does not transliterate them, and guessing would be worse than saying so.
- Café Münster: A Guide to the Old Towncafe-munster-a-guide-to-the-old-town
- 10 Best Coffee Shops in Kuala Lumpur (2026)10-best-coffee-shops-in-kuala-lumpur-2026Duplicate
- 10 Best Coffee Shops in Kuala Lumpur — 202610-best-coffee-shops-in-kuala-lumpur-2026Duplicate
- Привет мир—
A slug is kebab-case with the punctuation thrown away. If you want the same words as camelCase, snake_case or Title Case instead, the case converter does that, and the URL encoder shows what a non-ASCII slug looks like once it is percent-encoded.
How it works
- 1
Paste one title per line
A single line gives you a single slug with the full URL underneath it. Twenty lines give you twenty slugs and a collision count. There is no mode to switch between the two, because a list of one is still a list. Blank lines are skipped, so you can paste straight out of a spreadsheet column or a content calendar without tidying it first.
- 2
Watch the duplicate flags
Two different titles very often produce the same slug — “10 Best Coffee Shops in Kuala Lumpur (2026)” and “10 Best Coffee Shops in Kuala Lumpur — 2026” are identical once brackets and dashes are stripped. Both sample lines above show it. What happens next depends on your CMS: it may refuse to save, silently append “-2”, or overwrite the first post. None of those is something you want to discover from a reader.
- 3
Set the separator, the case and the length
Hyphen or underscore, lowercase on or off, and a maximum length that cuts on a word boundary rather than through the middle of a word — a slug ending “…-mattr” looks like a typo, not a limit. Two filters are available and both are off or on for a reason: stop-word removal is off by default because it changes what the title says, and standalone numbers are kept by default because a year or a model number is usually the point of the title.
- 4
Decide what to do about non-Latin text
Accents are handled by pulling each letter apart into a base letter and its mark, then throwing the mark away, which is why “Café Münster” becomes cafe-munster and “Straße” becomes strasse. Scripts with no Latin letter underneath — Cyrillic, Chinese, Japanese, Arabic, Thai — cannot be folded that way, so this page tells you what it dropped and offers to keep the original characters instead of quietly returning an empty slug.
- 5
Check the URL preview, then copy the lot
Set a base URL and the preview shows the finished address, plus the percent-encoded form when the two differ — which is what a non-ASCII slug actually looks like on the wire. Copy takes every slug at once, one per line, in the order you pasted them, and Download saves the same list as a .txt file. Nothing leaves your browser at any point.
Frequently asked questions
What is a slug, exactly?
It is the human-readable part of a URL that names one page — the “best-coffee-shops-in-kuala-lumpur” in example.com/blog/best-coffee-shops-in-kuala-lumpur. It has one job: to say what the page is about in a form that survives being written down, read out, put in a chat message and truncated in a search result. That is why slugs are lowercase words joined by hyphens, with the punctuation, the brackets and the stray em dashes thrown away.
Hyphen or underscore?
Hyphen, unless something you cannot change requires otherwise. It is the near-universal convention in publishing platforms, and Google’s own published guidance on URL structure recommends hyphens over underscores. The underscore is still offered here because file names, storage keys and some legacy systems use it, and it is better to generate the right shape once than to hand-edit a hundred lines afterwards. What matters more than the choice is being consistent: a site with both is a site where nobody can guess a URL.
Why did “Café Münster” work but “Привет мир” come out empty?
Because the two are different problems wearing the same clothes. An accented Latin letter can be decomposed into a plain letter plus a separate accent mark, so removing the marks leaves readable ASCII: “Café Münster” becomes cafe-munster, “naïve café” becomes naive-cafe. Cyrillic, Chinese, Japanese, Arabic and Thai have no Latin letter hiding underneath — there is nothing to strip down to — so the same trick removes the text entirely. Many tools do exactly that and hand you a blank box with no explanation. This one detects it, says so, and offers to keep the characters instead.
Is it safe to put non-ASCII characters in a URL?
Yes, with a caveat worth knowing. Browsers and search engines handle them: the address bar shows the characters, and what travels over the network is the UTF-8 bytes written as percent escapes, so a Cyrillic slug arrives at the server as a long %D0%BF-style string. Turn on the “keep the original characters” option and the preview shows both forms side by side. The caveat is everything that is not a browser — an analytics report, a spreadsheet, a chat message, a printed flyer — where the percent-encoded form is what people see, and it is unreadable. If a slug is going to be typed by hand or read aloud, ASCII is the safer choice.
Two of my titles gave the same slug. Why does that matter so much?
Because it fails silently in a different way in every system. WordPress will append “-2”, giving you a URL that says nothing about the second post and that nobody would ever guess. A static site generator may write one file over the other and publish only the second. A CMS with a uniqueness constraint will throw an error at the worst moment, usually while someone is trying to publish. And if both do get published, you have two pages competing on identical wording. This is the whole reason batch mode exists here: it is far cheaper to see the collision in a list of titles than to find it after publishing.
Should I remove stop words like “the”, “for” and “of”?
Usually not, which is why the option is off by default. Removing them changes what the title says: “Tips for Cats” and “Tips of Cats” collapse to the same thing, and “The Who” becomes “who”. The gain is a shorter slug; the cost is a slug that reads like a telegram and sometimes means something else. Where it does help is a long title that is being cut by a length limit anyway — dropping “the” and “a” can save the last real word. The list here is English only, deliberately: a fixed list cannot tell the Malay conjunction “dan” from the name Dan, and a tool that eats names in titles is worse than one that leaves a few short words in.
How long should a slug be?
Short enough to read at a glance, and no shorter than the words that actually identify the page. Anyone quoting a specific number as the length that “performs best” is guessing — that is not something you can check. What you can check is that long URLs get truncated in search results, in chat previews and in the address bar of a phone, so the words at the front are the ones that survive. That argues for putting the distinctive words first and dropping the trailing filler, rather than for hitting a particular character count. The length limit here always cuts on a word boundary for the same reason: half a word carries no meaning at all.
Can I change a slug after the page is published?
You can, but the old URL stops working the moment you do, and every link to it — from other sites, from your own older posts, from someone’s bookmarks, from a chat message sent last year — breaks. If you must change one, set up a redirect from the old slug to the new one at the same time, in the same change, and keep it there permanently. The cheapest version of this advice: settle the slug before you press publish, which is what this page is for.
Does capitalisation in a slug matter?
It can, which is why lowercase is the default here. The host part of a URL is case-insensitive, but the path after it is not required to be — so /My-Post and /my-post are, as far as the standard is concerned, two different addresses. Some servers treat them as the same page and some do not, and the ones that do not will happily serve identical content at both. Since people type and copy URLs in lowercase anyway, there is very little to gain from capitals and a duplicate-page problem to lose.
Is anything I paste here uploaded or saved?
No. Every slug is worked out by JavaScript already loaded in this tab, and nothing is written to your browser storage — reload the page and the box is empty again. That matters here more than it looks: an editorial calendar pasted into a slug generator is usually a list of things that have not been announced yet. The page also keeps working with the network switched off once it has loaded.