Skip to content
Retour au blog
Tutoriels

Limites de caractères et de mots 2026 — Twitter, SMS, SEO, Instagram

Limites de caractères et de mots 2026 — Twitter, SMS GSM-7/UCS-2, meta SEO, Instagram, LinkedIn — logique de comptage Unicode et un compteur en direct.

13 min de lecture

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.

PlateformeLimite stricteVisible / au-dessus du pliZone idéaleComptage des emojis
Post Twitter / X280 car.28070-100 car.1 codepoint
Bio Twitter / X160 car.1601 codepoint
Nom affiché Twitter / X50 car.501 codepoint
X Premium long format25 000 car.1 codepoint
Légende Instagram2 200 car.125 premiers (puis « plus »)<125 pour l’accroche1 codepoint
Bio Instagram150 car.1501 codepoint
Hashtags Instagram30 max5-10
Post LinkedIn3 000 car.210 premiers (puis « voir plus »)<1 3001 codepoint
Article LinkedIn110 000 car.1 codepoint
Titre LinkedIn220 car.2201 codepoint
Post Facebook63 206 car.~477 desktop / ~125 mobile<80 pour le reach organique1 codepoint
Légende TikTok2 200 car.~100 premiers<1501 codepoint
Titre YouTube100 car.70 (recherche)<601 codepoint
Description YouTube5 000 car.100-150 premiers au-dessus du pli150 premiers pour l’accroche1 codepoint
Commentaire YouTube10 000 car.1 codepoint
Titre Reddit300 car.<60 (selon le subreddit)1 codepoint
Commentaire Reddit10 000 car.1 codepoint
Message Discord2 000 car.2 0001 codepoint
Description d’embed Discord4 096 car.1 codepoint
Message Slack40 000 car.<2 000 pour la lisibilité1 codepoint
Description d’épingle Pinterest500 car.50-60 premiers<1251 codepoint
Toot Mastodon500 car. (configurable)5001 codepoint
Post Bluesky300 car.3001 grapheme cluster
Post Threads500 car.5001 codepoint
Meta description SEO (Google)~160 car. desktop / ~120 mobile150-160150-1601 codepoint
Title tag SEO (Google)~60 car. desktop / ~50 mobile50-6050-601 codepoint
Description Open Graph~200 car. avant clipping LinkedIn/FB150-200150-2001 codepoint
Description Twitter Card200 car. max200150-2001 codepoint
SMS segment unique (GSM-7)160 car.spécial, voir ci-dessous
SMS segment unique (UCS-2 / emoji)70 car.1 codepoint
Message WhatsApp65 536 car.1 codepoint
Objet d’e-mailaucune limite plateforme~60 desktop / ~30 mobile<501 codepoint
Titre Google Ads30 car. × 15 titres30 chacun301 codepoint
Description Google Ads90 car. × 4 desc.90 chacune901 codepoint
Titre App Store30 car.30301 codepoint
Sous-titre App Store30 car.30301 codepoint
Description App Store4 000 car.252 premiers au-dessus du pliaccroche de 2521 codepoint
Description courte Play Store80 car.80801 codepoint
Description longue Play Store4 000 car.80 premiers au-dessus du pliaccroche de 801 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 comptageRésultatUtilisée par
Unités de code UTF-16 (JS string.length)10Code JavaScript naïf
Points de code Unicode6Twitter, Instagram, passerelles SMS
Grapheme clusters3Bluesky, 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 contenuCible en motsTemps de lecture @ 230 mots/minNotes
Tweet30-40 mots10 soptimiser pour le caractère, pas le mot
Post LinkedIn (zone idéale)170-250 mots1 minau-dessus du pli
Légende Instagram (accroche)20-25 mots<10 s125 premiers car.
Billet de blog — court500-700 mots2-3 minlisticle, actu, prise rapide
Billet de blog — standard1 000-1 500 mots4-7 mintutoriel, guide approfondi
Billet de blog — long2 000-3 000 mots9-13 minguide exhaustif
Page pilier SEO2 500-5 000 mots11-22 minautorité thématique
Dissertation (lycée)500-1 500 mots2-7 minvarie selon le sujet
Mémoire (licence)1 500-3 000 mots7-13 minpar devoir
Quota quotidien NaNoWriMo1 667 mots/jour50 000 mots en 30 jours
Roman — court50 000-70 000 motsYA, polar
Roman — standard80 000-100 000 motsfiction adulte
Conférence (12 min @ 130 mots/min)1 500-1 600 motsparlérépéter pour confirmer
Épisode de podcast (30 min @ 130 mots/min)3 900 motsparlé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

Articles connexes

Voir tous les articles