Mots-clés App Store : 100 octets ou 100 caractères ?

Mis à jour le · GLabs325

Le champ Keywords d'App Store Connect est limité à 100… octets ou caractères, selon la page d'Apple que vous lisez. Pour une liste en anglais, c'est pareil. Pour le français, le japonais ou le thaï, non.

Ce que dit Apple (et ce qu'on observe)

La question paraît simple. Les sources d'Apple ne disent pourtant pas la même chose :

  • La référence d'App Store Connect décrit le champ Keywords ainsi : « You can provide up to 100 bytes of content ». Des octets.
  • La page Creating Your Product Page parle de 100 caractères.
  • Sur les forums développeurs, en 2022, un membre de l'équipe Apple a testé des mots-clés en thaï via l'API : 100 caractères passaient, 106 étaient refusés. Or 100 caractères thaïs pèsent bien plus de 100 octets.

Autrement dit : la documentation de référence annonce des octets, et au moins une observation montre un comptage en caractères. Tant qu'Apple ne tranche pas, il faut choisir une règle.

Pourquoi la différence compte

En UTF-8, les lettres latines sans accent occupent un octet, une lettre accentuée deux, un caractère japonais ou thaï trois.

Mot-cléCaractèresOctets
courses77
épicerie89
supermarché1112
Einkaufsliste1313
買い物リスト618
รายการ618

En français, l'écart reste faible : quelques octets de plus pour une liste pleine d'accents. En japonais ou en thaï, le même champ contient trois fois moins de texte si l'on compte en octets. C'est là que le choix de la règle a des conséquences.

Compter soi-même

Dans un terminal, sur le fichier fastlane ($(cat …) retire le retour à la ligne final) :

printf '%s' "$(cat fastlane/metadata/fr-FR/keywords.txt)" | wc -c   # octets
printf '%s' "$(cat fastlane/metadata/fr-FR/keywords.txt)" | wc -m   # caractères

wc -m compte les caractères selon la locale du terminal ; avec une locale non UTF-8, il renverra le même nombre que wc -c. En Dart :

import 'dart:convert';

final keywords = 'courses,épicerie,liste,famille,partagée';
print(utf8.encode(keywords).length); // 41 octets
print(keywords.runes.length);        // 39 caractères

La règle que nous appliquons

Compter en octets. C'est la règle de la documentation de référence, et c'est la plus stricte : un champ qui tient en 100 octets tient forcément en 100 caractères, donc il ne sera jamais refusé. LocalePilot l'applique dans son écran Fiche App Store, qui affiche par exemple « 94 / 100 octets » pendant la saisie.

Le coût est réel pour le japonais, le chinois, le coréen ou le thaï : vous laissez peut-être de la place inutilisée. Si ces marchés comptent pour vous, faites l'essai dans App Store Connect avec une liste plus longue : l'interface refuse immédiatement un champ trop long, vous saurez ce qui passe aujourd'hui.

Ce qui ne dépend pas de l'unité

  • Des virgules, sans espace autour. Chaque espace après une virgule consomme un octet pour rien.
  • Pas de doublons avec le nom et le sous-titre. La plupart des guides ASO conseillent de ne pas répéter dans les mots-clés ce qui figure déjà dans ces deux champs.
  • Un fichier par langue. Avec fastlane, chaque localisation a son fastlane/metadata/<locale>/keywords.txt. Traduire mot à mot la liste anglaise donne rarement les termes que les gens tapent réellement : partez de la recherche dans la langue cible.

Questions fréquentes

Combien d'octets fait une lettre accentuée ?

Deux en UTF-8 (é, è, à, ç…). Un caractère japonais, chinois ou thaï en fait trois.

Faut-il mettre des espaces après les virgules ?

Non : séparez les mots-clés par des virgules sans espace, chaque espace consomme de la place.

Où se trouve le fichier des mots-clés avec fastlane ?

Dans fastlane/metadata/<locale>/keywords.txt, un fichier par langue.

Autres guides