Limites de caractères et de mots 2026 — Twitter, SMS, SEO, Instagram
Une limite de caractères correspond au nombre maximal de points de code (codepoints) Unicode qu’une plateforme accepte dans un champ donné : 280 pour un post Twitter, 160 pour un SMS d’un seul segment encodé en GSM-7, environ 160 pour une meta description Google avant troncature. Le chiffre qui vous concerne dépend de l’endroit où vous publiez et du fait que votre texte contienne ou non des emojis, des guillemets typographiques ou des caractères CJK, autant d’éléments qui modifient le calcul.
Ce guide s’adresse aux rédacteurs sur les réseaux sociaux, aux spécialistes SEO, aux copywriters marketing, aux expéditeurs de SMS facturés au segment et aux développeurs qui écrivent des règles de validation devant correspondre exactement à ce que Twitter, Instagram ou les passerelles SMS comptent vraiment. Rendez-vous au tableau de référence rapide pour la fiche pratique couvrant 25 plateformes, ou comparez votre brouillon en direct avec six grandes plateformes dans le Compteur de mots ; les barres de progression passent au rouge dès que vous franchissez une limite.
Tableau de référence rapide — limites de caractères et de mots par plateforme
Le tableau ci-dessous couvre les plus de 30 champs auxquels rédacteurs et développeurs sont confrontés au quotidien. « Limite stricte » désigne le plafond appliqué par la plateforme ; « Visible / au-dessus du pli » correspond à ce que les lecteurs voient avant le point de troncature ; « Zone idéale » est l’intervalle empirique où le contenu performe le mieux.
| Plateforme | Limite stricte | Visible / au-dessus du pli | Zone idéale | Comptage des emojis |
|---|---|---|---|---|
| Post Twitter / X | 280 car. | 280 | 70-100 car. | 1 codepoint |
| Bio Twitter / X | 160 car. | 160 | — | 1 codepoint |
| Nom affiché Twitter / X | 50 car. | 50 | — | 1 codepoint |
| X Premium long format | 25 000 car. | — | — | 1 codepoint |
| Légende Instagram | 2 200 car. | 125 premiers (puis « plus ») | <125 pour l’accroche | 1 codepoint |
| Bio Instagram | 150 car. | 150 | — | 1 codepoint |
| Hashtags Instagram | 30 max | — | 5-10 | — |
| Post LinkedIn | 3 000 car. | 210 premiers (puis « voir plus ») | <1 300 | 1 codepoint |
| Article LinkedIn | 110 000 car. | — | — | 1 codepoint |
| Titre LinkedIn | 220 car. | 220 | — | 1 codepoint |
| Post Facebook | 63 206 car. | ~477 desktop / ~125 mobile | <80 pour le reach organique | 1 codepoint |
| Légende TikTok | 2 200 car. | ~100 premiers | <150 | 1 codepoint |
| Titre YouTube | 100 car. | 70 (recherche) | <60 | 1 codepoint |
| Description YouTube | 5 000 car. | 100-150 premiers au-dessus du pli | 150 premiers pour l’accroche | 1 codepoint |
| Commentaire YouTube | 10 000 car. | — | — | 1 codepoint |
| Titre Reddit | 300 car. | — | <60 (selon le subreddit) | 1 codepoint |
| Commentaire Reddit | 10 000 car. | — | — | 1 codepoint |
| Message Discord | 2 000 car. | 2 000 | — | 1 codepoint |
| Description d’embed Discord | 4 096 car. | — | — | 1 codepoint |
| Message Slack | 40 000 car. | — | <2 000 pour la lisibilité | 1 codepoint |
| Description d’épingle Pinterest | 500 car. | 50-60 premiers | <125 | 1 codepoint |
| Toot Mastodon | 500 car. (configurable) | 500 | — | 1 codepoint |
| Post Bluesky | 300 car. | 300 | — | 1 grapheme cluster |
| Post Threads | 500 car. | 500 | — | 1 codepoint |
| Meta description SEO (Google) | ~160 car. desktop / ~120 mobile | 150-160 | 150-160 | 1 codepoint |
| Title tag SEO (Google) | ~60 car. desktop / ~50 mobile | 50-60 | 50-60 | 1 codepoint |
| Description Open Graph | ~200 car. avant clipping LinkedIn/FB | 150-200 | 150-200 | 1 codepoint |
| Description Twitter Card | 200 car. max | 200 | 150-200 | 1 codepoint |
| SMS segment unique (GSM-7) | 160 car. | — | — | spécial, voir ci-dessous |
| SMS segment unique (UCS-2 / emoji) | 70 car. | — | — | 1 codepoint |
| Message WhatsApp | 65 536 car. | — | — | 1 codepoint |
| Objet d’e-mail | aucune limite plateforme | ~60 desktop / ~30 mobile | <50 | 1 codepoint |
| Titre Google Ads | 30 car. × 15 titres | 30 chacun | 30 | 1 codepoint |
| Description Google Ads | 90 car. × 4 desc. | 90 chacune | 90 | 1 codepoint |
| Titre App Store | 30 car. | 30 | 30 | 1 codepoint |
| Sous-titre App Store | 30 car. | 30 | 30 | 1 codepoint |
| Description App Store | 4 000 car. | 252 premiers au-dessus du pli | accroche de 252 | 1 codepoint |
| Description courte Play Store | 80 car. | 80 | 80 | 1 codepoint |
| Description longue Play Store | 4 000 car. | 80 premiers au-dessus du pli | accroche de 80 | 1 codepoint |
Tout contenu qui dépasse la « zone idéale » se fait tronquer, déclasser ou rogner hors du card visible. X Premium long format et Mastodon (configurable par instance) sont les rares exceptions qui laissent écrire au-delà de 500 caractères sans pénalité. Les comptages ci-dessus, à l’exception des règles SMS, correspondent tous à un nombre de points de code Unicode : un emoji coûte 1 caractère, pas 2. Pour vérifier un brouillon contre les six limites les plus courantes en une seule fois, collez-le dans le Compteur de mots ; les barres de progression repèrent le texte hors limite avant la publication.
Comment les caractères sont réellement comptés (points de code Unicode vs UTF-16)
Trois outils différents peuvent renvoyer trois comptages différents pour la même chaîne. La raison : « caractère » n’est pas une notion unique. Cela peut désigner un point de code Unicode, une unité de code UTF-16 ou un grapheme cluster, et chaque plateforme fait son choix.
Qu’est-ce qu’un « caractère » — codepoint vs unité de code vs grapheme
Un point de code (codepoint) est une valeur scalaire Unicode : n’importe quel entier de U+0000 à U+10FFFF qu’Unicode a affecté à un caractère ou marqué comme réservé. Une unité de code (code unit) est la plus petite brique d’un encodage ; UTF-16 utilise des unités de 16 bits, UTF-8 des unités de 8 bits. Un grapheme cluster est ce que l’humain perçoit comme un seul caractère visible : parfois un seul codepoint, parfois un codepoint de base accompagné de marques combinantes, parfois une séquence avec joiner à largeur nulle comme l’emoji famille 👨👩👧👦, qui fusionne sept codepoints en un seul glyphe visible.
Pour la chaîne "a🌍👨👩👧", les trois comptages divergent :
| Méthode de comptage | Résultat | Utilisée par |
|---|---|---|
Unités de code UTF-16 (JS string.length) | 10 | Code JavaScript naïf |
| Points de code Unicode | 6 | Twitter, Instagram, passerelles SMS |
| Grapheme clusters | 3 | Bluesky, lecteurs d’écran, éditeurs de texte |
Pourquoi string.length ment sur les emojis
JavaScript stocke les chaînes en UTF-16 en interne. Tout codepoint au-dessus de U+FFFF (tous les emojis, tous les caractères du plan astral) est encodé sous la forme d’une paire de substitution (surrogate pair), soit deux unités de code de 16 bits. La propriété .length renvoie ces deux unités, pas un caractère.
"🌍".length // 2 (UTF-16 code units)
[..."🌍"].length // 1 (codepoints — what Twitter/SMS counts)
"🌍".match(/./gu).length // 1 (codepoints via regex with /u flag)
L’opérateur de décomposition et le flag regex /u itèrent tous les deux par point de code, ce qui correspond à ce que Twitter, Instagram et les passerelles SMS mesurent face à leurs limites. Une fonction de validation qui utilise .length brut rejettera des tweets en réalité sous la limite, ou (pire) laissera passer des messages que votre système en aval refusera.
Qu’en est-il des caractères CJK et des marques combinantes
Les idéogrammes chinois, japonais et coréens sont chacun un seul codepoint et comptent pour un caractère sur toutes les plateformes. Là où ils coûtent cher, c’est en SMS : tout caractère hors GSM-7 fait basculer l’intégralité du message en encodage UCS-2, ce qui fait chuter la limite par segment de 160 à 70 (voir la section suivante).
Les marques combinantes se comportent autrement. Le á accentué écrit á est un seul codepoint ; le même á écrit a + ́ (accent aigu combinant) compte pour deux codepoints mais un seul grapheme cluster. La plupart des plateformes comptent par codepoint, donc la seconde forme coûte un caractère de plus. Bluesky fait exception : elle compte les grapheme clusters, donc les deux formes coûtent 1.
Comptage dans différents langages — référence rapide
// 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())
À titre de comparaison, l’Encodeur et Décodeur Base64 rappelle l’autre face du problème : quand un texte est encodé en Base64 pour la transmission, chaque tranche de 3 octets UTF-8 en entrée produit 4 caractères ASCII en sortie, donc la longueur encodée dépend du nombre d’octets, pas du nombre de codepoints. Collez un seul emoji et regardez la sortie Base64 atteindre 8 caractères : le même emoji qui coûte 1 caractère sur Twitter pèse 4 octets en UTF-8.
Pour voir les comptes en points de code (le chiffre que Twitter mesure réellement) sur n’importe quel brouillon, le Compteur de mots est correct vis-à-vis d’Unicode par défaut.
Limite de caractères SMS — GSM-7, UCS-2 et messages multi-segments
Le SMS est le seul canal majeur où ajouter un emoji peut littéralement doubler votre facture. La raison tient à l’encodage, et le calcul n’a pas bougé depuis 1985.
Le chiffre magique de 160 caractères — l’historique GSM-7
La norme GSM-03.38 de 1985 a fixé une charge utile SMS à 140 octets. Avec un encodage de caractères sur 7 bits, 140 octets contiennent 1 120 bits ÷ 7 = 160 caractères. C’est de là que vient la fameuse limite SMS de 160 caractères. Le jeu GSM-7 couvre 128 caractères de base auxquels s’ajoute une extension de 10 caractères (couvrant { } [ ] | \ ~ ^ € et form feed). À l’intérieur de ce jeu, vous disposez du budget complet de 160 car. par segment.
Les caractères qui sortent du GSM-7 et forcent la bascule :
- Tous les emojis
- Les guillemets typographiques (
""''), à distinguer des guillemets droits ASCII"' - La plupart des lettres latines accentuées au-delà des 35 présentes en GSM-7 (
é á ñ ü øetc. ; GSM-7 n’inclut queä ö å æ ø à è ì ò ùet quelques autres) - La ponctuation pleine chasse, les caractères CJK, l’arabe, l’hébreu, les minuscules grecques, le cyrillique
- L’accent grave inversé
`et le tilde~(le tilde se trouve dans la table d’extension GSM-7 et coûte donc 2 de vos 160 car.)
Le piège UCS-2 — un emoji vous fait passer de 160 à 70
Dès qu’un seul caractère hors GSM-7 apparaît n’importe où dans le message, l’intégralité du message bascule en encodage UCS-2. UCS-2 utilise 16 bits par caractère, donc 140 octets ÷ 2 = 70 caractères par segment. Exemples réels :
"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)
Ce dernier exemple « Hi 你好 » est le piège : il ne fait que 5 caractères, mais il déclenche la tarification UCS-2 et les 65 prochains caractères que vous ajouterez tiendront dans un segment, après quoi le segment 2 commencera.
SMS multi-segments (concaténation)
Dès que vous dépassez 160 (GSM-7) ou 70 (UCS-2), le message est découpé en plusieurs segments. Chaque segment embarque un User Data Header (UDH) de 7 caractères servant au réassemblage, ce qui réduit la charge utile disponible par segment :
- GSM-7 multi-segments : 153 caractères par segment
- UCS-2 multi-segments : 67 caractères par segment
Le téléphone destinataire réassemble les segments de façon invisible pour le destinataire, mais la facturation se fait au segment, pas au message. Un message GSM-7 de 161 caractères coûte 2 segments. Un message GSM-7 de 1 000 caractères coûte 7 segments (153 × 6 = 918, le 7e segment porte les 82 derniers).
Le calcul du coût quand un emoji double votre facture
Prenez un message marketing en texte brut de 80 caractères :
- Texte brut : 80 car. → GSM-7 → 1 segment au prix X
- Ajoutez un emoji : 80 car. → UCS-2 → 80 > 70 → 2 segments au prix 2X
Doubler la facture à cause d’un seul emoji est bien réel et la conséquence se mesure à l’échelle. Une campagne de 100 000 messages à 0,0075 $ par segment coûte 750 $ en GSM-7 contre 1 500 $ en UCS-2 : un emoji à 750 $. Tous les grands fournisseurs SMS (Twilio, Bandwidth, AWS SNS, MessageBird, Vonage) facturent ainsi. Les règles d’encodage relèvent du standard GSM, pas d’une politique commerciale. L’historique détaillé des compromis d’encodage au niveau octet, et la raison pour laquelle ASCII / UTF-8 / UCS-2 existent comme standards distincts, est traité dans Understanding Base64, qui aborde la même famille de problèmes « bits transformés en caractères » appliquée à l’e-mail plutôt qu’au SMS.
Comment garder les messages en GSM-7
- Utilisez les guillemets droits ASCII
"', pas les guillemets typographiques - Utilisez le trait d’union ASCII
-, pas le tiret cadratin—ni le tiret demi-cadratin– - Écrivez
(c)et(R), pas©et® - Évitez les emojis, sauf si le budget de la campagne assume le coût UCS-2
- Les consoles des fournisseurs (Twilio, Bandwidth, MessageBird) affichent « encoding: GSM-7 » ou « UCS-2 » à côté de l’aperçu ; vérifiez avant la diffusion
Le contrôle de cohérence le plus rapide pendant la rédaction passe par la barre de progression SMS du Compteur de mots, qui rapporte par rapport à la base 160 car. Si votre texte déclenche l’UCS-2, divisez mentalement votre nombre de caractères par 2,29 pour estimer le nombre de segments selon la règle des 70 car.
Limites SEO — meta description, title tag, OG, Twitter Card
Les limites SEO sont plus souples que les limites de plateforme (Google ne rejettera pas votre page si une meta description atteint 300 caractères), mais les règles pratiques de troncature comptent pour le taux de clic. Voici les chiffres qui restent valables en 2026.
Meta description — zone idéale 150-160 caractères
Les résultats de recherche desktop de Google tronquent la meta description vers 155-165 caractères ; sur mobile, le clip intervient entre 100 et 120. Le point de troncature exact varie parce que Google mesure des pixels d’affichage, pas des caractères. Une description remplie de glyphes W et M atteint le pixel de troncature plus tôt qu’une description remplie de i et l.
Règles pratiques de rédaction :
- Visez 150-160 caractères au total
- Placez le message clé dans les 120 premiers caractères (sécurisé pour le mobile)
- Démarrez par le mot-clé meta description character limit de la page dans les 30 premiers caractères
- Terminez par un CTA dans les 30 derniers caractères, lisible même quand le desktop coupe le milieu
La période 2017-2018 a vu Google étendre brièvement l’affichage des meta descriptions à 320 caractères, et toute une génération de tutoriels SEO cite encore ce chiffre. Google est revenu à 160 mi-2018. Écrire au-delà de 200 caractères aujourd’hui ne fait que cacher la seconde moitié.
Un mode d’échec différent : les descriptions de moins de 120 caractères sont souvent remplacées entièrement. Google estime que votre description ne sert pas pleinement la requête et tire un autre passage depuis le corps de la page, et vous perdez le contrôle du CTR sans alerte.
Title tag — 60 desktop, 50 mobile
Les title tags se coupent à environ 60 caractères en desktop et 50 en mobile. Même troncature au pixel près que pour les descriptions, même précaution pour les glyphes larges.
Zone idéale : 50-60 caractères, avec le mot-clé cible dans les 30 premiers caractères pour qu’il survive à toute coupure. Les suffixes longue traîne de marque (| Brand Name) ont leur place à la fin, là où la troncature est la moins gênante.
Largeur en pixels vs nombre de caractères — la vraie règle Google
Le conteneur de description SERP de Google fait environ 920 pixels de large sur desktop. La largeur moyenne d’un caractère tourne autour de 6,5 pixels, ce qui donne la cible empirique de 140-160 caractères. La dispersion par caractère reste pourtant large : i rend autour de 3 pixels, M autour de 11. Une description tout en capitales (« BEST WIDGETS FOR WINTER WEDDINGS ») se coupe sensiblement plus tôt qu’une version équivalente en minuscules.
Les aperçus de pré-publication via des simulateurs SERP précis au pixel sont plus fiables que les compteurs de caractères pour la copie SEO.
Description OG et Twitter Card
Le champ og:description du protocole Open Graph est ce que Facebook, LinkedIn, Slack et Discord affichent sous l’aperçu d’un lien partagé. Les plafonds d’affichage varient selon la plateforme : la plupart coupent autour de 200 caractères, certaines vont jusqu’à 300. La twitter:description des Twitter Cards est plafonnée en dur à 200 caractères par le parseur Twitter.
Valeurs par défaut raisonnables :
- 150-200 caractères pour OG et Twitter Card
- Elles peuvent reprendre votre meta description, mais l’OG peut être un peu plus longue car sa longueur n’influence pas le ranking de recherche
- Validez vos choix de données structurées (en particulier ce qui se retrouve par erreur dans l’OG) à l’aide des patterns présentés dans Security Best Practices, où les métadonnées OG non fiables constituent un vecteur courant de phishing
Ce que signifie vraiment « pas de limite de caractères »
Les balises H1, le contenu du corps et les slugs d’URL n’ont pas de limite SEO imposée par la plateforme, mais des limites souples s’appliquent quand même :
- H1 > 70 caractères casse la hiérarchie visuelle et la lisibilité en diagonale
- Slugs d’URL techniquement illimités ; Google affiche environ 90 caractères dans la SERP, au-delà c’est cosmétique
- Le corps du texte n’a pas de plafond de longueur, mais Google classe le contenu utile au-dessus du remplissage : le nombre de mots seul n’est pas un signal de ranking
Le Compteur de mots suit en direct la meta description (160) et le title tag (60) pendant que vous rédigez, avec des barres de progression qui passent à l’orange puis au rouge à l’approche du pixel de troncature.
Plateformes sociales — Twitter/X, Instagram, LinkedIn, Facebook et au-delà
Le plafond de caractères de chaque plateforme a son histoire, ainsi qu’une zone idéale en deçà de la limite stricte où le contenu performe vraiment.
Twitter / X — 280, premium 25 000, règle de substitution d’URL
La limite de caractères Twitter standard est de 280 caractères, doublée depuis les 140 d’origine en novembre 2017. Les abonnés X Premium peuvent publier du contenu long format jusqu’à 25 000 caractères avec mise en forme enrichie, mais le post de 280 car. reste la forme dominante pour la portée organique.
La règle non évidente est la substitution d’URL. Twitter enveloppe chaque URL, quelle que soit sa longueur, dans un lien court t.co de 23 caractères au moment de la publication. Le coût de 23 caractères est fixe.
published_length = raw_length − URL_length + 23
Exemple : un brouillon comme "Check this: https://example.com/very-long-path?id=12345" fait 53 caractères bruts. L’URL en fait 38, elle est donc remplacée par un lien t.co de 23 car., et la longueur publiée vaut 53 − 38 + 23 = 38 caractères. Vous récupérez 15 caractères dont vous ignoriez l’existence.
Pour coller une longue URL dans un brouillon, le Décodeur et Encodeur URL permet de vérifier rapidement ce qui est considéré comme une URL (Twitter reconnaît les URLs via les patterns RFC 3986, chaînes de requête et fragments inclus). Sous-domaines, schémas, ports, chemins, requêtes et fragments sont tous absorbés par la substitution de 23 caractères.
Autres champs Twitter : nom affiché 50 car., bio 160 car., pseudo 15 car. Threads (l’équivalent Twitter de Meta) utilise plutôt une limite de 500 caractères.
Instagram — 2 200 légende, 30 hashtags, accroche de 125 car.
Les légendes Instagram autorisent 2 200 caractères, mais le fil ne montre que les 125 premiers caractères avant de replier le reste derrière un tap « … plus ». Plus de la moitié des lecteurs ne tappent jamais. La limite de légende Instagram qui compte pour l’engagement est donc 125, même si la limite stricte est de 2 200.
Le plafond de 30 hashtags est strict : tenter un 31e hashtag fait échouer la publication. La fourchette 5-10 hashtags performe en général le mieux ; au-delà de 11, le boost de découverte s’aplatit et le post commence à ressembler à du spam pour l’algorithme.
Autres champs : bio 150 car., nom affiché 30 car., DM 1 000 car.
LinkedIn — 3 000 post, 1 300 zone idéale, pli « voir plus »
La limite de caractères LinkedIn pour les posts est de 3 000, mais le fil n’affiche que les 210 premiers caractères avant le pli « voir plus ». Les posts dans la fourchette 1 200-1 500 caractères remportent l’engagement sur LinkedIn (plusieurs études Buffer et Hootsuite convergent vers environ 1 300 comme pic) ; ils sont assez longs pour montrer de la valeur, assez courts pour ne pas lasser au scroll.
Les LinkedIn Articles (la surface de publication long format) autorisent 110 000 caractères, autrement dit pratiquement illimité. Les titres de profil sont plafonnés à 220, la section « about » à 2 600.
Facebook — 63 206 car., zone idéale organique de 80 car.
La limite de 63 206 caractères des posts Facebook relève surtout de la trivia ; en pratique, les posts de moins de 80 caractères obtiennent environ 30 % d’engagement organique de plus que les plus longs (HubSpot le constate avec régularité d’année en année). Au-dessus du pli, le desktop montre environ 477 caractères ; le mobile coupe vers 125.
Le commentaire max est de 8 000 caractères. Réactions, partages et clics penchent tous vers les posts courts ; la copie longue a sa place dans l’article lié, pas dans la légende Facebook.
Plateformes émergentes — Bluesky, Mastodon, Threads, TikTok
- Bluesky plafonne les posts à 300 caractères et c’est le cas particulier : Bluesky compte les grapheme clusters, donc l’emoji famille à sept codepoints 👨👩👧👦 coûte 1 caractère, pas 7
- Mastodon propose 500 caractères par défaut par toot, mais les administrateurs d’instance peuvent monter à 5 000 ou même supprimer la limite ; vérifiez l’instance depuis laquelle vous publiez
- Threads applique des limites façon Twitter de 500 caractères avec un comptage par codepoint
- TikTok autorise 2 200 caractères de légende avec environ 100 affichés au-dessus du pli
Reddit, Discord, Slack — long format et conventions communautaires
- Reddit titre 300 caractères (les modérateurs de subreddit imposent souvent <60 via AutoModerator) ; commentaires 10 000 caractères
- Discord message standard 2 000 caractères ; descriptions d’embed 4 096 ; Nitro porte à 4 000 sur les messages simples
- Slack message 40 000 caractères ; au-delà de 2 000, la lisibilité chute fortement et de nombreux destinataires ignorent les longs messages
Objectifs de nombre de mots par type de contenu
Les limites de caractères dominent le social et le SEO ; les nombres de mots dominent tout le reste : travaux universitaires, facturation, content marketing, manuscrits. Le tableau ci-dessous donne une fourchette cible et une estimation du temps de lecture (230 mots/min, médiane de la méta-analyse Brysbaert 2019 sur la lecture silencieuse) pour chaque type de contenu courant.
| Type de contenu | Cible en mots | Temps de lecture @ 230 mots/min | Notes |
|---|---|---|---|
| Tweet | 30-40 mots | 10 s | optimiser pour le caractère, pas le mot |
| Post LinkedIn (zone idéale) | 170-250 mots | 1 min | au-dessus du pli |
| Légende Instagram (accroche) | 20-25 mots | <10 s | 125 premiers car. |
| Billet de blog — court | 500-700 mots | 2-3 min | listicle, actu, prise rapide |
| Billet de blog — standard | 1 000-1 500 mots | 4-7 min | tutoriel, guide approfondi |
| Billet de blog — long | 2 000-3 000 mots | 9-13 min | guide exhaustif |
| Page pilier SEO | 2 500-5 000 mots | 11-22 min | autorité thématique |
| Dissertation (lycée) | 500-1 500 mots | 2-7 min | varie selon le sujet |
| Mémoire (licence) | 1 500-3 000 mots | 7-13 min | par devoir |
| Quota quotidien NaNoWriMo | 1 667 mots/jour | — | 50 000 mots en 30 jours |
| Roman — court | 50 000-70 000 mots | — | YA, polar |
| Roman — standard | 80 000-100 000 mots | — | fiction adulte |
| Conférence (12 min @ 130 mots/min) | 1 500-1 600 mots | parlé | répéter pour confirmer |
| Épisode de podcast (30 min @ 130 mots/min) | 3 900 mots | parlé | partie scénarisée |
Le temps de lecture est l’unité cible la plus utile en content marketing : les lecteurs réagissent plus volontiers à un libellé « 5 min de lecture » qu’à « 1 150 mots ». Le nombre de mots reste l’unité pour la facturation (traduction facturée au mot source), la conformité plateforme (les 50 000 de NaNoWriMo, un plafond universitaire de 2 000 mots) et les clauses contractuelles. Le Compteur de mots affiche les deux en temps réel pendant que vous tapez, plus le temps de parole à 130 mots/min pour les conférences et podcasts.
6 erreurs de comptage qui cassent de vraies applications
Voici les échecs récurrents observés dans du code livré et dans des campagnes marketing diffusées. Chacun est associé au symptôme, à la cause racine et au correctif.
Erreur 1 : utiliser string.length pour la validation de la limite de caractères
Symptôme : un utilisateur colle un tweet de trois emojis qui fait réellement 270 codepoints. Votre validation front-end dit 276 et refuse de soumettre. Ou pire, votre code accepte un brouillon de 285 codepoints parce que le budget emoji s’annule, et Twitter le rejette côté serveur.
Cause racine : String.prototype.length en JavaScript renvoie des unités de code UTF-16. Chaque emoji est une paire de substitution, coûtant 2 unités. Chaque caractère du plan astral (symboles mathématiques, écritures anciennes) fait pareil.
Correctif : itérer par codepoint avec l’opérateur de décomposition ou Array.from.
// ❌ wrong
function isUnderTwitterLimit(text) {
return text.length <= 280;
}
// ✅ correct
function isUnderTwitterLimit(text) {
return [...text].length <= 280;
}
Pour des patterns plus avancés d’itération par codepoint avec regex (y compris la gestion des grapheme clusters), la Regex Cheat Sheet couvre les flags /u et /v ainsi que les échappements de propriétés Unicode.
Erreur 2 : découper du texte CJK aux espaces blancs pour le compter en mots
Symptôme : un article chinois de 500 caractères est compté comme 1 mot. Le devis de traduction calculé dessus est faux à 500×.
Cause racine : les langues CJK n’utilisent pas d’espace entre les mots. text.split(/\s+/) renvoie un unique token contenant l’essai entier.
Correctif : compter chaque idéogramme CJK comme un mot, la convention utilisée par Microsoft Word, Google Docs et tout traitement de texte natif CJK.
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;
}
Les plages Unicode couvrent les idéogrammes unifiés CJK (U+4E00 à U+9FFF), les hiragana et katakana (U+3040 à U+30FF) et les syllabes hangul (U+AC00 à U+D7AF) ; ce sont les quatre blocs que le compteur de mots de Microsoft Word décompte comme idéogrammes.
Erreur 3 : oublier la substitution Twitter de 23 car. pour les URLs
Symptôme : un brouillon affiche 320 caractères dans votre compteur, dont une URL de 80 caractères. Vous passez 10 minutes à élaguer avant de réaliser que Twitter aurait accepté la version originale à 263 caractères.
Cause racine : Twitter remplace chaque URL par un lien t.co de 23 caractères au moment de la publication. Votre compteur brut l’ignore.
Correctif : pré-calculer la longueur publiée via raw − URL_length + 23 pour chaque URL. Pour les brouillons contenant plusieurs URLs, additionnez les corrections. La détection d’URL dans le contenu publié suit la RFC 3986, les mêmes règles de parsing que celles décrites dans le guide URL Encoding & Decoding.
Erreur 4 : écrire une meta description à 320 car. (ancienne consigne)
Symptôme : vous avez ciselé une meta description de 280 caractères avec le CTA à la fin. Dans les résultats Google, la description se coupe en plein milieu au caractère 158 et le CTA n’apparaît jamais.
Cause racine : entre décembre 2017 et mai 2018, Google a brièvement étendu l’affichage des meta descriptions à 320 caractères. De nombreux tutoriels SEO citent encore ce chiffre. Google est revenu à ~160 mi-2018 et n’en a pas bougé depuis.
Correctif : écrire à 150-160 caractères. Placez le mot-clé principal dans les 30 premiers caractères et le CTA dans les 30 derniers. Utilisez un simulateur SERP précis au pixel pour les pages à fort enjeu, car les glyphes larges (W, M, K) grignotent le budget plus vite que les étroits (i, l, t).
Erreur 5 : confondre 280 caractères avec 280 mots
Symptôme : quelqu’un dans l’équipe écrit « il nous faut un tweet de 280 mots » et produit 1 500 caractères de prose parfaitement correcte. Le tweet refuse de partir.
Cause racine : confusion caractères/mots. Les deux unités diffèrent d’environ 5-6× pour de la prose anglaise.
Correctif : fixer la règle par plateforme. Twitter, SMS et meta SEO comptent des caractères. NaNoWriMo, les devoirs universitaires, les contrats de traduction et la plupart des briefs content marketing comptent des mots. En cas de doute, consultez le compteur de la plateforme elle-même (la zone de composition Twitter, Word > Révision > Statistiques) avant de figer la spec.
Erreur 6 : coller des guillemets typographiques qui basculent silencieusement le SMS en UCS-2
Symptôme : vous copiez un template de reçu client depuis un Google Doc dans votre expéditeur SMS. L’original faisait 145 caractères et partait en un segment GSM-7. Après le coller, ce sont toujours 145 caractères mais facturés en 2 segments UCS-2. Le coût double sur une campagne d’un million de messages.
Cause racine : Google Docs et Word convertissent automatiquement " et ' en guillemets typographiques " " et ' '. Ces guillemets n’appartiennent pas au jeu GSM-7, ce qui fait basculer l’intégralité du message en UCS-2.
Correctif : normaliser avant émission :
function toGsm7Quotes(s) {
return s
.replace(/[“”]/g, '"') // " " → "
.replace(/[‘’]/g, "'") // ' ' → '
.replace(/[–—]/g, '-'); // – — → -
}
Exécutez cela avant tout envoi sensible à la facturation. Twilio, MessageBird et Bandwidth exposent tous un champ d’encodage dans la réponse ; loggez-le et alertez quand UCS-2 apparaît dans des templates conçus pour rester en GSM-7.
FAQ
Quelle différence entre nombre de caractères et nombre de mots ?
Le nombre de caractères compte chaque caractère, espaces, ponctuation et emojis inclus, mesuré en points de code Unicode sur la plupart des plateformes modernes. Le nombre de mots compte les tokens séparés par des espaces blancs pour les écritures latines et procède idéogramme par idéogramme pour le CJK. Twitter, SMS et meta descriptions SEO utilisent le nombre de caractères. Les dissertations universitaires, les manuscrits NaNoWriMo et les factures de traduction utilisent le nombre de mots.
Pourquoi Twitter compte-t-il un emoji comme 1 caractère et JavaScript comme 2 ?
Twitter mesure en points de code Unicode : chaque emoji est un codepoint, un caractère. Le string.length de JavaScript mesure des unités de code UTF-16. La plupart des emojis se situent au-dessus de U+FFFF et sont encodés en paires de substitution en UTF-16, ils prennent donc deux unités de code et .length renvoie 2. Utilisez [...text].length ou Array.from(text).length pour obtenir le compte de codepoints que Twitter mesure réellement.
Pourquoi la limite SMS est-elle parfois 160 et parfois 70 ?
Le SMS utilise par défaut l’encodage 7 bits GSM-7, ce qui donne 160 caractères dans une charge utile de 140 octets. Si le message contient le moindre caractère hors GSM-7 (emoji, guillemets typographiques, CJK, latin accentué hors du petit jeu autorisé), l’intégralité du message bascule en encodage 16 bits UCS-2 et la limite par segment tombe à 70 caractères. Un seul emoji n’importe où dans le message déclenche la bascule.
Quelle est la longueur idéale d’une meta description en 2026 ?
Visez 150-160 caractères. La SERP desktop de Google tronque vers 155-165 selon la largeur d’affichage en pixels ; le mobile coupe entre 100 et 120. En dessous de 120 caractères, Google remplace souvent votre description entièrement par un passage tiré du corps de la page. Démarrez par le mot-clé principal dans les 30 premiers caractères et terminez par le CTA dans les 30 derniers, pour que le message survive à une troncature des deux côtés.
La limite de caractères inclut-elle les espaces et les emojis ?
Oui, sur pratiquement toutes les plateformes. Espaces, sauts de ligne, ponctuation et emojis comptent chacun pour un codepoint Unicode. Les deux exceptions à connaître : le SMS où les emojis déclenchent la bascule d’encodage décrite plus haut, et Bluesky qui compte les grapheme clusters, ce qui fait qu’un emoji multi-codepoints comme la famille 👨👩👧👦 coûte 1 caractère au lieu de 7.
Comment le nombre de mots se calcule-t-il pour du chinois, du japonais, du coréen ?
Chaque idéogramme CJK compte pour un mot, la convention utilisée par le compteur de mots de Microsoft Word en mode chinois, par Google Docs, par les éditeurs natifs CJK et par tous les systèmes commerciaux de mémoire de traduction. Un essai chinois de 500 caractères est compté comme 500 mots. Le texte mixte compte les idéogrammes CJK par caractère et les tokens latins par espaces blancs, puis additionne les deux.
Comment Twitter gère-t-il la longueur des URLs dans la limite de 280 caractères ?
Twitter enveloppe automatiquement chaque URL dans un lien court t.co de 23 caractères au moment de la publication, quelle que soit la longueur d’origine. La longueur publiée suit la formule published = raw − URL_length + 23 par URL. Un brouillon de 320 caractères contenant une URL de 100 caractères part à 243 caractères. Twitter reconnaît les URLs via les patterns RFC 3986, ce qui fait que les chaînes de requête et les fragments sont absorbés dans le token URL.
Lectures associées
- Regex Cheat Sheet : pattern matching pour la validation de caractères, échappements de propriétés Unicode
- Text Diff Online Guide : comparer deux morceaux de texte, ligne par ligne et caractère par caractère
- URL Encoding & Decoding Guide : règles d’échappement de caractères quand un texte passe par des URLs
- Understanding Base64 : l’autre versant de l’encodage « bits en caractères », appliqué à l’e-mail et aux données binaires