Polyatic Slug Generator

Slug Generator

Turn a title — or a whole list of them — into clean, lowercase URL slugs, live. Real Unicode accent-folding, no upload.

Title(s) — one per line
Delimiter
Options
Max length
characters — 0 = no limit, cut at a word boundary
Slugs

Runs entirely in your browser — your titles never leave your device. Every slug is built locally by a small script you can read; there are no network requests for the conversion and nothing you paste is uploaded.

What a slug is, and what makes a good one

A slug is the readable tail of a URL that names one page — the how-to-bake-bread in example.com/blog/how-to-bake-bread. A good one is lowercase, separates words with hyphens, contains only the URL-safe unreserved characters a–z, 0–9 and -, and is short enough to read at a glance. This tool takes any title and produces that string: it folds accents to plain ASCII, lowercases, replaces every run of spaces and punctuation with one delimiter, collapses repeats, and trims any delimiter left dangling at the ends. Paste one title or a hundred — one per line — and each becomes its own slug the instant you type, with no button to press.

Accents are folded properly — not with a lookup table

The transliteration step is genuinely Unicode-aware. Rather than a hand-written map of "é → e", the text is passed through String.prototype.normalize('NFKD'), the standard Unicode compatibility decomposition. That splits a precomposed accented letter into its base letter plus a separate combining mark; stripping every mark in the U+0300–U+036F block leaves the bare ASCII letter:

Crème Brûlée NFKD → Cre◌̀me Bru◌̂le◌́e strip marks → creme-brulee Zürich NFKD → Zu◌̈rich strip marks → zurich Piñata NFKD → Pin◌̃ata strip marks → pinata

One method covers essentially every Latin-script accent — French, Spanish, Portuguese, German, the Nordic vowels with umlauts, Vietnamese tone marks and more — without a per-language table to maintain.

The options, honestly

Delimiter. Hyphen by default, which is what you want for public URLs — Google treats a hyphen as a word separator but an underscore as a word joiner, so my-blog-post reads as three words and my_blog_post can read as one. The underscore option is there for the times a downstream system (a file name, a database key) demands it.

Keep numbers. On by default: Top 10 Reasonstop-10-reasons. Turn it off and digits are dropped as if they were punctuation, so the same title becomes top-reasons — handy when a version number or year in the title would only add noise.

Max length. Caps the slug and cuts it at a word boundary, never mid-word: capped at 20, the-quick-brown-fox-jumps becomes the-quick-brown-fox, not the-quick-brown-fox- or a chopped word. The one stated exception — if the first word alone is longer than the cap, it is kept whole, because there is no earlier boundary to cut at. Leave it at 0 for no limit.

Drop stop words. Off by default. When on, a short built-in list of the highest-frequency English function words (the, of, and, to, a…) is removed, so The Best of the Webbest-web. Use it sparingly: shorter slugs can help, but stripping too aggressively can hurt readability and change meaning.

Honest limits

Transliteration is best-effort ASCII folding, not full romanisation. It only recovers letters that decompose into a Latin base plus a diacritic. Non-Latin scripts — Chinese, Japanese, Korean, Cyrillic, Arabic — and emoji have no ASCII base, so they are removed rather than guessed at; a line written entirely in one of them reduces to an empty slug, and the tool says so on that line instead of emitting nothing silently. A few single-code-point Latin letters — ø, ł, đ, ß — also drop for the same reason (they are not a base letter plus a mark), so Straße loses its ß. If you need a specific romanisation (pinyin, for example), transliterate first, then slug the result here.

Common uses

Slugging a batch of blog titles or product names before import; generating clean anchor IDs for headings; deriving a file name from a document title; producing a stable key from user-entered text. Because it runs entirely offline, it is safe for unpublished titles, internal project names and client work.