Skip to content
HNarzędzia
en
Categories

Text

Character count limits: SMS, X posts, meta descriptions and standard pages

The same text can be 1,800 characters with spaces and 1,521 without, and an SMS with one accented letter can split into three messages. A character count limit only works if you know what it counts, so settle the unit first and watch the number second.

A limit that says “280 characters” or “160 characters” sounds exact until you have to check it. A form cuts your description at 500 characters, a post will not publish, a text message arrives in three parts, and a client asks for “five pages” of translation. Each time, “character” means something slightly different. Below is the order to check things in, with measurements taken in the character counter.

Settle the unit first

Where the limit applies What is counted Note
Standard page, publisher’s sheet characters with spaces pages = characters with spaces ÷ 1,800
Form field, CMS field usually every character, spaces included depends on the system; read the message next to the field
SMS encoding units (GSM-7 septets or UTF-16 units) one accented letter can change the encoding of the whole message
Post on X weighted length, not a plain character count an emoji counts as 2, a link as 23
Meta description and page title in Google no character limit the result is cut to fit the screen width

The counter shows characters with and without spaces, standard pages, SMS parts and three bars with approximate lengths. The rest of this guide explains how to read those numbers and where they differ from the rules of a given service.

Characters with and without spaces

In the counter, “Characters with spaces” is every character in the text, including spaces, tabs and line breaks. “Characters without spaces” leaves out all whitespace. The gap is large. We generated a synthetic Polish test text from random words with a fixed seed (script scripts/guide-fixtures/character-limits.mjs), exactly 1,800 characters with spaces. The counter showed:

  • 1,800 characters with spaces,
  • 1,521 characters without spaces,
  • 280 words and 1 standard page.

Spaces made up 279 characters, about 15% of the length in this text. In that proportion, a text of 10,000 characters with spaces would have roughly 8,450 without them. If a client or a platform says “characters” and nothing more, ask which version they mean. If nobody answers, state both numbers in your quote or submission.

The 1,800-character standard page

A standard page (also called a manuscript page) is 1,800 characters with spaces, laid out as 30 lines of 60 characters. It matters mainly if you translate into or out of Polish or work with Polish publishers, who count in these pages. We found no statute or standard that defines it, so treat it as a publishing convention. Publishers use it in author guidelines: the Institute of History of the Polish Academy of Sciences press, for example, asks for abstracts measured in pages of 1,800 characters with spaces, and measures a book in publisher’s sheets of 40,000 characters including spaces and footnotes (author guidelines, in Polish, checked October 2026). A sheet is about 22 pages, since 40,000 ÷ 1,800 = 22.2. Other publishers may not count footnotes, so the house rules of the publisher you write for come first.

Certified translation uses a different page

Polish sworn (certified) translators bill by another page. The Minister of Justice regulation on their fees defines a page as 25 lines of 45 characters, so 1,125 characters, and counts visible printed characters and the gaps between them that the sentence needs (consolidated text from 2021 in the Sejm database, in Polish, § 8; we did not check later amendments, so look at the current text in ISAP before you price a job). The counter does not show this page. It shows only pages of 1,800 characters, so divide the character count by 1,125 yourself. The counter counts every space, while the regulation counts only the gaps that are justified, so the result is an approximation.

Why programs count the same text differently

There are three reasons: what counts as one character, what counts as part of the text, and whether the text was normalized first.

What the counter treats as one character

The counter normalizes text to Unicode form NFC and then counts code points (Array.from). It does not count grapheme clusters, the symbols a person sees as one character. For letters like ł or ś this makes no difference, but emoji can be built from several code points. We typed a few examples into the counter and added measures from Node next to them (graphemes from Intl.Segmenter, UTF-16 units, UTF-8 bytes):

Text Counter Graphemes (Node) UTF-16 units (Node) UTF-8 bytes (Node)
Zażółć gęślą jaźń 17 17 17 26
👍 1 1 2 4
👍🏽 (thumbs up with skin tone) 2 1 4 8
🇵🇱 (flag) 2 1 4 8
👨‍👩‍👧 (family) 5 1 8 18
1️⃣ (keycap digit) 3 1 3 7
❤️ 2 1 2 6

The family emoji is three people joined by two invisible joiner characters, so the counter shows 5 although you see one symbol. A tool that counts graphemes shows 1, and one that counts UTF-16 units (which is what length does in JavaScript) shows 8. None of these numbers is wrong. Each follows a different definition of a character.

Character counter with three emoji typed in: a thumbs up with skin tone, the Polish flag and a heart, which add up to 6 characters with spaces and 6 without spaces

Normalization matters when text comes from another system. The string “Zażółć gęślą jaźń” stored in decomposed form (NFD, a letter followed by a separate accent mark) has 25 code points. The counter normalizes it to NFC and shows 17 characters and 3 words. A tool that does not normalize will count more characters.

What counts as part of the text

Invisible characters change the result without changing how the text looks. Four versions of the same content in the counter:

Text Characters with spaces Characters without spaces
w domu i w pracy (ordinary spaces) 16 12
the same with non-breaking spaces after “w” and “i” 16 12
the same with a zero-width space (U+200B) after “domu” 17 13
two lines separated by Enter (linia 1 and linia 2) 15 12

A non-breaking space counts as a space, so it disappears from the “without spaces” figure. A zero-width space is not treated as whitespace, so the counter counts it as an ordinary character and raises both numbers. Text copied from a web page or a PDF sometimes carries such characters, and you cannot see them. A line break counts as one character in “with spaces”.

Editors also differ in what goes into their statistics. According to Google’s help page, Google Docs leaves headers, footers and footnotes out of its word count. If you paste the text into the counter instead of reading the editor’s statistics, you get the number for exactly what you pasted.

SMS: one accented letter and the limit drops from 160 to 70

The limits come from 3GPP TS 23.038, published as ETSI TS 123 038 V17.0.0 (2022-04) (checked October 2026). A message in the default GSM 7-bit alphabet can hold up to 160 characters, and a message in UCS2 up to 140 octets, which is 70 characters. Characters from the extension table (for example €, square and curly brackets, ^, ~, \ and |) take two positions. The national language tables in that edition cover Turkish, Spanish, Portuguese and several Indian languages, and Polish is not among them.

A letter that is not in the GSM-7 alphabet switches the whole message to UCS-2. In the counter’s alphabet table é is in GSM-7, while á and ó are not, and neither are Polish letters such as ł or ś. The counter shows this directly: the number of parts, how full the current part is, and an orange warning that lists the characters that forced UCS-2. A message split into several parts has less room per part, because a header is added. The counter assumes 153 characters per part in GSM-7 and 67 in UCS-2 (those two figures come from the tool’s code, not from the document above).

The surprising case for English speakers is not a foreign alphabet but typography. Here is a synthetic reminder of 107 characters with spaces, typed with a straight apostrophe and then with a curly one:

Hi Sam, your appointment is tomorrow at 9:30. Please reply YES to confirm, or call us if you can’t make it.

Character counter with a 107-character SMS containing a curly apostrophe: 2 SMS parts, UCS-2 encoding, and a warning that the apostrophe is outside the GSM-7 alphabet

With the straight apostrophe (can't), the counter showed 107 characters, GSM-7 and 1 part. With the curly one (can’t) it showed the same 107 characters, UCS-2 encoding and 2 parts (67 + 40). Text pasted from a word processor often has such typographic characters, so paste it into the counter before sending and check the characters listed in the warning.

The counter also treated these as outside GSM-7: an en dash (a 38-character English message with one en dash and no other unusual letter got UCS-2), a non-breaking space, a tab and a zero-width space. The Polish version of this check is the same with more letters: a 144-character Polish reminder with five accented letters took 3 parts in UCS-2, and the same text without accents took 1 part in GSM-7. To strip Polish letters or other accents, use the remove accents tool. It replaces letters, but it leaves curly quotes and dashes alone, so fix those by hand.

Boundaries we checked in the counter:

Text Encoding Parts
160 letters “a” GSM-7 1
161 letters “a” GSM-7 2
70 letters “ś” UCS-2 1
71 letters “ś” UCS-2 2
80 euro signs (160 septets, as each € takes 2) GSM-7 1
81 euro signs GSM-7 2
35 emoji 😀 (2 UTF-16 units each) UCS-2 1
36 emoji 😀 UCS-2 2

Removing accents costs readability, and in formal messages some recipients will find the unaccented text sloppy. The other options are to shorten the message to 70 characters or accept several parts. The right choice depends on what your carrier or SMS gateway charges per part, which the counter does not know. Gateways can also apply their own rules (replacing characters, adding a sender name), so send a test message after you change the text.

Platform limits: posts and meta descriptions

X (Twitter)

X’s documentation on counting characters (checked October 2026) describes a limit of 280 weighted characters:

  • Latin letters, digits and punctuation count as 1,
  • emoji count as 2, including composed ones (a thumbs up with skin tone, a family),
  • every link counts as 23 characters, whatever its length,
  • length is measured after NFC normalization.

Accented Latin letters, including Polish ones, weigh 1. In the configuration of the twitter-text library (config/v3.json), which the documentation points to, code points 0 to 4351 have a weight of 1, and the default weight for other characters is 2.

The counter’s “X (Twitter) post” bar follows these rules. It normalizes the text to NFC, counts an emoji (the whole symbol, composed ones included) as 2, a link as 23, and characters outside the weight-1 ranges, such as Chinese ones, as 2. It spots links with a simplified pattern: addresses starting with http:// or https://, and domains with a common ending such as example.com/path. A country-code domain without a protocol (for example .pl) counts as a link only if it has a path after a slash. The pattern does not know X’s full domain list, so with an unusual address the result can be off by the difference between the address length and 23. The comparison below uses test texts and measurements from the tool (we checked the match with the documented rules by calculation, not in the X app):

Text Characters in the counter “X (Twitter) post” bar
140 emoji 😀 140 280/280
141 emoji 😀 141 282/280, too long
a link with UTM parameters, 113 characters 113 23/280
Zażółć gęślą jaźń 17 17/280
a short Polish phrase, the emoji 👍🏽 and a UTM link (137 code points) 137 47/280
漢字漢字 4 8/280

The other statistics in the counter (characters with spaces, without spaces, pages) still count emoji by code points, so for an X post read the bar, not the first tile.

LinkedIn

LinkedIn’s help page on posts (checked October 2026) says a post can contain up to 3,000 characters. It does not describe how emoji or links are counted, so the counter will give you a character count but cannot settle a dispute over the last few.

Meta description and title tag in Google

Google does not set a character limit for the meta description. Search Central’s documentation on snippets (checked October 2026) says the description can be any length, and the snippet in results is shortened, usually based on screen size. The page on title links says the same of titles: no length limit, and the displayed title is truncated to fit the device width. Google advises avoiding unnecessarily long titles, and you can cap snippet length with the max-snippet tag.

The “SEO title (~60 characters)” and “Meta description (~160 characters)” bars in the counter are therefore planning guides, not a Google rule. In practice, put the important information at the start of the description so that nothing essential is lost if it gets cut. A character count cannot predict exactly where the cut falls, because an “i” takes less room than a “w” and a phone screen has less room than a desktop one.

A checking routine

  1. Identify the unit: characters with spaces, without spaces, SMS units or the weighted length of an X post. Note too whether footnotes, headers and signatures count toward the limit.
  2. Paste the text into the counter and read the right figure. If it came from another editor, look at the orange warning (characters outside GSM-7) and at the gap between “with spaces” and “without spaces”, which gives away odd whitespace.
  3. For an SMS, check the number of parts and the warning, then decide: shorten, remove accents or keep the extra parts.
  4. For an X post, read the “X (Twitter) post” bar, not the character count. If the post has an address in an unusual form (for example a rare domain without https://), count that address as 23 by hand.
  5. Write text for Google so that being cut does no harm, instead of aiming for a number.

What the counter does not do

  • The character statistics count code points, not graphemes. Composed emoji may give more characters than the symbols you see. The X bar counts an emoji as one symbol, worth 2.
  • The “X (Twitter) post” bar spots links with a simplified pattern and does not know X’s full domain list.
  • The title and meta description bars are approximate values, not Google limits.
  • It does not show the sworn-translation page of 1,125 characters. You have to convert that one yourself.
  • SMS parts are calculated from 160/153 and 70/67. Your carrier or gateway may process the message differently.
  • The text stays in your browser and is not sent to a server.