Skip to content
URL / Slug

Multi-language slug generator

Turn free text into URL-friendly slugs with proper handling of Italian accents (citta -> citta-di-torino, perche -> perche-funziona) and diacritics from 4 other European languages. Batch CSV for lists, configurable separator (-, _.), smart max length with word boundary. Client-side via Unicode NFD normalize.

Single slug

Batch CSV

One string per line. Output is CSV with original and slug columns.

How to use the generator

  1. 1

    Paste the text

    Article title, product name, free phrase. The tool handles Italian accents and other European language diacritics directly, no pre-processing needed.

  2. 2

    Configure the separator

    Default kebab-case (-) for URL slugs. Underscore for filenames (snake_case). Dot for specific naming (e.g. dotted notation in some package managers).

  3. 3

    Set max length

    For SEO: URL titles below 80 chars are optimal. The tool truncates to the nearest word boundary, avoiding slugs broken in the middle of a word.

  4. 4

    Batch CSV

    For datasets (e.g. category names, article titles to migrate), paste in the bulk textarea one item per line. Output CSV with original and slug columns, importable into Excel or ETL pipeline.

Why one more slug generator

Three differentiators vs the dozens of generic slug generators.

Italian-aware. Most generic slug generators handle Italian accents in "creative" ways: perché becomes perche but perche' becomes perche (information loss). Or worse: citta' becomes citta- (apostrophe turned into dash). Here the pipeline is: locale-aware lowercase, special-character translit map (ß->ss, æ->ae, ø->o), Unicode NFD normalize, strip combining diacriticals (\p{M}), replace separators with kebab. Result: perché -> perche (e+combining acute dropped), più -> piu.

Robust multi-language. Spanish (ñ->n, ¿/¡ dropped), French (ç->c, œ->oe, æ->ae), German (ß->ss, ä/ö/ü->a/o/u), English (apostrophes dropped: it's -> its). For each language the behaviour is deterministic and documented in the FAQ.

Word-boundary truncate. Default 80 chars max. When the slug exceeds, the tool truncates at the nearest separator after half the target length. So tomato-pasta-classic-napoli-style-recipe (40 chars) with max 25 becomes tomato-pasta-classic, not tomato-pasta-classic-napo. No mid-word cuts.

Glossary

Technical terms used on this page, briefly explained.

Slug #
URL-friendly version of a title: lowercase, no spaces, no special characters, normalized separators. Typically used as the last segment of SEO-oriented URLs.
Diacritic #
Graphic mark added to a letter to modify phonetic value or meaning. Italian: acute/grave accents (e/e accent). Spanish: tilde (n/n with tilde). French: cedilla (c/c with cedilla).
Unicode NFD #
Normalization Form Decomposed: decomposes composed characters (e.g. e+acute) into base + combining (e.g. e + U+0301). Allows removing the combining while preserving the base letters.
Kebab-case #
Naming convention with lowercase words separated by dashes: my-tool-page. Standard for URL slugs and CSS classes.
Word boundary truncation #
Truncation technique that cuts at the nearest word boundary, avoiding mid-word interruption.

Frequently asked questions

How does it handle 'perché (with apostrophe accent)?
Drops the apostrophe. Apostrophe-as-accent is an Italian typographic workaround (technically a spelling error), not Unicode. The tool removes it along with other non-alphanumeric characters. To avoid information loss use proper Unicode accent: perché becomes perche via NFD strip, semantics preserved.
What happens to Chinese/Japanese/Cyrillic characters?
They are dropped. The tool produces only ASCII alphanumeric + separator. For real multilingual slugs (e.g. Chinese sites with Chinese URLs), you need a different pipeline: direct URL encoding (encodeURIComponent) or pinyin transliteration (pypinyin for Chinese, kuroshiro for Japanese).
Can I preserve uppercase in the slug?
Yes. Uncheck 'Lowercase' to keep the original case. Typical use case: URL-safe camelCase identifiers (e.g. userFullName stays userFullName after diacritic strip). Not standard though: most web frameworks and CMSs expect lowercase slugs.
Does the batch CSV handle custom delimiters?
The bulk input takes one string per line. Output is RFC 4180-standard CSV with quoted strings. To import into Excel: save as.csv, open in Excel with UTF-8 encoding selected. To import into a DB: use Postgres COPY or MySQL LOAD DATA INFILE with comma as delimiter.
Is there a hardcoded length limit?
Nothing hardcoded. The field max length is configurable (0 = no limit). Default 80 is a reasonable compromise for SEO URLs. Google indicates that URLs above ~75 chars reduce CTR at equal rank, below 60 is optimal. Slug is just the last segment, so 80 leaves room for domain + path prefix.
Does it work offline?
Yes., no server fetch. Bookmark for offline use.
Are collisions possible?
Yes, expected and by design. Example: City of Rome and City of Rome (extra space) both produce city-of-rome. If you need uniqueness in DB slugs, append a numeric ID (city-of-rome-1, city-of-rome-2) or use a separate UUID as primary key and the slug as a non-unique field.
Can I add a prefix or suffix to the slug?
Not in V1. But it is trivial text manipulation: after generating the slug, concatenate as a string: '/blog/' + slug or slug + '-2026'. For more complex workflows (e.g. timestamp prefix), a Python script with the same pipeline is more suitable.

Who builds these tools?

Maurizio Fonte, senior IT consultant with 20+ years in PHP, Laravel, unmanaged Linux infrastructure, applied cybersecurity and AI/LLM integration. Production backends, legacy code modernization, security audits, custom AI agents and MCP servers: the work behind every tool published here.

About Maurizio Fonte