You translate a template, drop in a good Persian face, and something still looks wrong. Usually the font isn't the problem — the settings are, because they were chosen for Latin and don't transfer.

Leave letter-spacing alone

Opening up letter-spacing is a standard Latin move, especially on large headlines and small labels. In Persian it pulls the letters apart and breaks the word, because the script is cursive and each letter's shape depends on its neighbours.

Simple rule: wherever the template sets a positive letter-spacing, zero it for Persian.

Give the lines more room

Persian has marks above and below the baseline — the dots, the descending bowls. At a line-height tuned for Latin they collide. For body copy, 1.8 to 2 usually reads better than the Latin-standard 1.5.

Choose your digits deliberately

Persian digits read naturally in running text. But phone numbers, tracking codes, email addresses — anything a person will copy or a machine will parse — are better left in Latin digits. The cleanest approach is a font that ships Latin digits, with the conversion applied at the display layer rather than baked into the typeface.

Self-host the font

If your audience is in Iran, loading a font from a foreign service means latency or failure. Serve it from your own domain and load it with font-display: swap so text is visible before the font arrives.

Justification

Persian sets well justified, because unlike Latin it doesn't need hyphenation to avoid gaps. Just watch the last line of each paragraph — stretched, it makes the whole block look broken.