Character Limits Explained: Twitter, SMS, Instagram, Meta Tags, and More
A reference for every character limit that matters in modern writing — Twitter/X, SMS, Instagram, meta descriptions, LinkedIn — and why platforms count differently.
Character limits feel like the most boring constraint in writing. They're also one of the most consistent ways well-written copy gets mangled on the platforms it's supposed to appear on. A bio that fits perfectly in your draft gets truncated. An SMS marketing campaign costs twice what it should. A meta description disappears from search results.
This is a reference for every character limit that matters in modern publishing, plus the genuinely useful information that the limits hide: how different platforms count characters, why some characters cost more than others, and what to do about it.
The platform-by-platform reference
Here's the table you actually came for. The "Counts spaces" column matters when you're optimising tight copy.
| Platform | Limit | Counts spaces? | Counts URLs as |
|---|---|---|---|
| Twitter / X (standard) | 280 | Yes | 23 chars (t.co shortened) |
| Twitter / X Premium | 4,000 | Yes | 23 chars |
| Twitter / X DM | 10,000 | Yes | Full length |
| SMS (GSM-7) | 160 per segment | Yes | Full length |
| SMS (UCS-2 / Unicode) | 70 per segment | Yes | Full length |
| Instagram caption | 2,200 | Yes | Full length |
| Instagram bio | 150 | Yes | Full length |
| Instagram comment | 2,200 | Yes | Full length |
| LinkedIn post | 3,000 | Yes | Full length |
| LinkedIn headline | 220 | Yes | n/a |
| LinkedIn summary | 2,600 | Yes | Full length |
| Facebook post | 63,206 | Yes | Full length |
| TikTok caption | 4,000 | Yes | Full length |
| YouTube title | 100 | Yes | n/a |
| YouTube description | 5,000 | Yes | Full length |
| Meta description (SEO) | ~160 (mobile) / 158 (desktop) | Yes | n/a |
| Title tag (SEO) | ~60 (mobile) / ~70 (desktop) | Yes | n/a |
| Pinterest pin description | 500 | Yes | Full length |
| Mastodon toot (default) | 500 | Yes | 23 chars |
| Bluesky post | 300 (graphemes) | Yes | Full length |
| Threads post | 500 | Yes | Full length |
| WhatsApp message | 65,536 | Yes | Full length |
| Apple Push Notification | ~178 visible | Yes | Full length |
Why the same text is "longer" on some platforms
A character isn't a fixed concept. The same word can be 5 characters or 25 bytes depending on how the platform counts. Three counting systems matter in practice.
Bytes
A byte is a unit of storage. Most modern platforms store text in UTF-8 encoding, where:
- ASCII letters and punctuation are 1 byte each.
- Common accented Latin characters (é, ñ, ü) are 2 bytes.
- Most non-Latin scripts (Cyrillic, Arabic, Hebrew) are 2 bytes per character.
- Chinese, Japanese, and Korean characters are 3 bytes.
- Emoji are 4 bytes — sometimes more, when they're combined into compound forms.
Platforms that limit by bytes (relatively rare on consumer apps, common in databases and APIs) will tell you that "hello" is 5 characters but "héllo" is 6, and "👋 hello" is 11.
Code points
A code point is a single Unicode scalar value. This is closer to what most people think of as "a character", but it has surprises. The letter "é" can be:
- A single code point (U+00E9 — LATIN SMALL LETTER E WITH ACUTE), or
- Two code points (U+0065 LATIN SMALL LETTER E + U+0301 COMBINING ACUTE ACCENT).
Both render identically. Twitter counts them differently. So does Python's len().
Graphemes (user-perceived characters)
A grapheme is what a reader thinks of as one character: one "letter" they can highlight with their cursor. This is the most user-friendly counting unit and the one most modern platforms have moved to.
Take the flag emoji 🇬🇧. It's a grapheme — one visible character. But under the hood it's two regional indicator symbol code points (🇬 + 🇧), which take 8 bytes in UTF-8. Bluesky counts it as one character. Twitter counts it as two. Old SMS systems count it as eight.
If a platform brags about "300 characters" but uses graphemes, you can fit more emoji-heavy text than the equivalent code-point limit suggests.
SMS: the most expensive character limit
SMS is the platform where character counting genuinely costs money, and it's the one where most people get caught out.
Plain ASCII SMS uses an encoding called GSM-7, which gives you 160 characters per segment. (A segment is what you pay for when sending bulk SMS — exceed 160 and your single message becomes two segments and twice the cost.)
Add a single emoji, em-dash, or non-Latin character and the entire message switches to UCS-2 encoding, which drops the per-segment limit to 70 characters. The encoding switch happens for the whole message, not just the offending character. A 150-character text message costs 1 segment as plain ASCII; the same message with one emoji at the end costs 3 segments (because 150 > 70 × 2).
Specific characters that silently switch SMS to UCS-2 — and you'd never guess from looking:
- Curly quotes (" " ' ')
- En-dash and em-dash (– —)
- Ellipsis as a single character (…)
- Bullet (•)
- Section sign (§)
- Most emoji
- The euro sign (€) — actually allowed in GSM-7 extension table, but counts as 2 characters
- Tilde (~), pipe (|), backslash (), and curly braces ({}) — also extension table, also 2 characters each
If you're sending SMS at scale, the rule is: stick to plain ASCII, straight quotes, and standard punctuation. A typography pass through your draft (replacing curly quotes with straight, em-dashes with hyphens) can halve your SMS costs.
Meta description and title tag: the SEO traps
These have no hard cap. Google will display whatever you write. But it will truncate descriptions and titles that exceed the display width — and the cutoff is pixel-width, not character count.
That's why two equally-long-looking descriptions can both get truncated at different points. Capital letters and wide characters (W, M) take up more pixels than narrow ones (i, l). Mobile and desktop displays truncate at different widths.
Practical targets:
- Title tag: stay under 60 characters to be safe across all devices. The hard pixel ceiling is about 600px on desktop and 560px on mobile.
- Meta description: stay under 155 characters for desktop, 120 characters for mobile. The visible width is about 920px desktop, 680px mobile.
The mobile limits matter more now that mobile search dominates. If you have to choose, optimise for the mobile cutoff.
A useful rule for both: front-load the important content. If the title gets truncated, you want the truncation to remove decorative trailing words, not the brand name or primary keyword.
Twitter / X: the URL exception
Twitter's character counter does something specific that catches new users out: every URL counts as 23 characters, regardless of its actual length.
This is because Twitter wraps every link in its t.co URL shortener for click tracking. A 300-character URL and a 12-character URL both display in your tweet at their real length, but both consume 23 characters of your 280 budget.
This means:
- You can paste long URLs without worrying about character cost.
- You can't save characters by pre-shortening URLs through bit.ly or similar — t.co still wraps the shortened URL, so you end up with two layers of redirection.
- The 23-character count includes one trailing space, so URLs at the end of a tweet are effectively 22 characters of "real" cost.
X Premium's 4,000-character limit works the same way for URL counting, but obviously the 23-character URL cost matters less when you have 4,000 characters to work with.
Instagram: the front-loading rule
Instagram caption limit is 2,200 characters, but only the first 125 characters are visible in the feed before the "more" link appears. (Recent Instagram redesigns have nudged this number; it's worth testing your specific account's behaviour.)
This isn't a hard limit — it's a behavioural limit. Most users won't tap "more". So:
- Hook in the first 125 characters. Don't open with "Hi everyone! So I just got back from..." and expect anyone to read the rest.
- Hashtags count toward the 2,200 limit. Max 30 per post.
- @mentions count toward the limit.
The 150-character bio limit is much tighter and the bio is always fully visible — pack it tighter than feels comfortable.
Email subject lines: the inbox-preview ceiling
Email has no formal subject line limit but every inbox truncates differently:
- Gmail (desktop): ~70 characters visible
- Gmail (mobile app): ~30–35 characters
- Apple Mail (iOS): ~35 characters in portrait, ~70 in landscape
- Outlook desktop: ~60 characters
- Outlook mobile: ~30 characters
If most of your audience reads email on mobile, the operative limit is 30–35 characters. This is brutal — it forces hard editing of every subject line. The good news is that subject lines that survive a 35-character constraint usually outperform longer ones on open rate.
Bluesky and Mastodon: the modern social limits
Both newer platforms picked shorter limits than Twitter, partly as design statements about brevity:
- Mastodon: 500 characters (default; individual instances can raise this).
- Bluesky: 300 characters, counted in graphemes — so emoji and flags don't penalise you the way they do on older platforms.
Bluesky's grapheme counting is the cleanest implementation around — it matches what humans intuitively see as "one character" more closely than any major platform predecessor.
A workflow for character-limit writing
A defensible workflow for tight-character contexts:
- Draft without watching the counter. Get the message right first.
- Paste into the character counter and read the count.
- If over by under 20%: edit by replacing words (e.g., "approximately" → "about"). The case converter can compress acronyms; the readability checker can flag the sentences that need shortening.
- If over by more than 20%: the message is structurally too long for the medium. Either pick a different medium or split into multiple parts.
- Always re-paste after edits. Mental character counts are unreliable.
The honest summary
Character limits aren't going away, and they don't follow a single rule. Twitter counts URLs as 23 regardless of length. SMS doubles in cost the moment you use one curly quote. Instagram has a "soft" front-loading limit at 125 that matters more than the 2,200 hard cap.
When in doubt: count in graphemes (what a reader sees), front-load the important content, and verify the count against the actual platform rather than trusting your draft.
The character counter shows characters with and without spaces, plus byte counts — useful for catching the SMS encoding switch before you send.