Skip to content
DevToolKit

URL Slug Generator

Generate clean, URL-safe slugs from any text with locale-aware transliteration for German umlauts, Turkish characters, Cyrillic, and Latin diacritics. Runs in your browser.

Examples:
Your slug will appear here...
Configuration
Strip all non-alphanumeric
Unlimited
Was this tool helpful?

How to Use

Convert any text into a clean, URL-safe slug in real time. The tool processes your input through a multi-stage pipeline that handles accented characters, symbols, whitespace, and language-specific rules automatically.

Step-by-Step Usage

  1. Type or paste text into the input area. The slug updates instantly as you type — there is no submit button because the conversion is fast enough to run on every keystroke.
  2. Click the generated slug to copy it to your clipboard, or use the copy button to the right of the output.
  3. Use the quick examples to see how different input types are handled: blog titles, German umlauts, mixed-language text, and symbol-heavy strings.

Configuration Options

  • Separator: Choose between hyphen (-), underscore (_), or dot (.). Hyphens are standard for URLs and SEO. Underscores are common in file names. Dots are used in some package naming conventions.
  • Locale: Auto-detect analyzes the input and applies language-specific rules. German mode converts umlauts to digraphs (ä to "ae"). Turkish mode handles dotless-i correctly. Russian mode transliterates Cyrillic to Latin characters.
  • Lowercase: Enabled by default. Turn off if your system requires case-preserved slugs (rare).
  • Strict mode: When on (default), strips everything except letters (a-z) and digits (0-9). When off, preserves some non-alphanumeric characters that may be valid in your context.
  • Max Length: Set to 0 for unlimited. When set, the slug is truncated at the nearest separator boundary to avoid cutting words mid-syllable.

About This Tool

The Slugification Pipeline

URL slugification appears simple — lowercase, replace spaces, done. In practice, handling international text correctly requires a carefully ordered pipeline. This tool processes input through ten stages:

  1. Locale overrides — German umlauts, Turkish dotless-i, and Scandinavian characters are mapped to ASCII equivalents before Unicode normalization, because NFD would strip them to their base forms instead.
  2. Custom replacements — User-defined find/replace pairs.
  3. Symbol expansion& becomes "and", @ becomes "at", etc.
  4. NFD normalization — Unicode Normalization Form D decomposes characters like "é" into "e" + combining acute accent (U+0301).
  5. Diacritical mark removal — The combining marks from step 4 are stripped, leaving base ASCII letters.
  6. Cyrillic transliteration — Cyrillic characters are mapped to their standard Latin transliterations.
  7. Case conversion — Lowercased (unless disabled).
  8. Character filtering — Non-alphanumeric characters become the separator.
  9. Separator collapsing — Multiple consecutive separators are merged into one.
  10. Trimming and length enforcement — Leading/trailing separators are removed, and maxLength is enforced at word boundaries.

Unicode Normalization (NFD)

Unicode represents accented characters in two ways. The precomposed form stores "é" as a single code point (U+00E9). The decomposed form stores it as two code points: "e" (U+0065) + combining acute accent (U+0301). NFD normalization converts all precomposed characters to their decomposed form. After decomposition, we strip the combining marks (Unicode range U+0300 to U+036F), leaving clean ASCII base characters. This approach handles hundreds of accented Latin characters without needing an explicit mapping for each one.

RFC 3986 URL Safety

RFC 3986 defines the syntax for Uniform Resource Identifiers. The "unreserved characters" that can appear in a URL path without percent-encoding are: uppercase and lowercase ASCII letters (A-Z, a-z), digits (0-9), hyphen (-), period (.), underscore (_), and tilde (~). By restricting slugs to lowercase alphanumerics plus a single separator character from this set, the generated slug is guaranteed to be safe in any URL context without encoding.

Locale-Specific Transliteration

Standard NFD normalization would convert German "ä" to plain "a". But native German speakers expect "ae" — the standard transliteration that preserves pronunciation. Similarly, Turkish has two distinct "i" letters: dotted "i" and dotless "ı". Standard lowercasing in most programming languages maps uppercase "I" to lowercase "i", but Turkish requires "I" to map to "ı". The locale modes apply these corrections before NFD normalization runs, ensuring linguistically correct results. The Russian mode implements GOST 7.79 System B transliteration for Cyrillic characters, mapping each letter to its standard Latin equivalent.

Why Use This Tool

URL slugs appear in nearly every web application that publishes content. Here are the most common scenarios where this tool saves time:

  • Blog post URLs — Content management systems like WordPress, Ghost, and Strapi auto-generate slugs from titles. When the auto-generated slug contains errors (truncated words, stripped important terms), you can generate the correct slug here and paste it into the CMS slug field.
  • CMS and headless CMS development — If you are building a custom CMS, the slugification logic in this tool serves as a reference implementation. The ten-stage pipeline handles edge cases that simpler approaches miss, such as German umlauts degrading to single letters instead of digraphs.
  • File naming conventions — Many development teams use slug-style naming for files, branches, and directories. Switch the separator to underscore for Python modules (my_module_name) or dot for Java packages.
  • API endpoint design — RESTful APIs use slugs in resource paths: /api/products/wireless-bluetooth-headphones. Clean slugs improve both developer experience and SEO for public-facing APIs.
  • Internationalized content — Multilingual sites need slugs that work across languages. A German article titled "Über uns" should become ueber-uns (not uber-uns) for German audiences, and a Russian page title needs clean Latin transliteration.
  • SEO optimization — Google uses URL slugs as a ranking signal. Clean, keyword-rich slugs outperform generic numeric IDs. Studies from Backlinko and Ahrefs show that URLs with keywords in the slug receive 25-30% higher click-through rates in search results compared to parameter-based URLs.

Privacy

All text processing runs entirely in your browser using JavaScript. No text is sent to any server. The transliteration maps are embedded in the page code — there are no network requests for character conversion, locale detection, or any other operation. Your input stays on your machine.

FAQ

What is a URL slug and why does it matter for SEO?
A URL slug is the human-readable part of a URL that identifies a specific page, like '/blog/10-tips-better-seo' instead of '/blog?id=42'. Search engines use slugs as a ranking signal because they provide context about page content. Clean slugs with relevant keywords improve click-through rates in search results by 25-30% compared to numeric or encoded URLs.
How does locale-aware transliteration work?
Standard ASCII conversion maps accented characters to their base forms (e to e, n to n). Locale-aware mode applies language-specific rules instead. For German, ae becomes 'ae' not 'a', oe becomes 'oe', ue becomes 'ue', and ss becomes 'ss'. For Turkish, the dotless i maps to 'i' correctly. These locale rules produce slugs that are linguistically correct for native speakers.
What characters are allowed in a URL slug?
URL-safe slugs contain only lowercase letters (a-z), digits (0-9), and a separator character (typically hyphens). All other characters including spaces, punctuation, diacritics, and special symbols are either transliterated to their ASCII equivalent or removed. This ensures the slug works in any URL without percent-encoding.
How are common symbols like & and @ handled?
Common symbols are converted to their word equivalents before slugification. The ampersand (&) becomes 'and', the at sign (@) becomes 'at', the hash (#) becomes 'hash', and the plus (+) becomes 'plus'. This preserves meaning in the slug. For example, 'Rock & Roll' becomes 'rock-and-roll' rather than 'rock-roll'.