URL Slug Generator - Clean Slugs from Any Title, One or Many

Type a title and get a clean URL slug as you type: lowercase, words joined by hyphens, accents and punctuation removed.

About this tool

Switch to bulk mode for one slug per line, drop common English words, set a length limit, or keep letters from other scripts such as Sinhala and Tamil. Nothing leaves your browser.

How it works

The title is split into words. Letters and digits stay. Spaces, punctuation, symbols and emoji end a word. Apostrophes are dropped without splitting, so 'Don't' becomes 'dont' and not 'don-t'. The words are lowercased and joined with a hyphen (or an underscore if you choose). Several separators in a row become one, and none is left at either end. Line breaks in a single title count as spaces.

Accents are removed with Unicode decomposition (NFKD): 'é' becomes 'e' plus a combining accent, and the accent is deleted. Some letters have no decomposition, so the tool replaces them from a fixed table, shown below: ß becomes ss, æ ae, œ oe, ø o, đ d, ð d, þ th, ł l, ħ h, ŧ t, ı i, ŋ ng and ĸ k. Compatibility characters are folded as well: a single-character ligature for 'fi' becomes the two letters, full-width letters become plain ones and a superscript 2 becomes 2. German spelling is a separate option that writes ä, ö and ü as ae, oe and ue instead of a, o and u (Müller becomes mueller).

Stop-word removal drops 31 common English words: a, an, and, are, as, at, be, but, by, for, if, in, into, is, it, of, on, or, such, that, the, their, then, there, these, they, this, to, was, will and with. The list is Apache Lucene's default English list without 'no' and 'not', because removing those can reverse the meaning of a title. A title made only of stop words keeps them. A length limit cuts the slug at a whole word, so the last word is never chopped, unless the first word alone is longer than the limit. Google recommends hyphens over underscores to separate words in a URL, and says URLs are case sensitive, so /APPLE and /apple are different addresses. One lowercase form avoids duplicates.

There is no transliteration. Sinhala, Tamil, Chinese, Arabic, Cyrillic and other scripts have no letter-for-letter English spelling here, so by default their letters are removed. 'Keep as typed' leaves them in the slug. A URL can carry such letters, but on the wire they travel as UTF-8 bytes written in percent-encoding (RFC 3986): the Sinhala letter ශ (U+0DC1) is the three bytes E0 B7 81, written %E0%B7%81, nine characters for one letter. Browsers usually show the readable form, yet email, chat and spreadsheets often show the long one, and Google says characters outside ASCII should be percent-encoded. 'Keep, percent-encoded' gives that form directly. Many sites use a short English slug that a person writes and keep Sinhala or Tamil in the page title.

Worked examples

A blog title

'10 Cafés & Bakeries to Try in Colombo (2026 Guide)' becomes 10-cafes-and-bakeries-to-try-in-colombo-2026-guide. With common words removed it is 10-cafes-bakeries-try-colombo-2026-guide.

Special letters

'Straße, Łódź, Ærø and Đà Nẵng: Müller's Crème Brûlée' becomes strasse-lodz-aero-and-da-nang-mullers-creme-brulee. With German spelling on, Müller's becomes muellers.

A length limit

'The Quick Brown Fox Jumps' with a limit of 19 characters becomes the-quick-brown-fox. Adding '-jumps' would make 25, so the whole word is dropped instead of being cut in half.

A list with repeats

Three lines, 'Hello World', 'Hello, World!' and 'hello world', all give hello-world. With 'Number repeated slugs' on, the results are hello-world, hello-world-2 and hello-world-3, so every slug is different.

Letters with no Unicode decomposition, and what the slug uses instead

LetterNameWritten asExample
ßsharp sssStraße becomes strasse
æae ligature (ash)aeÆrø becomes aero
œoe ligatureoeŒuvre becomes oeuvre
øo with strokeoKøbenhavn becomes kobenhavn
đd with strokedĐà Nẵng becomes da-nang
ðethdHafnarfjörður becomes hafnarfjordur
þthornthÞingvellir becomes thingvellir
łl with strokelŁódź becomes lodz
ħh with strokehĦamrun becomes hamrun
ŧt with stroketŧ becomes t
ıdotless iiılık becomes ilik
ŋengngŋ becomes ng
ĸkrakĸ becomes k

Frequently asked questions

What is a URL slug?

The readable last part of a web address that names the page, such as hello-world in https://example.com/blog/hello-world. MDN defines a slug as the unique identifying part of a web address, typically at the end of the URL.

Should I use hyphens or underscores in a slug?

Hyphens. Google's guidance on URL structure recommends hyphens instead of underscores to separate words, because underscores are normally used to join terms together. The tool uses hyphens by default and has an underscore option for systems that need it.

Should a slug be lowercase?

Lowercase is the usual choice. Google treats URLs as case sensitive, so /Apple and /apple count as different addresses. What matters is one consistent form. You can untick Lower case if your system needs capitals.

Does it work for Sinhala and Tamil titles?

It does not translate or transliterate. By default the Sinhala or Tamil letters are removed and the English words and digits stay. You can keep the letters as typed, or percent-encoded as they travel in a URL. For most sites a short English slug that you write yourself is the safer choice.

Why is ශ shown as %E0%B7%81 in a link?

A URL is sent as bytes. The letter ශ is U+0DC1, which takes three bytes in UTF-8 (E0 B7 81), and each byte is written as a percent sign and two hex digits. A browser may show you the letter, but the address that is sent is the percent-encoded one.

Why does Don't become dont and not don-t?

An apostrophe inside a word is dropped so the word stays whole. Splitting at it would leave a stray one-letter piece in the slug. The curly apostrophe is treated the same way.

How do I make slugs for a whole list?

Choose 'One per line (bulk)' and paste one title per line. You get one slug per line in the same order, blank lines stay blank, and 'Number repeated slugs' adds -2, -3 so that no two slugs match. Copy the result or download it as a text file.

What happens to my links if I change a slug later?

The old address stops working unless you redirect it to the new one. Choose the slug before you publish, and if you must change it, set up a permanent redirect from the old address.

Is my text sent anywhere?

No. The slugs are made in your browser and nothing you type leaves the page. Up to 5 million characters (about 5 MB of text) can be processed at once.

Updated Oct 13, 2026