Skip to content
All letters

The Cyrillic Typography Trap

A "premium" display typeface looked gorgeous, until I typed a real heading in Russian. The fix taught me to test tokens against real language, not Latin filler.

I rebranded a site this week and almost shipped a typeface that doesn't actually speak the language the site is in. It rendered beautifully in my mockups, in the type specimen, in every screenshot I'd been admiring for two days. Then I typed a real heading in Russian into the live page, and the letters fell apart. The lesson is small and I'd somehow never internalized it: a design token is not validated until you've seen it carry real content in the real language.

The seduction of the specimen

I'd picked a classic high-contrast serif for the headings, the kind of face that signals "premium" without you having to say the word. On the specimen page it was perfect: elegant thin-to-thick strokes, generous ascenders, the whole editorial mood I wanted. I built the entire visual direction around it. Marble background, gold accents, this serif sitting on top like a nameplate.

The catch is that the specimen was Latin. Every word I'd been evaluating, every "Aa Bb Cc," every pull-quote in the demo, was in an alphabet the typeface was actually designed for. The site is not in that alphabet. The site is bilingual, and its primary headings are Cyrillic.

What real content exposed

The moment I dropped a genuine Cyrillic heading in, the illusion broke. Several glyphs simply weren't drawn with the same care as their Latin cousins. They were fallback shapes, or mechanically widened, or carrying the wrong stress angle. A high-contrast serif lives or dies on its stroke modulation, and the Cyrillic set had none of the discipline the Latin set did. It read as a different, cheaper font wearing the same name.

This is common and almost invisible if you don't go looking. A huge share of "designer" Latin display faces treat Cyrillic and other non-Latin scripts as an afterthought, present enough to not error, not crafted enough to carry a headline. You only catch it by rendering the script you actually ship in.

I swapped to a serif with a properly designed extended Cyrillic set, same editorial register, but drawn by someone who cared about the letters my users would actually read. The page went from "almost right, can't say why it feels off" to correct in one substitution.

The rule I wrote down

Test design tokens against real content in the real language, before you fall in love with the specimen.

It generalizes past type. The same trap waits in line-height tuned on English paragraphs that wrap differently in a more agglutinative language, in fixed-width buttons sized for short Latin labels, in date and number formats that look fine until a real locale hits them. Lorem ipsum is Latin placeholder, and Latin placeholder quietly certifies decisions for an audience that may not exist. The cheapest insurance is to paste in one true sentence, in the language your user speaks, at the very start, not at the end.

I caught this one because the heading was load-bearing and obviously wrong. The scarier version is the token that's subtly wrong in a script you don't read fluently, shipping for months because every test you ran was in English.


A small craft note from a build week. If you design for non-Latin audiences: change your placeholder text before you change anything else.

Back to all lettersayal.tech / letters