Skip to main content

URL Slug Generator from Titles and Text

Turn a title or phrase into a URL slug with the available separator and cleanup options. Review the result before adding it to a route.

URL Slug Generator workspace

Unicode-Aware Transliteration

Café → cafe, Düsseldorf → dusseldorf, Crème Brûlée → creme-brulee. NFD-decomposes accents then strips combining marks. Handles ß, æ, ø, ł, þ, and more.

Full Control

Hyphen, underscore, period, or no separator. Lowercase, preserve case, or uppercase. Optional stop-word removal (a, the, and, …) and max-length cap with word-boundary truncation.

RFC 3986 Compliant

Output is restricted to URL-unreserved characters: A–Z, a–z, 0–9, hyphen, period, underscore, tilde. Validates the result and refuses to leave dangling separators at the edges.

100% Client-Side

Slug generation runs entirely in your browser. Article titles in stealth-launch mode, unreleased product names, and other sensitive copy never reach our servers.

URL Slug Generator: Turn Any Title Into a Clean, SEO-Friendly URL

Turn a title or phrase into a URL slug with the available separator and cleanup options. Review the result before adding it to a route. A slug should describe the page and remain stable once published. Removing accents or stop words can change how a title reads, so review the generated text. Changing an existing URL also requires redirects and internal-link updates; this tool does not perform those changes.

How to use the URL slug generator

  1. Paste a blog title, product name, or headline into the input — the slug updates instantly.
  2. Choose a separator: hyphen (default, best for SEO), underscore, period, or none.
  3. Set the case: lowercase (default), preserve, or uppercase.
  4. Leave transliteration on so accents become ASCII (cafécafe), or turn it off to drop non-Latin letters.
  5. Toggle Strip Stop Words and set a Max Length if the slug runs long.
  6. Copy the result. The status line confirms it passes RFC 3986 validation.

What is a slug, and how slugify works

A slug is the human-readable last segment of a URL. In https://example.com/blog/why-next-js-is-fast, the slug is why-next-js-is-fast. "Slugify" means transforming arbitrary text into that segment: lowercase it, swap spaces for hyphens, remove anything outside a safe character set. The safe set comes from RFC 3986 section 2.3 (unreserved characters): letters A–Z a–z, digits 0–9, and the four marks - . _ ~. Anything else — spaces, &, !, ?, emoji — would need percent-encoding, so a clean slug avoids them entirely.

This tool runs a seven-step pipeline. It NFD-normalizes the input and drops combining marks (so ée), transliterates letters NFD can't split (ßss, æae), applies the chosen case, optionally filters stop words, replaces every remaining non-alphanumeric run with the separator, collapses doubled separators, trims edge separators, then truncates at a word boundary if you set a cap. Use hyphens for content URLs: Google's URL-structure guidance treats hyphens as word separators and underscores as word joiners.

Worked examples: input → slug

Blog title · lowercase · hyphen

10 Things I Wish I'd Known About React Server Components! → 10-things-i-wish-i-d-known-about-react-server-components

Diacritics · transliteration on

Crème Brûlée & Schadenfreude → creme-brulee-schadenfreude

Punctuation · collapsed separators

Why Next.js 16 — A Deep Dive (2026 Edition) → why-next-js-16-a-deep-dive-2026-edition

Edge case · the apostrophe split

Apostrophes are stripped as non-alphanumeric, so contractions split: I'd becomes i-d, not id. Likewise don'tdon-t. Search-and-replace the apostrophe out of the title first (I'dId) if you want the cleaner form.

Separator and option reference

These are the exact options this tool exposes and what each produces from the title My Blog Post.

OptionValueOutputUse for
Hyphen-my-blog-postContent URLs, SEO (Google word-separates)
Underscore_my_blog_postFilenames, variables (parses as one word)
Period.my.blog.postNamespaced keys, dotted IDs
NonemyblogpostHashtags, handles, compact tokens
RFC 3986 setA–Z a–z 0–9 - . _ ~validated, no edge separatorsEverything else is removed

The truncation rule most generators get wrong

When you set a Max Length, this tool does not just chop at the character limit and risk a half-word. It slices to the cap, finds the last separator, and cuts there only if that separator sits past 60% of the limit(lastSep > maxLength * 0.6). If the nearest break is too early — which would throw away most of the slug — it keeps the hard cut instead. So a 30-character cap on building-privacy-first-web-apps yields building-privacy-first-web, not a stub. The validator also enforces isValidSlug: the result must match ^[a-zA-Z0-9._~-]+$ and must not start or end with - . _ ~, so you never ship a dangling-hyphen URL.

Last updated: September 15, 2026 · Runs 100% in your browser — no uploads, tool input is not sent to Toolk.

Frequently asked questions

Why are hyphens recommended over underscores in slugs?

Google's URL-structure guidance treats hyphens as word separators and underscores as word joiners, so seo-friendly-urls reads as three words while seo_friendly_urls reads as one. Hyphen is the default here; underscore, period, and no-separator remain available for filenames, dotted keys, and handles.

Why did my contraction split into two fragments?

Apostrophes count as non-alphanumeric characters, so the pipeline strips them and the surrounding letters separate — I'd becomes i-d rather than id. If you prefer the compact form, remove the apostrophe from the title first (I'd to Id), then regenerate the slug.

Are unpublished titles or product names uploaded while I type?

No. The whole seven-step pipeline — NFD normalization, diacritic stripping, transliteration, casing, stop-word filtering, separator replacement, and RFC 3986 validation — runs locally in your browser tab. Toolk's page analytics never receive the text you slugify.

The slug is deterministic — how do I avoid duplicate URLs for repeated titles?

Same text always yields the same slug by design; uniqueness belongs to your CMS. Append a sequence number or a short random discriminator generated with Toolk's UUID generator (/tools/uuid-generator) whenever two entries collide on identical titles.

Need a different tool?

Browse all 103 browser-based tools (103 currently marked free), or tell us what useful utility we should build next.

Browse all tools