Optimize your Twitter/X profile bio with high-contrast bold fonts and clean monospace letters.
X has four places styled text might go, with very different constraints.
The bio holds 160 characters. The display name holds 50, which is generous enough for decorated styles. A post holds 280 on the free tier, and considerably more for paid accounts. The handle holds 15 and accepts only letters, numbers and underscores, no full stops, and certainly no styled characters.
The handle restriction is stricter than Instagram's, which does allow full stops. It is worth knowing because handles are shorter than people expect: 15 characters disappears quickly, and every styled variant is rejected outright rather than truncated.
The field selector on this page counts against whichever of these you pick, and marks every style as not allowed when the handle is selected.
The 280 limit is not 280 characters in the sense this page counts them, and the difference matters.
X weights characters by range. Latin, and most European scripts count as one. Characters in the CJK ranges (Chinese, Japanese, Korean) count as two, which halves the effective post length for those languages. This was a deliberate change, made because those scripts convey more per character.
Links are the bigger surprise. Every URL is replaced by a t.co shortlink and charged a fixed 23 characters regardless of the real URL's length. A 200-character link costs 23; a 12-character link also costs 23. Including a short link therefore costs you more than the characters it occupies, and including a long one costs far less.
The counts on this page measure code points, which is the right number for styled Latin text and will diverge if you are posting CJK.
X renders the mathematical alphanumeric blocks reliably across web, iOS and Android. Bold, italic, script, fraktur, double-struck and monospace all display as intended in bios, display names and post bodies.
Decorative symbols and frames are generally safe, with the usual caveat for very recent Unicode additions on devices that have not updated.
Zalgo is the case that behaves differently here than elsewhere: X's line height clips combining marks that extend far from the baseline, and heavy stacking is cut rather than allowed to overlap adjacent lines. Light zalgo survives; extreme zalgo looks broken rather than dramatic.
X's search is a primary discovery mechanism in a way Instagram's is not, and styled text is invisible to it.
A post containing a styled keyword does not match a search for the plain spelling. Neither does a styled display name. If people find your account by searching a term you are known for, putting that term in mathematical bold removes it from the index as far as matching is concerned.
The same applies to hashtags, which stop functioning as hashtags when styled. They become ordinary text that links nowhere and joins no conversation.
The practical rule is to keep anything you want found in plain characters: the hashtag, the keyword, the name people search. Style the parts that are decoration rather than signal.
The 50-character display name is the field where styling has the least downside, because it is not an identifier, your handle is, and it is not the primary search target.
It is still worth restraint. A display name that is entirely decorated frames and symbols is harder to read in a timeline, harder to recognise at a glance, and harder to mention in conversation because nobody can type it. The convention that works is a plain name with a single styled or symbolic element.
One practical note: display names have historically been a vector for impersonation, and platforms periodically tighten what is allowed there. A name constructed from lookalike characters that mimics another account or a brand risks enforcement independent of any styling question.
Where a post exceeds the limit, the conventional answer is a thread of linked posts, and styled text interacts with that badly. Decorated styles consume characters that would otherwise carry meaning, so a thread styled throughout runs longer and reads worse.
Paid tiers raise the character limit substantially, which removes the length pressure but not the accessibility or search costs.
The reasonable use of styled text on X is emphasis rather than body copy: one bold phrase in a post, a styled line in a bio, a symbol in a display name. Whole posts in mathematical script are hard to read on a phone, invisible to search, and unreadable to anyone using a screen reader.
This page opens on a compact and bold set (bold, monospace, small capitals and italic forms) because a 160-character bio and a 280-character post both reward styles that do not inflate length.
Framed and decorative styles remain available through the show-all control. The badge shows the count against your selected field, so you can see directly whether a style fits a bio, a post, or neither.
For the handle, the answer is always plain text, and the tool says so rather than showing you counts for characters X will reject.
The 140-character limit was not a design philosophy. It came from SMS, which allows 160 characters per message, 140 for the text and 20 reserved for the username, because the service was originally built to work over text message.
The limit doubled to 280 in 2017, after testing showed most users did not hit the old ceiling and that the constraint was frustrating chiefly for languages that need more characters per idea. Japanese, Chinese and Korean kept the original 140 in effect, which is the same weighting that survives today as the two-for-one CJK count.
Paid tiers now allow substantially longer posts, which changes the calculation for styled text: length pressure disappears, but the accessibility and search costs do not. A long post in mathematical script is still invisible to search and still unreadable to a screen reader, however much room the tier allows.
The bio has stayed at 160 throughout, which is why it remains the tightest field most people meet on the platform.
160. The display name holds 50, a post 280 on the free tier, and the handle just 15, accepting only letters, numbers and underscores, with no styled characters at all.
Yes, at a flat 23 characters. Every URL becomes a t.co shortlink charged the same regardless of the original length, so a very long link is cheap and a very short one is expensive.
Because X counts CJK characters as two rather than one, deliberately, since those scripts carry more meaning per character. It effectively halves the post length for those languages.
No. The handle accepts only letters, numbers and underscores, stricter than Instagram, which also allows full stops. Styled characters are rejected outright.
No. A styled hashtag is a different character sequence, so it links nowhere and joins no conversation. Keep hashtags in plain characters.
More than on most platforms, because search is a primary discovery route and it matches plain characters only. A styled keyword is effectively absent from the index.
X constrains line height, so combining marks extending far from the baseline are clipped rather than overlapping neighbouring lines. Light stacking survives; heavy stacking looks broken.
The display name, which is not an identifier and not the main search target. Even there, a plain name with one styled element reads better than a fully decorated one.
Because the service was built to work over SMS, which allows 160 characters, 140 for text and 20 reserved for the username. It doubled to 280 in 2017, though CJK languages kept the original effective limit through the two-for-one count.