FreeToGenerate.com

100% free · no sign-up · nothing is uploaded

Malmö becomes malmo

Type a title above and its slug appears here.

Everything is processed in your browser — nothing is sent to a server, and nothing is saved.

Also available in: Español · Português · Français · العربية

Slug Generator: Convert Text to a Clean URL Slug

Turn any title into a correct URL slug, with real transliteration for accented and non-Latin letters instead of silently deleting them.

What is a slug generator?

A slug is the part of a URL that identifies a page in words instead of an id: the “my-first-post” in example.com/blog/my-first-post. It is lowercase, uses hyphens or underscores instead of spaces, and has no punctuation left in it, so it is readable, shareable and safe to sit in a URL bar or a link.

A slug generator, sometimes called a slugify tool, takes the title you actually wrote — capital letters, spaces, apostrophes, accents, maybe a different alphabet entirely — and converts it into that URL-safe form for you. This one runs as a URL slug generator you can also use to convert text to slug form for a blog post, a product page or a file name, without hand-editing every title before you publish it.

How to generate a slug

  1. Type or paste your title into the text input at the top of the page.
  2. Set your options: pick the separator (hyphen or underscore), the transliteration style (Simple or Passport), and the letter case, then switch on Keep Unicode letters or Remove common words if your title needs them. Add a maximum length if the slug has to fit a limit — it is cut at a word boundary, never mid-word.
  3. Copy the result.The slug appears in the read-only output box below. Copy shows “Copied!” for two seconds, Clear starts over, and Load an example fills in a sample title.

The letters most slug generators delete

The usual way to build a slug is to run Unicode normalisation, strip whatever combining accent marks come off, and delete anything left that is not a letter or digit. That works for é, ü and ñ, because those are a plain letter with a separate accent mark stacked on top. Whenever that shortcut would give a different answer than this tool, the page shows both side by side — and the gap turns out to be bigger than a stray accent.

It silently deletes about a dozen other Latin letters, because Unicode only splits a letter into base-plus-accent when the accent is genuinely a separate combining mark. In ß, ø, ł, đ, ħ, þ, ð, æ, œ, ı and ŋ the stroke or the shape isthe letter — there is nothing to strip off, so the letter itself disappears along with it. Run real words through that method and Straße becomes “stra-e”, Bjørn becomes “bj-rn”, Łódź becomes “odz”, Þórr becomes “orr”, Œuvre becomes “uvre”, Ħamrun becomes “amrun”, and Ærø — a real Danish island — becomes the single letter “r”.

There are also two flavours of that normalisation, and the choice quietly changes how much is lost: under NFD all 16 of those letters get deleted; under NFKD only 13 do, because ij, ŀ and ſ are ligatures and letter variants that happen to have a compatibility mapping to fall back on. Most tools treat NFD and NFKD as interchangeable here. They are not.

The fix is not a bigger regular expression, it is a lookup table — and this one comes from a standard rather than from taste. ICAO Doc 9303 Part 3, Section 6.A, “Transliteration of Multinational Latin-based Characters”, is the specification every machine-readable passport in the world is printed against. Section 6.B covers Cyrillic the same way, which is how Привет мир becomes “privet-mir” here.

That table is also why this tool has two modes instead of one opinion. The letters where ICAO lists two acceptable answers are exactly the letters where languages genuinely disagree: AE or A for Ä, OE or O for Ö, UE, UXX or U for Ü, AA or A for Å. German convention writes Müller as “mueller”; Swedish convention writes Malmö as “malmo”, because å, ä and ö are distinct letters of the Swedish alphabet rather than accented ones. Simple mode takes the one-letter answer, Passport mode takes the two-letter one. For the letters where ICAO gives only one answer, both modes agree and always will: Æ is AE, Þ is TH, Ð is D, ß is SS, Ñ is N, Œ is OE.

One departure from the standard is disclosed rather than hidden: for Ø, ICAO lists only “OE”, so a strict passport transliteration turns Bjørn into “BJOERN”. Simple mode deliberately gives “bjorn” instead, because that is the established convention on the web; Passport mode follows ICAO. Cyrillic gets the same treatment, except for ICAO’s language-specific exceptions — Ukrainian И as Y, Serbian Ж as Z, Bulgarian Щ as SHT — which this tool deliberately does not apply, because a short piece of text does not reliably say which language it is in, and guessing wrong would corrupt the common case to serve a rarer one.

Two widely used open-source slug libraries were tested against this exact list, and they disagree with each other on every one of Müller, Malmö, Ærø, Þórr, Œuvre and Ħamrun. One deletes the Maltese letter ħ outright, so Ħamrun still comes out as “amrun” — the same base-plus-accent assumption failing again. The other has the table but splits the multi-letter expansions back apart when it separates words, so Ærø turns into “a-ero” and Þórr into “t-horr”. Two well-regarded tools, two different answers for the same word: there is no single obvious behaviour here, only a standard to follow or to depart from deliberately.

Choosing a good slug

A maximum length is worth setting if your CMS or platform has one, and cutting is only safe at a word boundary — this tool trims whole words rather than leaving a fragment hanging off the end.

Removing common words like “the” and “of” works in five languages here, not just English, so it is not an English-only convenience bolted onto a translated site. It also protects against the case that trips up a naive stop-word filter: if every word in the title happens to be a function word, as in “To Be Or Not To Be”, the slug is left intact instead of coming out empty.

For Chinese, Japanese, Arabic and Cyrillic titles, switching on Keep Unicode letters is often the better answer rather than a fallback. A URL path is ASCII by the letter of the standard, but non-ASCII characters travel in it as percent-encoded UTF-8, and Google has stated that the escaped form and the readable form are equivalent to it. Chinese, Japanese and Arabic also cannot be transliterated letter by letter the way Latin and Cyrillic can, so with the option switched off those characters are dropped — and the panel under the output lists exactly which ones, rather than removing them without saying so.

Once a slug is published and linked from anywhere, treat it as permanent rather than regenerating it later. That is safe to check here: the output is idempotent, so feeding an existing slug back through the tool returns the same slug, unchanged.

Why is it free?

Everything above runs as JavaScript in your own browser tab. The title you type is never uploaded anywhere, there is no account or sign-up, no watermark on the result, and no limit on how many times you use it.