What a slug is doing in the URL
The slug is the human-readable tail of an address: in /blog/season-a-cast-iron-skillet the slug is everything after the last slash. Compared with /post?id=8213 it tells a reader what they are about to open before they click, survives being pasted into a message with the context intact, and gives search engines a weak but real signal about the page. The mechanics are unglamorous — keep the characters that are safe and unambiguous in a path, turn everything else into a separator, collapse the separators.
Hyphens, not underscores
Google has said for years that it treats hyphens as word separators in URLs and underscores as word joiners, which means cast_iron_skillet can be read as a single token where cast-iron-skillet is read as three words. The practical difference is small and easily outweighed by other signals, but there is no cost to picking the hyphen, so pick the hyphen. The exception is an existing site that already uses underscores everywhere: consistency across a domain is worth more than the marginal parsing benefit, and changing the pattern means either broken links or a redirect for every old URL.
Accents are folded, scripts are not transliterated
Accented Latin letters are handled by Unicode decomposition. The letter é is decomposed into a bare e plus a combining acute accent, the combining marks are deleted, and what is left is cafe. The same pass turns Ångström into Angstrom and señor into senor. A handful of letters carry no separable mark and are mapped by hand instead: ß becomes ss, æ and œ become ae and oe, ø becomes o, and ł, đ and ð become l, d and d. Apostrophes and curly quotes are deleted rather than turned into separators, so don't becomes dont rather than don-t.
Beyond Latin, this tool does not transliterate at all. There is no romanisation of Chinese, Japanese, Korean, Cyrillic, Arabic, Hebrew, Devanagari, Greek or Thai. That is a deliberate omission rather than an oversight: doing it properly needs pronunciation data and language identification — the same Han character is read differently in Chinese and Japanese, Korean romanisation applies sound changes across syllable boundaries, and Arabic and Hebrew are written without the vowels a romanisation would need. A lookup table would produce plausible-looking output that is wrong often enough to be worse than useless in a permanent URL. So you get two honest options: drop those characters, or keep them and see exactly how long the percent-encoded address becomes.
Keeping non-ASCII characters in the path
Modern browsers display a non-ASCII path as readable text in the address bar, and search engines index those URLs without complaint. What is actually transmitted is percent-encoded UTF-8, where each character becomes three %xx groups per byte — a CJK character costs nine characters, a Cyrillic letter six. A short six-character title balloons past fifty characters once encoded, and that encoded form is what appears when the link is copied into an email, a chat message, a CSV or an old CMS field with a length limit. If the audience for the page reads that script and links are mostly clicked rather than copied, keeping the characters is fine. If links get pasted around, ASCII is easier to live with.
Length and the rule about never changing it
There is no technical limit on slug length. The default cap of 60 characters is about readability: three to six meaningful words fit, the URL does not get truncated with an ellipsis in a search result or a chat preview, and the important words stay visible. Truncation happens at the last separator before the limit so you never end up with a slug ending in half a word. Articles and prepositions are conventionally dropped by hand — how-to-season-cast-iron rather than how-to-season-a-cast-iron-skillet-the-right-way.
One rule matters more than any of the formatting: once a slug is published, it is a permanent identifier. Changing it breaks every inbound link, every bookmark and every share. If it genuinely has to change, set up a 301 redirect from the old path to the new one on the same day, and leave that redirect in place indefinitely.
Questions people ask
Does it romanise Chinese, Japanese, Korean or Cyrillic?
No, and that is on purpose. Correct romanisation needs pronunciation data and language detection that a client-side tool does not have — the same Han character is read differently in Chinese and Japanese, Korean applies sound changes across syllable boundaries, and Arabic and Hebrew omit the vowels a romanisation would need. A rough lookup table would produce output that looks right and is wrong often enough to be dangerous in a URL you can never change. Either drop those characters and write an English slug by hand, or keep them and check the encoded length.
What happens to é, ñ and ß?
Accented letters are decomposed into a base letter plus a combining mark, the mark is removed, and the base letter is kept: café becomes cafe, señor becomes senor, Ångström becomes angstrom. Letters with no separable mark are mapped explicitly instead — ß becomes ss, æ becomes ae, œ becomes oe, ø becomes o, and ł, đ and ð become l, d and d. Apostrophes are deleted rather than converted to hyphens, so don’t becomes dont.
Can I change a slug after publishing?
You can, and every existing link to the page breaks when you do. Bookmarks, shares, inbound links and anything already indexed all point at the old path. If the change is unavoidable, add a 301 permanent redirect from the old slug to the new one before or at the same time as the change, and keep it forever — redirects are cheap and removing one years later breaks the same links all over again. This is the main reason to look at the slug before publishing rather than after.
Why did two of my titles produce the same slug?
Because everything that distinguished them was punctuation, casing or stop words that the slugifier removes. "Cast Iron: Part 1" and "Cast Iron, Part 1" both reduce to cast-iron-part-1. The batch check flags collisions when you paste more than one title. Most content systems handle a clash by appending a numeric suffix, which gives you a URL nobody would have chosen — better to reword one of the titles.