Palavras-chave da App Store: 100 bytes ou 100 caracteres?

Atualizado em · LocalePilot

O campo Keywords do App Store Connect é limitado a 100… bytes ou caracteres, dependendo da página da Apple que você lê. Para uma lista em inglês, dá no mesmo. Para português, japonês ou tailandês, não.

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-chaveCaracteresBytes
shopping88
épicerie89
supermarché1112
Einkaufsliste1313
買い物リスト618
รายการ618

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.

Perguntas frequentes

Quantos bytes tem uma letra acentuada?

Dois em UTF-8 (é, ã, ç, ô…). Um caractere japonês, chinês ou tailandês ocupa três.

Devo colocar espaços depois das vírgulas?

Não: separe as palavras-chave com vírgulas e sem espaços, cada espaço ocupa lugar.

Onde fica o arquivo de palavras-chave com o fastlane?

Em fastlane/metadata/<locale>/keywords.txt, um arquivo por idioma.