Com pressa? Conte suas palavras-chave em bytes direto no navegador: grátis, sem cadastro, nada é enviado.
O que a Apple diz (e o que se observa)
As próprias páginas da Apple não concordam entre si:
- A referência do App Store Connect descreve o campo Keywords assim: "You can provide up to 100 bytes of content.", ou seja, em bytes.
- A página Creating Your Product Page fala em 100 caracteres.
- Nos fóruns de desenvolvedores, em 2022, um membro da equipe da Apple testou palavras-chave em tailandês pela API: 100 caracteres passaram, 106 foram rejeitados. E 100 caracteres tailandeses pesam muito mais do que 100 bytes.
Ou seja, a documentação de referência diz bytes, e pelo menos uma observação mostra que caracteres são contados. Enquanto a Apple não esclarecer, é preciso escolher uma regra.
Por que a diferença importa
Em UTF-8, letras latinas sem acento ocupam um byte, uma letra acentuada ocupa dois, um caractere japonês ou tailandês, três.
| Palavra-chave | Caracteres | Bytes |
|---|---|---|
| shopping | 8 | 8 |
| épicerie | 8 | 9 |
| supermarché | 11 | 12 |
| Einkaufsliste | 13 | 13 |
| 買い物リスト | 6 | 18 |
| รายการ | 6 | 18 |
Para o inglês, a questão nunca aparece. Para português, francês ou espanhol, a diferença é de alguns bytes em uma lista completa (em português, "lista de compras" não tem acento, mas "promoção" tem 8 caracteres e 10 bytes). Para japonês ou tailandês, o mesmo campo comporta um terço do texto se você contar em bytes, e aí a regra escolhida faz diferença.
Contar você mesmo
No terminal, sobre o seu arquivo fastlane ($(cat …) remove a quebra de linha final):
printf '%s' "$(cat fastlane/metadata/fr-FR/keywords.txt)" | wc -c # bytes
printf '%s' "$(cat fastlane/metadata/fr-FR/keywords.txt)" | wc -m # characters
O wc -m conta caracteres de acordo com a localidade do seu terminal; com uma localidade que não é UTF-8, ele retorna o mesmo número que o wc -c. Em Dart:
import 'dart:convert';
final keywords = 'courses,épicerie,liste,famille,partagée';
print(utf8.encode(keywords).length); // 41 bytes
print(keywords.runes.length); // 39 characters
A regra que aplicamos
Contar bytes. É o que diz a documentação de referência, e é a opção mais rigorosa: um campo que cabe em 100 bytes cabe necessariamente em 100 caracteres, então nunca será rejeitado. O LocalePilot aplica essa regra na tela de ficha da App Store, que mostra por exemplo "94 / 100 bytes" enquanto você digita.
Para japonês, chinês, coreano ou tailandês, essa regra tem um custo: você pode estar deixando espaço sem uso. Se esses mercados importam para você, teste uma lista mais longa no App Store Connect: ele rejeita na hora um campo longo demais, então você vai saber o que passa hoje.
O que não depende da unidade
- Vírgulas, sem espaços em volta. Cada espaço depois de uma vírgula custa um byte à toa.
- Sem repetir o nome e o subtítulo. A maioria dos guias de ASO desaconselha repetir nas palavras-chave o que esses dois campos já dizem.
- Um arquivo por idioma. Com o fastlane, cada localização tem o próprio
fastlane/metadata/<locale>/keywords.txt. Traduzir a lista em inglês palavra por palavra raramente dá os termos que as pessoas realmente digitam: parta das buscas no idioma de destino.