Limites de caracteres e palavras 2026 — Twitter, SMS, SEO, Instagram
Um limite de caracteres é o número máximo de pontos de código (codepoints) Unicode que uma plataforma aceita em um campo: 280 para uma postagem no Twitter, 160 para um SMS de segmento único em GSM-7, cerca de 160 para uma meta description do Google antes do corte. O número que importa para você depende de onde publica e se o texto contém emoji, aspas tipográficas ou caracteres CJK. Qualquer um deles altera a conta.
Este guia serve para quem escreve nas redes sociais, especialistas em SEO, redatores de marketing, quem envia SMS cobrado por segmento e desenvolvedores que escrevem validações que precisam bater com o que Twitter, Instagram ou gateways de SMS realmente contam. Vá direto à tabela de referência rápida com o resumo de 25 plataformas, ou confira seu rascunho ao vivo contra seis plataformas principais no Contador de Palavras: as barras de progresso ficam vermelhas no instante em que você ultrapassa um limite.
Referência rápida — Limite de caracteres e palavras de cada plataforma
A tabela abaixo cobre os 30+ campos com que redatores e desenvolvedoras mais se deparam. “Limite máximo” é o teto imposto pela plataforma, “Visível / acima da dobra” é o que o leitor vê antes do ponto de truncamento, e “Faixa ideal” é o intervalo empírico em que o conteúdo tem melhor desempenho.
| Plataforma | Limite máximo | Visível / acima da dobra | Faixa ideal | Conta emoji como |
|---|---|---|---|---|
| Twitter / X — postagem | 280 chars | 280 | 70-100 chars | 1 codepoint |
| Twitter / X — bio | 160 chars | 160 | — | 1 codepoint |
| Twitter / X — nome de exibição | 50 chars | 50 | — | 1 codepoint |
| X Premium — texto longo | 25,000 chars | — | — | 1 codepoint |
| Instagram — legenda | 2,200 chars | primeiros 125 (depois “mais”) | <125 para o gancho | 1 codepoint |
| Instagram — bio | 150 chars | 150 | — | 1 codepoint |
| Instagram — hashtags | máx 30 | — | 5-10 | — |
| LinkedIn — postagem | 3,000 chars | primeiros 210 (depois “ver mais”) | <1,300 | 1 codepoint |
| LinkedIn — artigo | 110,000 chars | — | — | 1 codepoint |
| LinkedIn — headline | 220 chars | 220 | — | 1 codepoint |
| Facebook — postagem | 63,206 chars | ~477 desktop / ~125 mobile | <80 para alcance orgânico | 1 codepoint |
| TikTok — legenda | 2,200 chars | primeiros ~100 | <150 | 1 codepoint |
| YouTube — título | 100 chars | 70 (busca) | <60 | 1 codepoint |
| YouTube — descrição | 5,000 chars | primeiros 100-150 acima da dobra | primeiros 150 para o gancho | 1 codepoint |
| YouTube — comentário | 10,000 chars | — | — | 1 codepoint |
| Reddit — título | 300 chars | — | <60 (depende do subreddit) | 1 codepoint |
| Reddit — comentário | 10,000 chars | — | — | 1 codepoint |
| Discord — mensagem | 2,000 chars | 2,000 | — | 1 codepoint |
| Discord — descrição de embed | 4,096 chars | — | — | 1 codepoint |
| Slack — mensagem | 40,000 chars | — | <2,000 para legibilidade | 1 codepoint |
| Pinterest — descrição do pin | 500 chars | primeiros 50-60 | <125 | 1 codepoint |
| Mastodon — toot | 500 chars (configurável) | 500 | — | 1 codepoint |
| Bluesky — post | 300 chars | 300 | — | 1 grapheme cluster |
| Threads — post | 500 chars | 500 | — | 1 codepoint |
| SEO meta description (Google) | ~160 chars desktop / ~120 mobile | 150-160 | 150-160 | 1 codepoint |
| SEO title da página (Google) | ~60 chars desktop / ~50 mobile | 50-60 | 50-60 | 1 codepoint |
| Open Graph — descrição | ~200 chars antes do corte LinkedIn/FB | 150-200 | 150-200 | 1 codepoint |
| Twitter Card — descrição | 200 chars máx | 200 | 150-200 | 1 codepoint |
| SMS — segmento único (GSM-7) | 160 chars | — | — | especial — ver abaixo |
| SMS — segmento único (UCS-2 / emoji) | 70 chars | — | — | 1 codepoint |
| WhatsApp — texto da mensagem | 65,536 chars | — | — | 1 codepoint |
| E-mail — assunto | sem limite da plataforma | ~60 desktop / ~30 mobile | <50 | 1 codepoint |
| Google Ads — headline | 30 chars × 15 headlines | 30 cada | 30 | 1 codepoint |
| Google Ads — descrição | 90 chars × 4 desc | 90 cada | 90 | 1 codepoint |
| App Store — título | 30 chars | 30 | 30 | 1 codepoint |
| App Store — subtítulo | 30 chars | 30 | 30 | 1 codepoint |
| App Store — descrição | 4,000 chars | primeiros 252 acima da dobra | 252 no gancho | 1 codepoint |
| Play Store — descrição curta | 80 chars | 80 | 80 | 1 codepoint |
| Play Store — descrição longa | 4,000 chars | primeiros 80 acima da dobra | 80 no gancho | 1 codepoint |
Conteúdo acima da linha “faixa ideal” costuma ser truncado ou cortado do cartão visível. X Premium em formato longo e Mastodon (configurável por instância) são as raras exceções que permitem ir além de 500 caracteres sem penalidade. Todas as contagens acima, com a exceção das regras de SMS, usam pontos de código (codepoints) Unicode: um emoji custa 1 caractere, não 2. Para verificar um rascunho contra os seis limites mais comuns de uma vez só, cole no Contador de Palavras; as barras de progresso pegam o excesso antes de você clicar em publicar.
Como os caracteres são contados na prática (codepoints Unicode vs UTF-16)
Três ferramentas diferentes podem te dar três contagens diferentes para a mesma string. O motivo é que “caractere” não é uma coisa só: pode significar um ponto de código (codepoint) Unicode, uma unidade de código (code unit) UTF-16 ou um agrupamento de grafemas (grapheme cluster), e cada plataforma escolhe um deles.
O que é um “caractere”: codepoint vs code unit vs grapheme
Um codepoint é um valor escalar Unicode: qualquer inteiro de U+0000 a U+10FFFF que o Unicode tenha atribuído a um caractere ou marcado como reservado. Uma code unit é a menor peça de uma codificação; UTF-16 usa code units de 16 bits, UTF-8 usa code units de 8 bits. Um grapheme cluster é o que humanos percebem como um único caractere visível: às vezes um codepoint, às vezes um codepoint base com marcas de combinação, às vezes uma sequência com zero-width joiner como o emoji da família 👨👩👧👦 (sete codepoints unidos em um único glifo visível).
Para a string "a🌍👨👩👧" as três contagens divergem:
| Método de contagem | Resultado | Usado por |
|---|---|---|
UTF-16 code units (JS string.length) | 10 | Código JavaScript ingênuo |
| Codepoints Unicode | 6 | Twitter, Instagram, gateways de SMS |
| Grapheme clusters | 3 | Bluesky, leitores de tela, editores de texto |
Por que string.length mente sobre emoji
JavaScript guarda strings internamente em UTF-16. Qualquer codepoint acima de U+FFFF (todo emoji, todos os caracteres dos planos astrais) é codificado como um par substituto (surrogate pair), ou seja, duas code units de 16 bits. A propriedade .length reporta essas duas unidades, não um caractere.
"🌍".length // 2 (UTF-16 code units)
[..."🌍"].length // 1 (codepoints — what Twitter/SMS counts)
"🌍".match(/./gu).length // 1 (codepoints via regex with /u flag)
O operador spread e a flag de regex /u iteram por codepoint, que é o que Twitter, Instagram e gateways de SMS medem contra seus limites. Uma função de validação que usa .length cru vai rejeitar tweets que estão de fato abaixo do teto, ou, pior, deixar passar mensagens que o sistema downstream vai rejeitar.
E quanto a CJK e marcas de combinação
Ideogramas chineses, japoneses e coreanos são, cada um, um único codepoint e contam como um caractere em toda plataforma. Onde eles ficam caros é em SMS: qualquer caractere fora de GSM-7 vira a mensagem inteira para a codificação UCS-2, derrubando o limite de segmento de 160 para 70 (coberto na próxima seção).
Marcas de combinação se comportam de outro jeito. O á acentuado escrito como á é um codepoint; o mesmo á escrito como a + ́ (acento agudo combinante) são dois codepoints, mas um grapheme cluster. A maioria das plataformas conta por codepoint, então a segunda forma custa um caractere a mais. Bluesky é a exceção visível: conta grapheme clusters, então ambas as formas custam 1.
Contagem em diferentes linguagens: referência rápida
// JavaScript
[...str].length // codepoints
Array.from(str).length // codepoints
// Python 3 — len() is codepoint by default
len(s)
// Go — utf8 package
utf8.RuneCountInString(s)
// Rust — chars() iterates codepoints
s.chars().count()
// Java — codePointCount
s.codePointCount(0, s.length())
Para comparar, o Codificador Base64 lembra a direção oposta: quando o texto é codificado em Base64 para transmissão, cada 3 bytes de entrada UTF-8 viram 4 caracteres ASCII de saída, então o tamanho codificado depende da contagem de bytes, não da contagem de codepoints. Cole um único emoji e veja a saída Base64 se expandir para 8 caracteres: o mesmo emoji que custa 1 caractere no Twitter ocupa 4 bytes em UTF-8.
Para ver contagens por codepoint (o número que o Twitter realmente mede) em qualquer rascunho, o Contador de Palavras é Unicode-correto por padrão.
Limite de caracteres em SMS: GSM-7, UCS-2 e mensagens multipartes
SMS é o único canal de massa em que adicionar um único emoji pode literalmente dobrar sua conta. O motivo é a codificação, e a matemática é a mesma desde 1985.
O número mágico 160: história do GSM-7
O padrão GSM-03.38 de 1985 fixou o payload de um SMS em 140 bytes. Com uma codificação de 7 bits por caractere, 140 bytes guardam 1,120 bits ÷ 7 = 160 caracteres. É daí que vem o famoso limite de caracteres de SMS de 160. O conjunto de caracteres GSM-7 cobre 128 caracteres base mais uma extensão de 10 caracteres (cobrindo { } [ ] | \ ~ ^ € e form feed). Dentro desse conjunto você tem o orçamento completo de 160 chars por segmento.
Caracteres que ficam fora de GSM-7 e forçam a troca:
- Todos os emojis
- Aspas curvas / tipográficas (
""'') — note que são diferentes das aspas retas ASCII"' - A maioria das letras latinas acentuadas além das 35 do GSM-7 (
é á ñ ü øetc.; GSM-7 inclui apenasä ö å æ ø à è ì ò ùe algumas outras) - Pontuação de largura total, caracteres CJK, árabe, hebraico, grego minúsculo, cirílico
- Crase
`e til~(o til está na tabela de extensão do GSM-7, então custa 2 dos seus 160 chars)
A armadilha do UCS-2: um emoji te derruba de 160 para 70
No momento em que um único caractere fora de GSM-7 aparece em qualquer lugar da mensagem, ela inteira é trocada para a codificação UCS-2. UCS-2 usa 16 bits por caractere, então 140 bytes ÷ 2 = 70 caracteres por segmento. Exemplos reais:
"Hello, your code is 12345" → 26 chars, GSM-7, 1 segment
"Hello, your code is 12345 ✓" → 28 chars, GSM-7 (✓ in extension), 1 segment
"Hello, your code is 12345 ✅" → 28 chars, UCS-2 (emoji), 1 segment (under 70)
"Hello, "your" code is 12345 ✅" → smart quotes + emoji → UCS-2
"Hi 你好" → CJK → UCS-2, 1 segment (5 chars)
Esse último exemplo “Hi 你好” é a pegadinha: tem só 5 caracteres, mas é cobrado como UCS-2, e os próximos 65 caracteres que você adicionar cabem em um segmento; daí o segmento 2 começa.
Segmentos de SMS multipartes (concatenação)
Quando você passa de 160 (GSM-7) ou 70 (UCS-2), a mensagem é dividida em vários segmentos. Cada segmento carrega um User Data Header (UDH) de 7 caracteres usado para a remontagem, então o payload disponível por segmento cai:
- GSM-7 multipartes: 153 caracteres por segmento
- UCS-2 multipartes: 67 caracteres por segmento
O celular receptor remonta os segmentos de forma invisível ao destinatário, mas a cobrança é por segmento, não por mensagem. Uma mensagem GSM-7 de 161 caracteres custa 2 segmentos. Uma mensagem GSM-7 de 1,000 caracteres custa 7 segmentos (153 × 6 = 918; o 7º segmento carrega os últimos 82).
Conta do custo: quando um emoji dobra sua fatura
Pegue uma mensagem de marketing em texto puro de 80 caracteres:
- Texto puro: 80 chars → GSM-7 → 1 segmento ao preço X
- Adicione um emoji: 80 chars → UCS-2 → 80 > 70 → 2 segmentos ao preço 2X
Dobrar a conta por causa de um emoji é real e escala. Uma campanha de 100,000 mensagens a $0.0075 por segmento custa $750 em GSM-7 e $1,500 em UCS-2: um emoji de $750. Todo grande provedor de SMS (Twilio, Bandwidth, AWS SNS, MessageBird, Vonage) cobra desse jeito. As regras de codificação vêm do padrão GSM, não da política do fornecedor. A história profunda dos compromissos de codificação no nível de byte, e por que ASCII / UTF-8 / UCS-2 existem como padrões separados, está coberta em Understanding Base64, que é a mesma família de problema “bits em caracteres” aplicada a e-mail em vez de SMS.
Como manter mensagens em GSM-7
- Use aspas retas ASCII
"', não aspas tipográficas - Use hífen ASCII
-, não travessão—ou meia-risca– - Escreva
(c)e(R)por extenso, não©e® - Evite emojis, a menos que o orçamento da campanha preveja o custo UCS-2
- Consoles dos provedores (Twilio, Bandwidth, MessageBird) mostram “encoding: GSM-7” ou “UCS-2” ao lado do preview — verifique antes de disparar
A checagem mais rápida durante o rascunho é a barra de progresso de SMS do Contador de Palavras, que reporta contra a base de 160 chars. Se o texto disparar UCS-2, divida mentalmente sua contagem de caracteres por 2.29 para estimar o número de segmentos sob a regra dos 70 chars.
Limites de SEO: Meta description, title tag, OG, Twitter Card
Limites de caracteres em SEO são mais flexíveis que limites de plataformas (o Google não rejeita sua página se uma meta description atingir 300 caracteres), mas as regras práticas de truncamento importam para a taxa de cliques. Estes são os números que ainda valem em 2026.
Meta description: faixa ideal de 150-160 caracteres
Os resultados de busca do Google no desktop truncam a meta description em torno de 155-165 caracteres; no mobile, o corte fica entre 100 e 120. O ponto exato de corte varia porque o Google mede pixels de exibição, não caracteres. Uma descrição cheia de W e M bate no pixel de corte antes que uma cheia de i e l.
Regras práticas de redação:
- Mire em 150-160 caracteres no total
- Coloque a mensagem central nos primeiros 120 caracteres (mobile-safe)
- Comece com a palavra-chave meta description character limit da página nos primeiros 30 caracteres
- Termine com um CTA nos últimos 30 caracteres — legível mesmo quando o desktop corta o meio
A era 2017-2018 viu o Google expandir brevemente a exibição da meta description para 320 caracteres, e uma geração de tutoriais de SEO ainda cita esse número. O Google voltou a 160 em meados de 2018. Escrever além de 200 caracteres hoje só esconde a segunda metade.
Um modo de falha diferente: descrições abaixo de 120 caracteres muitas vezes são substituídas por completo. O Google decide que a sua descrição não atende totalmente à consulta e puxa um trecho diferente do corpo da página — você perde o controle do CTR sem aviso.
Title tag: 60 no desktop, 50 no mobile
Title tags cortam em torno de 60 caracteres no desktop e 50 no mobile. O mesmo truncamento por pixel das descrições, com o mesmo detalhe sobre glifos largos.
Faixa ideal: 50-60 caracteres, com a palavra-chave alvo nos primeiros 30 para sobreviver a qualquer corte. Sufixos longos de marca (| Brand Name) ficam no fim, onde o truncamento dói menos.
Largura em pixels vs contagem de caracteres: a regra real do Google
O contêiner de descrição na SERP do Google tem cerca de 920 pixels de largura no desktop. A largura média de um caractere fica em torno de 6.5 pixels, o que dá o alvo empírico de 140-160 caracteres. Mas a variação por caractere é grande: i renderiza em uns 3 pixels, M em uns 11. Uma descrição em caixa alta (“BEST WIDGETS FOR WINTER WEDDINGS”) corta substancialmente mais cedo do que o equivalente em minúsculas.
Previews antes da publicação usando simuladores de SERP precisos em pixels são mais confiáveis do que contadores de caracteres para texto de SEO.
Descrição OG e descrição do Twitter Card
A og:description do protocolo Open Graph é o que Facebook, LinkedIn, Slack e Discord renderizam sob o preview de um link compartilhado. Os limites de exibição variam por plataforma: a maioria corta em torno de 200 caracteres, alguns estendem até 300. O twitter:description do Twitter Card tem teto fixo de 200 caracteres no parser do Twitter.
Padrões razoáveis:
- 150-200 caracteres para OG e Twitter Card
- Podem ser iguais à sua meta description, mas OG pode ser um pouco mais longa porque o tamanho do OG não afeta o ranking de busca
- Valide suas escolhas de structured data (em especial o que vai para OG por engano) usando os padrões em Security Best Practices, em que metadados OG não confiáveis são um vetor comum de phishing
O que “sem limite de caracteres” quer dizer de verdade
Tags H1, corpo do conteúdo e slugs de URL não têm limite de caracteres imposto pelo SEO, mas limites informais ainda valem:
- H1 > 70 caracteres quebra a hierarquia visual e a leitura rápida
- Slugs de URL são tecnicamente ilimitados; o Google exibe em torno de 90 caracteres na SERP, o resto é cosmético
- Corpo do conteúdo não tem limite, mas o Google prefere conteúdo útil a enchimento; só contagem de palavras não é sinal de ranqueamento
O Contador de Palavras acompanha em tempo real meta description (160) e title tag (60) enquanto você redige, com barras de progresso que ficam âmbar e vermelhas conforme você se aproxima do pixel de corte.
Plataformas sociais: Twitter/X, Instagram, LinkedIn, Facebook e além
O teto de caracteres de cada plataforma tem uma história por trás e uma faixa ideal abaixo do limite máximo em que o conteúdo realmente performa.
Twitter / X: 280, premium 25,000, regra de substituição de URL
O limite de caracteres do Twitter padrão é 280, dobrado dos 140 em novembro de 2017. Assinantes do X Premium podem postar conteúdo longo de até 25,000 caracteres com formatação rica, mas o post de 280 chars ainda é a forma dominante para alcance orgânico.
A regra menos óbvia é a substituição de URL. O Twitter envelopa toda URL, não importa o tamanho, em um link curto t.co de 23 caracteres no momento da publicação. O custo de 23 caracteres é fixo.
published_length = raw_length − URL_length + 23
Exemplo: um rascunho como "Check this: https://example.com/very-long-path?id=12345" tem 53 caracteres crus. A URL tem 38 caracteres, então é substituída por um link t.co de 23 chars, e o tamanho publicado é 53 − 38 + 23 = 38 caracteres. 15 caracteres de brinde que você não sabia que tinha.
Para colar uma URL longa em um rascunho, o Decodificador e Codificador de URL é um jeito rápido de verificar o que conta como URL (o Twitter reconhece URLs pelos padrões da RFC 3986 — query strings e fragmentos incluídos). Subdomínios, esquemas, portas, paths, queries e fragmentos são todos engolidos pela substituição de 23 caracteres.
Outros campos do Twitter: nome de exibição 50 chars, bio 160 chars, handle 15 chars. Threads (o equivalente da Meta ao Twitter) usa um limite de 500 caracteres.
Instagram: legenda de 2,200, 30 hashtags, gancho de 125 chars
Legendas do Instagram permitem 2,200 caracteres, mas o feed só mostra os primeiros 125 caracteres antes de esconder o resto atrás de um ”… mais”. Mais da metade dos leitores nunca toca em “mais”. O limite de legenda do Instagram que importa para engajamento é 125, mesmo o teto sendo 2,200.
O teto de 30 hashtags é rígido: tentar uma 31ª hashtag faz o post falhar. A faixa de 5-10 hashtags costuma performar melhor; acima de 11 o impulso de descoberta achata e o post começa a parecer spam para o algoritmo.
Outros campos: bio 150 chars, nome de exibição 30 chars, DM 1,000 chars.
LinkedIn: post de 3,000, 1,300 na faixa ideal, dobra do “ver mais”
O limite de caracteres do LinkedIn para posts é 3,000, mas o feed só exibe os primeiros 210 caracteres antes da dobra do “ver mais”. Posts na faixa de 1,200-1,500 caracteres ganham mais engajamento no LinkedIn (vários estudos da Buffer e da Hootsuite convergem em torno de 1,300 como pico); são longos o bastante para demonstrar valor, curtos o bastante para não cansar o scroll.
Os Artigos do LinkedIn (a superfície de publicação longa) permitem 110,000 caracteres, praticamente ilimitado. Headlines de perfil têm teto de 220, a seção “sobre” 2,600.
Facebook: 63,206 chars, faixa orgânica ideal de 80 chars
O limite de 63,206 caracteres do Facebook é mais curiosidade do que outra coisa; na prática, posts abaixo de 80 caracteres conseguem cerca de 30% mais engajamento orgânico do que os mais longos (a HubSpot reporta isso de forma consistente ao longo dos anos). Acima da dobra, o desktop mostra cerca de 477 caracteres; o mobile corta em torno de 125.
O comentário máximo é de 8,000 caracteres. Reações, compartilhamentos e cliques tendem a posts mais curtos: texto longo pertence ao artigo linkado, não à legenda do Facebook.
Plataformas mais novas: Bluesky, Mastodon, Threads, TikTok
- Bluesky posts têm teto de 300 caracteres e são o caso incomum: o Bluesky conta grapheme clusters, então o emoji de família com sete codepoints 👨👩👧👦 custa 1 caractere, não 7
- Mastodon usa por padrão 500 caracteres por toot, mas administradores de instância podem elevar isso para 5,000 ou até ilimitado; verifique a instância de onde você publica
- Threads usa limites de 500 caracteres estilo Twitter com contagem por codepoint
- TikTok legendas permitem 2,200 caracteres com cerca de 100 mostrados acima da dobra
Reddit, Discord, Slack: padrões de formato longo e comunidade
- Reddit título 300 caracteres (moderadores de subreddit muitas vezes forçam <60 via AutoModerator); comentários 10,000 caracteres
- Discord mensagem padrão 2,000 caracteres; descrições de embed 4,096; Nitro eleva para 4,000 em mensagens simples
- Slack mensagem 40,000 caracteres; acima de 2,000 a legibilidade cai drasticamente e muitos destinatários ignoram mensagens longas
Metas de contagem de palavras por tipo de conteúdo
Limites de caracteres dominam social e SEO; contagens de palavras dominam todo o resto: trabalho acadêmico, faturamento, marketing de conteúdo, manuscritos. A tabela abaixo dá uma faixa-alvo e uma estimativa de tempo de leitura (230 wpm, a mediana da meta-análise de leitura silenciosa de Brysbaert 2019) para cada tipo comum de conteúdo.
| Tipo de conteúdo | Meta de palavras | Tempo de leitura @ 230 wpm | Notas |
|---|---|---|---|
| Tweet | 30-40 palavras | 10 seg | otimize por caractere, não por palavra |
| Post no LinkedIn (faixa ideal) | 170-250 palavras | 1 min | acima da dobra |
| Legenda do Instagram (gancho) | 20-25 palavras | <10 seg | primeiros 125 chars |
| Post de blog — curto | 500-700 palavras | 2-3 min | listicle, notícia, hot take |
| Post de blog — padrão | 1,000-1,500 palavras | 4-7 min | tutorial, guia aprofundado |
| Post de blog — longo | 2,000-3,000 palavras | 9-13 min | guia abrangente |
| Página pilar de SEO | 2,500-5,000 palavras | 11-22 min | autoridade no tema |
| Redação acadêmica (ensino médio) | 500-1,500 palavras | 2-7 min | varia por tarefa |
| Redação acadêmica (graduação) | 1,500-3,000 palavras | 7-13 min | por tarefa |
| NaNoWriMo diário | 1,667 palavras/dia | — | 50K palavras em 30 dias |
| Romance — curto | 50,000-70,000 palavras | — | YA, mistério |
| Romance — padrão | 80,000-100,000 palavras | — | ficção adulta |
| Palestra de conferência (12 min @ 130 wpm) | 1,500-1,600 palavras | falado | ensaie para confirmar |
| Episódio de podcast (30 min @ 130 wpm) | 3,900 palavras | falado | parte com roteiro |
O tempo de leitura é a unidade-alvo mais útil para marketing de conteúdo: leitores respondem mais ao rótulo “5 min de leitura” do que a “1,150 palavras”. Contagem de palavras segue sendo a unidade para faturamento (tradução cobrada por palavra-fonte), conformidade com a plataforma (os 50K do NaNoWriMo, um teto acadêmico de 2,000 palavras) e termos contratuais. O Contador de Palavras mostra os dois em tempo real enquanto você digita, mais o tempo de fala a 130 wpm para palestras e podcasts.
6 erros de contagem que quebram apps reais
Estes são os erros recorrentes vistos em código que foi pra produção e em campanhas de marketing que foram pro ar. Cada um vem com o sintoma, a causa raiz e a correção.
Erro 1: Usar string.length para validar limite de caracteres
Sintoma: Uma pessoa cola um tweet com três emojis que tem na verdade 270 codepoints. Sua validação no front-end diz 276 e recusa enviar. Ou, pior, seu código aceita um rascunho de 285 codepoints porque o orçamento dos emojis se cancela, e o Twitter rejeita server-side.
Causa raiz: String.prototype.length em JavaScript retorna code units UTF-16. Todo emoji é um par substituto (surrogate pair), custando 2 unidades. Todo caractere de plano astral (símbolos matemáticos, escritas antigas) faz o mesmo.
Correção: Itere por codepoint com o operador spread ou Array.from.
// ❌ wrong
function isUnderTwitterLimit(text) {
return text.length <= 280;
}
// ✅ correct
function isUnderTwitterLimit(text) {
return [...text].length <= 280;
}
Para padrões mais profundos de iteração por codepoint baseados em regex (incluindo manejo de grapheme cluster), o Regex Cheat Sheet cobre as flags /u e /v e os escapes de propriedade Unicode.
Erro 2: Dividir texto CJK por espaços em branco para contar palavras
Sintoma: Um artigo chinês de 500 caracteres é reportado como 1 palavra. O orçamento de tradução baseado nele fica errado por 500x.
Causa raiz: Línguas CJK não usam espaços entre palavras. text.split(/\s+/) retorna um único token contendo o ensaio inteiro.
Correção: Conte cada ideograma CJK como uma palavra — a convenção usada pelo Microsoft Word, Google Docs e todo processador de texto CJK nativo.
function countWordsMixed(text) {
const cjk = (text.match(/[一-鿿-ヿ가-]/g) || []).length;
const latin = (text
.replace(/[一-鿿-ヿ가-]/g, ' ')
.match(/[A-Za-z0-9]+(?:['’-][A-Za-z0-9]+)*/g) || []).length;
return cjk + latin;
}
Os intervalos Unicode cobrem CJK Unified Ideographs (U+4E00 a U+9FFF), Hiragana e Katakana (U+3040 a U+30FF) e Hangul Syllables (U+AC00 a U+D7AF), os quatro blocos que a contagem de palavras do Microsoft Word conta como ideogramas.
Erro 3: Esquecer da substituição de URL por 23 chars no Twitter
Sintoma: Um rascunho mostra 320 caracteres no seu contador, incluindo uma URL de 80 chars. Você gasta 10 minutos cortando, só para perceber que o Twitter teria aceitado o original com 263 caracteres.
Causa raiz: O Twitter substitui toda URL por um link t.co de 23 caracteres no momento da publicação. Seu contador cru não sabe disso.
Correção: Pré-calcule o tamanho publicado usando raw − URL_length + 23 para cada URL. Em rascunhos com várias URLs, some as correções. A detecção de URL no conteúdo publicado segue a RFC 3986, as mesmas regras de parsing que o guia URL Encoding & Decoding percorre.
Erro 4: Escrever meta description em 320 chars (orientação antiga)
Sintoma: Você criou uma meta description de 280 caracteres com o CTA no fim. Nos resultados do Google, a descrição corta no meio da frase no caractere 158 e o CTA nunca aparece.
Causa raiz: Entre dezembro de 2017 e maio de 2018, o Google expandiu brevemente a exibição da meta description para 320 caracteres. Muitos tutoriais de SEO ainda citam esse número. O Google voltou para ~160 em meados de 2018 e ficou lá desde então.
Correção: Escreva em 150-160 caracteres. Coloque a palavra-chave primária nos primeiros 30 caracteres e o CTA nos últimos 30. Use um simulador de SERP preciso em pixels para páginas estratégicas: glifos largos (W, M, K) consomem o orçamento mais rápido do que os estreitos (i, l, t).
Erro 5: Confundir 280 caracteres com 280 palavras
Sintoma: Alguém na equipe escreve “precisamos de um tweet de 280 palavras” e produz 1,500 caracteres de prosa perfeitamente boa. O tweet não vai para o ar.
Causa raiz: Confusão entre caractere e palavra. As duas unidades diferem em cerca de 5-6x para prosa em inglês.
Correção: Fixe a regra por plataforma. Twitter, SMS e meta de SEO contam caracteres. NaNoWriMo, tarefas acadêmicas, contratos de tradução e a maioria dos briefings de marketing de conteúdo contam palavras. Na dúvida, cheque o contador da própria plataforma (a caixa de redação do Twitter, o Review > Word Count do Word) antes de fechar a spec.
Erro 6: Colar aspas tipográficas que silenciosamente trocam o SMS para UCS-2
Sintoma: Você copia um template de recibo para cliente de um Google Doc para o seu disparador de SMS. O original tinha 145 caracteres e era enviado como um segmento GSM-7. Após o paste, são os mesmos 145 caracteres, mas cobram como 2 segmentos UCS-2. O custo dobra em uma campanha de um milhão de mensagens.
Causa raiz: Google Docs e Word convertem automaticamente " e ' para aspas tipográficas " " e ' '. Essas aspas não estão no conjunto de caracteres GSM-7, o que vira a mensagem inteira para UCS-2.
Correção: Normalize antes de transmitir:
function toGsm7Quotes(s) {
return s
.replace(/[“”]/g, '"') // " " → "
.replace(/[‘’]/g, "'") // ' ' → '
.replace(/[–—]/g, '-'); // – — → -
}
Rode isso antes de envios sensíveis a custo. Twilio, MessageBird e Bandwidth expõem um campo de encoding na resposta — registre em log e alerte quando UCS-2 aparecer em templates que você pretendia que fossem GSM-7.
FAQ
Qual a diferença entre contagem de caracteres e contagem de palavras?
A contagem de caracteres conta cada caractere, incluindo espaços, pontuação e emojis, medida por ponto de código (codepoint) Unicode na maioria das plataformas modernas. A contagem de palavras conta tokens separados por espaço em branco para escritas latinas e ideograma a ideograma para CJK. Twitter, SMS e meta descriptions de SEO usam contagem de caracteres. Redações acadêmicas, manuscritos do NaNoWriMo e faturas de tradução usam contagem de palavras.
Por que o Twitter conta emoji como 1 caractere, mas o JavaScript conta como 2?
O Twitter mede por ponto de código (codepoint) Unicode: todo emoji é um codepoint, um caractere. O string.length do JavaScript mede code units UTF-16. A maioria dos emojis está acima de U+FFFF e é codificada como par substituto (surrogate pair) em UTF-16, então ocupa duas code units e o .length retorna 2. Use [...text].length ou Array.from(text).length para obter a contagem por codepoint que o Twitter de fato usa.
Por que o limite de caracteres do SMS é 160 às vezes e 70 em outras?
O SMS usa por padrão a codificação GSM-7 de 7 bits, oferecendo 160 caracteres em um payload de 140 bytes. Se a mensagem contém qualquer caractere fora do GSM-7 (emoji, aspas tipográficas, CJK, latim acentuado fora de um conjunto pequeno), a mensagem inteira é trocada para a codificação UCS-2 de 16 bits e o limite por segmento cai para 70 caracteres. Um único emoji em qualquer lugar da mensagem aciona a troca.
Qual o tamanho ideal de meta description em 2026?
Mire em 150-160 caracteres. A SERP de desktop do Google trunca em torno de 155-165 dependendo da largura em pixels exibida; o mobile corta entre 100 e 120. Abaixo de 120 caracteres, o Google muitas vezes substitui sua descrição inteiramente por um trecho do corpo da página. Comece com a palavra-chave primária nos primeiros 30 caracteres e termine com o CTA nos últimos 30, para que a mensagem sobreviva ao corte de qualquer lado.
O limite de caracteres inclui espaços e emojis?
Sim, em praticamente toda plataforma. Espaços, quebras de linha, pontuação e emojis contam, cada um, como um ponto de código (codepoint) Unicode. As duas exceções que vale conhecer: SMS, em que emojis disparam a troca de codificação descrita acima, e Bluesky, que conta grapheme clusters, então um emoji multicodepoint como o da família 👨👩👧👦 custa 1 caractere em vez de 7.
Como a contagem de palavras é calculada para textos em chinês, japonês e coreano?
Cada ideograma CJK conta como uma palavra: a convenção usada pela contagem em modo chinês do Microsoft Word, pelo Google Docs, por editores CJK nativos e por todo sistema comercial de memória de tradução. Um ensaio chinês de 500 caracteres é reportado como 500 palavras. Texto misto conta ideogramas CJK por caractere e tokens latinos por espaço em branco, somando os dois.
Como o Twitter lida com o tamanho da URL no limite de 280 caracteres?
O Twitter envelopa automaticamente toda URL em um link curto t.co de 23 caracteres no momento da publicação, independentemente do tamanho original. O tamanho publicado segue a fórmula published = raw − URL_length + 23 por URL. Um rascunho de 320 caracteres contendo uma URL de 100 chars é publicado como 243 caracteres. O Twitter reconhece URLs pelos padrões da RFC 3986, então query strings e fragmentos são absorvidos no token da URL.
Leitura relacionada
- Regex Cheat Sheet: correspondência de padrões para validação de caracteres, escapes de propriedade Unicode
- Text Diff Online Guide: comparando dois textos, linha a linha e caractere a caractere
- URL Encoding & Decoding Guide: regras de escape de caracteres quando texto trafega por URLs
- Understanding Base64: a outra metade da codificação “bits em caracteres”, aplicada a e-mail e dados binários