URL Slug Generator

Turn any title into a clean URL slug in your browser — one at a time or a whole list at once. Real transliteration standards for Cyrillic and accents, editable rules, and nothing ever uploaded.

Fill in the text for conversion
Advanced Options

The slug is the readable tail of a web address — the my-first-post in example.com/blog/my-first-post. It is the part a person can read before deciding whether to click, and the part a search engine reads as a short description of what the page holds, which is why it deserves more thought than a database id or a date. This free generator turns any text into one: paste a title into Text to convert, press Generate, and the result appears with a copy button beside it. The defaults are the settings most sites want — lowercase, hyphens between words, common filler words dropped, non-Latin letters transliterated — so a usable slug is one click away, and every one of those decisions is a switch you can change.

Everything happens on your own device. The page loads a small JavaScript engine and runs it locally: your titles are never uploaded, never logged, and the tool keeps working with the connection switched off. That is also why the result updates the moment you change a setting. The order of the work is worth stating, because it is what makes the output predictable: a pasted link is reduced to its last path segment first, then the text is lowercased, then stop words are dropped, then non-Latin characters are transliterated, then numbers and special characters are removed if you asked for that, then whatever is left is joined with your separator, then the result is trimmed to the maximum length, and finally a repeat gets a numeric suffix. Text to convert accepts up to 500,000 characters in one go, which is a few thousand article titles.

One line in, one slug out. Paste a whole list of titles and each line becomes its own numbered slug, with the title it came from shown above it in grey, so in a batch of fifty you can still tell which slug belongs to which heading. A list that already lives in a file does not have to travel through the clipboard: Load from file, the button beside the input box, opens a plain text file — .txt, .csv, .md, .json and the like — and drops its contents into the field. Your browser reads that file exactly the way it reads what you type, and it is not uploaded anywhere. Split input by decides how the list is cut apart. Automatic is the default: a line break always separates items, while a comma only separates them when the input is a single line whose parts all look like standalone values — so "price S$3,500" and "Chapter 5: results, conclusions" stay whole instead of shattering into fragments. Line break, Comma and Space force the choice when you already know the shape of your data. Output format decides how a batch comes back when you take it — one per line, space-separated, or comma-separated — and both Copy All and Save to File follow it. History keeps your last 10 batches in your own browser, so a list you converted an hour ago is still there.

Non-Latin text is the part most slug generators get roughly right and few get exactly right. A web address can hold letters of any alphabet, and search engines read them, but many sites still prefer plain ASCII, which copies, pastes and passes through every system without percent-encoding. Where you want ASCII, Cyrillic, Greek, Arabic, Chinese and European accented letters have to be converted, and the real question is by whose rule. This page answers it in two layers. The general layer covers every script: a transliteration library with a sensible ASCII answer for almost any character you can type, which is what Transliterate from means when it says Automatic (any language). The specific layer is a set of hand-built tables for the languages where the generic answer is not the one the country actually uses; the Transliterate from menu names the ones that have a table today, and the set grows as the tool reaches more languages that need one. Choosing one loads its table into an editable grid under Transliteration Rules, where every letter is a text field you can change, and Reset rules to default puts it back. The Ukrainian table follows Cabinet of Ministers Resolution No. 55 of 2010, the standard printed in Ukrainian passports, including the details that are easy to miss: зг becomes zgh rather than zh so it stays distinct from ж; є, ї, й, ю and я take one form at the start of a word and another inside it; and the apostrophe and the soft sign are dropped without starting a new word, so Знам'янка comes out as znamianka and not znamyanka. German defaults to the expanded ä → ae, ö → oe, ü → ue that German addresses actually use, with a plain ä → a variant if you prefer it.

Remove stop words is on by default. It drops the small connecting words — a, the, and, of, for — that usually lengthen a slug without adding meaning. Usually, not always: flights to London and flights from London differ only in a stop word, so check the result when a small word carries the point. The list under Stop words is fully editable and arrives already filled in: an English list plus a list for the language of the page you are on, so the Ukrainian page knows в, на, та and і, and the German page knows der, die and das. Add words of your own, delete the ones you want kept, or switch the feature off entirely, in which case the field greys out rather than pretending to still matter. Two honest notes about it. Stripping stop words is a small tidiness gain rather than a ranking lever — you get a shorter, cleaner address, not a better position. And if every word in a title happens to be on the list, the honest result is nothing at all, so the tool tells you that instead of handing you an empty box.

The rest of the switches decide the shape. Separator in the slug chooses what sits between words, and the hyphen default follows Google's own advice to separate the words of a URL with hyphens rather than underscores. Underscore is there for the systems that insist on it. Lowercase is on because most servers treat addresses as case-sensitive, and mixed case is an easy way to end up with two URLs for one page. Remove special characters strips everything that is not a letter, digit, space, hyphen or underscore, which is what keeps punctuation, quotation marks and emoji out of an address — emoji are removed before transliteration specifically so that a rocket does not become the word rocket. Remove numbers is off, because a number in a title is usually part of the title. Max Length runs from 10 to 200 and defaults to 80; when a slug is longer than that the engine cuts at the last whole word that fits rather than through the middle of one; only a single word longer than the whole limit has to be cut inside itself. The figure beside each result is its length in characters, and it turns red past 60 — our own readability guide rather than a search-engine limit: beyond it a slug gets hard to read at a glance and awkward to paste into a message.

Two more switches exist because they turn a bulk conversion back into a one-click job. Make slugs unique catches the case where two different titles reduce to the same slug — "Top 10 tips" and "Top-10 tips" both become top-10-tips — and gives the second one a -2, the third a -3, shortening the base first if the suffix would push it past your maximum length. Two pages at one address is a problem far cheaper to catch in this list than in your CMS. Take the slug from a pasted URL works in the other direction: paste a full link and the tool takes the last part of the path, drops the query string and any .html or .php ending, and decodes percent-encoding, so a Wikipedia link ending in %D0%9B%D1%8C%D0%B2%D1%96%D0%B2 comes back as lviv instead of a run of hex digits. It only fires when the entire line is a link, so an address quoted inside a sentence is left where it is.

Why choose this slug generator?

Slugs are needed wherever a page has to carry a readable address. A blog or news site turns every headline into one, which is the case this tool was shaped around: paste the week's headlines, get the week's URLs. An online shop does the same for product and category names, usually in bulk after an import, and often in a language whose letters the shop wants as plain ASCII. Documentation and knowledge bases build anchors and file names the same way. Beyond web addresses the same clean string is what you want for a file name that will not break on another operating system, a database key that a person can read in a log, a branch name, an image name in a media library, or the identifier of a section in a static site generator. Any place where a human-readable name has to survive being put into a machine-readable field is a place a slug belongs.

A few limits are worth knowing before you rely on it. This is a generator, not a validator: it will not check whether a slug is already taken on your site, because it has no idea what your site contains — the uniqueness it guarantees is within the batch in front of you. Redirects are your job too; changing the slug of a published page breaks its old address, and that is a decision for your CMS rather than for this tool. Save to File writes plain text, not CSV or JSON. The automatic split makes a judgement call about commas that is right in almost every case but not in all of them, which is exactly why Split input by lets you overrule it. And transliteration is a convention rather than a translation — München becomes muenchen, not Munich — so when a page has an established name in the target language, that name is a better slug than any automatic conversion of the original.

FAQ

How do I create a URL slug?

Paste your title into Text to convert and press Generate. The result appears with a copy button beside it, converted with the defaults most sites want: lowercase, hyphens between words, filler words removed and non-Latin letters transliterated. Every one of those is a switch you can change, and Advanced Options holds the rest — separator, maximum length, stop word list and transliteration rules.

Can I convert a whole list of titles at once?

Yes. Paste up to 500,000 characters — a few thousand headlines — or pull them straight out of a file with Load from file, the button beside the input box, which reads it in your browser without uploading it. Each line becomes its own slug, numbered, with the title it came from shown above it so you can match them up. Split input by controls how the list is divided, Output format decides whether the batch comes back as lines, space-separated or comma-separated, and Copy All and Save to File both take the whole thing at once.

How does the generator handle Cyrillic and accented letters?

It transliterates them into ASCII, in two layers. Any script at all — Cyrillic, Greek, Arabic, Chinese, accented Latin — is covered by a general transliteration library, which is what Automatic (any language) uses. On top of that sit hand-built tables for the languages where the generic answer is not the one those countries actually use; the Transliterate from menu names the ones that have a table today. Pick one and its table loads, with every letter editable. English does not have its own transliteration table, so the general layer writes é → e and ç → c, which is exactly what addresses in English do — café becomes cafe.

Which transliteration standard is used for Ukrainian?

Cabinet of Ministers Resolution No. 55 of 27 January 2010 — the standard used in Ukrainian passports. That includes the parts that are easy to get wrong: зг becomes zgh so it stays distinct from ж, the letters є, ї, й, ю and я take one form at the start of a word and another inside it, and the apostrophe and the soft sign are dropped without starting a new word, so Знам'янка becomes znamianka rather than znamyanka. A second variant with ya, yu and yi everywhere is available if you prefer the simpler look.

Can I change how a particular letter is transliterated?

Yes. Open Transliteration Rules and every letter of the table is a text field: type whatever you want that letter to become, and the result updates as you type. Clearing a field removes the letter entirely. Your edits are remembered in your own browser for next time, and Reset rules to default restores the standard table whenever you want it back.

What are stop words and should I remove them?

They are the small connecting words — a, the, and, of, for — that make a slug longer without making it clearer. Removing them is on by default and the list under Stop words is editable, arriving pre-filled with an English list plus one for the language of the page you are on. Be honest about the benefit though: it produces a shorter, tidier address, not a better search position. If a title consists entirely of stop words the tool says so rather than returning an empty slug.

Should I use hyphens or underscores in a slug?

Hyphens, unless something in your stack requires otherwise. Google recommends hyphens rather than underscores between the words of a URL, and the generator defaults to the hyphen for that reason; Separator in the slug offers the underscore for the systems that need it.

How long should a URL slug be?

Short enough to read at a glance — the first few words carry the meaning and the rest is usually the tail of a sentence. The number beside each result is its length in characters and turns red past 60 — our own readability guide, not a search-engine limit — because a longer slug gets hard to read at a glance and awkward to paste into a message. Max Length sets a hard ceiling from 10 to 200 characters, and defaults to 80.

Does it cut words in half when the slug is too long?

Not if a whole word fits. When a slug exceeds the maximum length the engine backs up to the last whole word that fits and cuts there, so a truncated slug still reads as words rather than ending mid-syllable; only a single word longer than the whole limit is cut inside itself. The same applies when a numeric suffix is added to a repeat: the base is shortened first so that the finished slug still respects your limit.

What happens if two titles produce the same slug?

Make slugs unique is on by default and handles it: the first occurrence keeps the plain slug, the second gets -2, the third -3, and so on. It catches the common case where two different titles reduce to the same thing — Top 10 tips and Top-10 tips both become top-10-tips. Switching it off gives you the raw output with the duplicates intact. Note that uniqueness is only guaranteed within the batch you just converted; the tool cannot know what already exists on your site.

Can I paste a URL instead of a title?

Yes. Take the slug from a pasted URL is on by default, and when a whole line is a link the tool pulls out the last part of the path, drops the query string and any .html or .php ending, and decodes percent-encoding — so a Wikipedia address ending in %D0%9B%D1%8C%D0%B2%D1%96%D0%B2 comes back as lviv rather than a run of hex. It only triggers on a line that is entirely a link, so a URL quoted inside a sentence is treated as ordinary text.

Is my text sent to a server?

No. The conversion runs in your browser as local JavaScript. Your text is never uploaded or logged, and once the page has loaded it keeps working with the connection off. Unpublished headlines, internal product names and client work stay on your machine, which is the practical reason to prefer a local tool over a server-side one for this particular job. Analytics, if you allow it, records only that the tool was used, never your text.

Why did my single sentence split into two slugs?

Because it contained a comma and Split input by was set to Automatic. That mode treats a line break as a definite separator and a comma as a probable one, and it only splits on commas when a single line's parts all look like standalone values — a value like S$3,500 or a sentence with a colon is deliberately left whole. When a title still splits and should not, set Split input by to Line break and the input will be cut only where you actually pressed Enter.