FIRST CH TOOLS / Text / 42 X POST COUNTER
X (Twitter) Post Counter
The length of a post on X is not a plain character count. CJK characters, kana and full-width punctuation cost 2 each, a link costs 23 whatever its length, and the limit is 280 weight. Paste a draft and this page shows the weight, what is left and exactly where the post stops fitting, detecting URLs, mentions and hashtags and counting them at their effective weight. Built for checking a draft before it goes out.
Counted as you type
| Kind | Text | Weight |
|---|
No URL, mention or hashtag found yet.
For a plain count of characters, words and lines, use Character Counter — it counts a different way from this page. Normalising full-width and half-width forms is in Full-width ⇄ Half-width Converter.
What each character costs
| Kind | Example | Weight |
|---|---|---|
| Latin letters, digits, ASCII punctuation | A b 1 ! ? | 1 |
| Latin extended, Greek, Cyrillic | é ü α д | 1 |
| Common punctuation (U+2000–U+200D, U+2010–U+201F, U+2032–U+2037) | – — ‘ ’ “ ” | 1 |
| Line break, space | — | 1 |
| Kanji, hiragana, katakana | 漢 あ ア | 2 |
| Full-width letters, digits and punctuation | A 1 。 、 「 」 ! | 2 |
| Emoji (a whole sequence counts once) | 😀 👨👩👦 🇯🇵 1️⃣ | 2 |
| URL (with or without a scheme, any length) | https://example.com/… or example.com | 23 |
| @mention, #hashtag | @first_ch / #webtools | same as plain text |
The limit is 280 weight, not 280 characters. A post written in English can run to 280 characters, but a post written in Japanese hits the limit at 140 characters. In a post that mixes the two, there is no way to tell from looking how much room is left — which is what this page is for.
A link always costs 23. X replaces every link in a post with a t.co short URL, so a long URL full of parameters and a bare domain cost exactly the same. The corollary is that a URL shortener buys you no extra room — it only adds one more redirect. Leaving your UTM parameters on the link costs nothing.
An emoji costs 2 however many code points it is made of. The family emoji (👨👩👦) is four to seven characters joined together internally, but X counts it as a single emoji worth 2. The same goes for skin-tone modifiers, flags (🇯🇵) and keycaps (1️⃣).
What is not counted. The @username handles that X prepends to a reply, and images, videos or a quoted post attached at the end, are outside the weight. A mention typed inside the body is counted as ordinary text. This page counts the body only, so paste the body without the reply handles.
How to Use
- Paste the draftWeight, remaining budget and line count update as you type. Besides the standard 280, the X Premium limits of 4,000 and 25,000 are available.
- Look at the overflowAnything highlighted in red is the part that would be cut. URLs, mentions and hashtags are coloured, and the table below lists their effective weight.
- Fix it and copyGoing over your target (275 by default) raises a warning while still being postable. "Trim to the limit" cuts the draft mechanically at the last position that fits.
About This Tool
Length on X is measured as a weighted character count. When the limit went from 140 to 280 in 2017, per-character weights came with it. Latin letters, digits and common punctuation count as 1; everything else — CJK, kana, full-width punctuation, emoji — counts as 2, and a post is publishable while the total stays at or below 280. That is why a Japanese post effectively stops at 140 characters, and why writing to "280 characters" always misses.
The weight table is the one X publishes in twitter-text (configuration v3). Weight 1 covers U+0000–U+10FF (Latin, Latin Extended, Greek, Cyrillic and so on) plus the punctuation at U+2000–U+200D, U+2010–U+201F and U+2032–U+2037. That is why an em dash (—) and curly quotes (“ ”) cost 1 while Japanese brackets and 。、 cost 2. The text is normalised to NFC before counting, exactly as X does, so a "カ" followed by a combining voiced mark counts as one character (weight 2), not two.
Links are counted at a flat 23. This page detects both links written with a scheme (https://…) and bare domains (example.com, example.co.jp/path). Note, though, that the list of top-level domains used for the bare form is a built-in list of the ones that turn up in practice, not the complete gTLD/ccTLD list X carries. A bare domain on an unusual TLD is counted here as plain text while X would count it as 23 — writing https:// in front always makes the two agree. An email address (name@example.com) is not a link on X, and is counted as plain text here too.
Hashtags and mentions are ordinary text. They carry no special weight, so a Japanese hashtag costs 2 per character (#Webツール is 1 + 3 + 8 = 12). A hashtag made only of digits (#1) is not a hashtag on X and is not detected here either. The handles X prepends to a reply are excluded from the weight, but that happens in the composer, so this page counts only the characters you write in the body.
The target field exists for house rules. A post written right up to the limit breaks the moment someone adds a quote, a reply handle or one more tag, and every edit turns into a rewrite. Aiming at 260–275 leaves room for an afterthought, which is why exceeding the target warns you even though the post still fits.
Your draft never leaves the browser — the counting and the overflow highlight both run locally. Directly callable via URL parameters: /en/x-length/?text=hello / /en/x-length/?text=draft&limit=280&target=260
Other Tools
- 01Batch Image → WebP ConverterWebP Converter
- 02White Background RemoverWhite BG Remover
- 03WCAG Contrast CheckerContrast Checker
- 04Character CounterCharacter Counter
- 05llms.txt Generatorllms.txt Generator
- 06JSON-LD GeneratorJSON-LD Generator
- 07Markdown → PDFMD → PDF
- 08OGP Meta Tag WizardOGP Wizard
- 09Favicon GeneratorFavicon Generator
- 10TikTok PublisherTikTok Publisher
- 11Encoding & Line Ending ConverterEncoding Converter
- 12Batch Image → AVIF ConverterAVIF Converter
- 13Test Data GeneratorTest Data Generator
- 14Marp Markdown → SlidesMarp Slides
- 15Text & Code Diff CheckerDiff Checker
- 16Cron Expression ExplainerCron Explainer
- 17Base64 & Data URI EncoderBase64 & Data URI
- 18URL Parameter Editor & UTM BuilderURL Parameters
- 19HTML Entity Escape & UnescapeHTML Escape
- 20JSON ⇄ YAML ConverterJSON ⇄ YAML
- 21PX ⇄ REM / EM ConverterPX ⇄ REM / EM 単位変換
- 22Color Converter & AlphaColorコード変換&アルファ透過
- 23MD5 / SHA-256 Hash Generatorハッシュ生成
- 24JWT Decoder & Expiry CheckerJWTデコーダー&有効期限チェッカー
- 25User-Agent ParserUser-Agent解析&デバイス判定
- 26UUID & ULID GeneratorUUID (v4) & ULID 一括生成
- 27Aspect Ratio Calculatorアスペクト比計算&サイズ算出
- 28Markdown Table & CSV/TSV ConverterMarkdownテーブル整形&CSV/TSV変換
- 29SQL Query FormatterSQLクエリフォーマッター&整形
- 30QR Code GeneratorQR Code Generator
- 31Regex Tester正規表現テスター
- 32Unix Timestamp ConverterUNIXタイムスタンプ⇄日時変換
- 33New Tab Memo — Chrome Extension新規タブメモ帳 Chrome拡張
- 34Image Resizer & Cropper画像リサイズ&クロップ
- 35EXIF Viewer & RemoverEXIF情報の確認&除去
- 36robots.txt Generatorrobots.txt ジェネレーター
- 37Password Generator安全なパスワード生成
- 38Case Converter文字列ケース変換
- 39CSV/TSV ⇄ JSON ConverterCSV/TSV ⇄ JSON 相互変換
- 40PDF Merge, Split & ExtractPDF結合・分割・ページ抽出
- 41Full-width ⇄ Half-width Converter全角⇄半角変換&テキストクリーナー