O Google permite títulos de produto de 1 a 150 caracteres e orienta os lojistas a não usar letras maiúsculas para dar ênfase (Ajuda do Merchant Center). Catálogos em turco exportados de sistemas ERP costumam vir escritos em maiúsculas, então a correção óbvia é uma regra que converte todos os títulos para minúsculas ou para title case. É nessa regra que os dados em turco quebram silenciosamente. No nosso teste, a conversão padrão para minúsculas de İZMİR ÇİZGİLİ KIŞLIK MONT retornou 30 pontos de código em vez de 25, e ISPARTA virou isparta em vez de ısparta. Este guia é para gestores de feed e desenvolvedores que lidam com textos de produtos em turco. Ao final, você será capaz de testar sua stack, corrigir a regra de maiúsculas e minúsculas e adicionar uma verificação que detecta o problema a cada sincronização.
Por que o turco quebra as regras comuns de maiúsculas e minúsculas
O turco tem dois pares de letras separados: o ı sem ponto com a maiúscula I, e o i com ponto com a maiúscula İ. O arquivo de mapeamento de maiúsculas e minúsculas do Unicode afirma isso diretamente: “I and i-dotless; I-dot and i are case pairs in Turkish and Azeri” (Unicode SpecialCasing.txt).
A conversão padrão (neutra quanto ao idioma) não sabe disso. Ela mapeia I para i e mapeia İ para i mais um ponto combinante acima (U+0307). As regras do turco no mesmo arquivo mapeiam I para ı e İ para um i simples. O azerbaijano segue a mesma regra.
Três coisas dão errado em um feed:
- Letras erradas.
KADINvirakadin,YAĞIvirayaği. A palavra continua legível, mas está escrita errada. - Caracteres extras.
İZMİRvirai̇zmi̇r, uma string com dois pontos de código extras que parecem invisíveis. Na tela parece quase certa, mas não corresponde aizmirem um filtro, em um join ou em uma busca. - Maiúsculas erradas no sentido contrário.
istanbulviraISTANBULem vez deİSTANBUL, e o title case produzIçem vez deİç.
Etapa 1: descubra o que sua stack faz hoje
Antes de alterar qualquer regra, verifique como se comporta o código que transforma seus títulos. Passamos as mesmas duas entradas pelos runtimes que a maioria dos pipelines de feed usa. A entrada foi ISPARTA İSTANBUL para minúsculas e istanbul ışık para maiúsculas.
| Runtime e chamada | Resultado em minúsculas | Resultado em maiúsculas | Correto para o turco? |
|---|---|---|---|
JavaScript toLowerCase() / toUpperCase() | isparta i̇stanbul | ISTANBUL IŞIK | Não |
JavaScript toLocaleLowerCase("tr") / toLocaleUpperCase("tr") | ısparta istanbul | İSTANBUL IŞIK | Sim |
Python 3.13 str.lower() / str.upper() | isparta i̇stanbul | ISTANBUL IŞIK | Não |
PHP 8.3 mb_strtolower() | i̇stanbul (para İSTANBUL) | n/d | Não |
PHP 8.3 strtolower() | isparta (para ISPARTA) | n/d | Não |
Perl lc() / uc() | isparta i̇stanbul | ISTANBUL IŞIK | Não |
Dois detalhes importam. Primeiro, o toLocaleLowerCase() do JavaScript, sem argumento, usa o locale padrão, então o mesmo código pode se comportar de forma diferente em um servidor e em um notebook. A documentação mostra "İstanbul".toLocaleLowerCase("en-US") retornando i̇stanbul e toLocaleLowerCase("tr") retornando istanbul (MDN). Sempre passe "tr" explicitamente.
Segundo, o PHP 8.2 alterou o strtolower() para que ele não dependa mais de setlocale() e converta apenas caracteres ASCII (manual do PHP). Definir um locale turco não muda isso em uma versão atual.
Etapa 2: monte um conjunto de teste com títulos reais
Pegue de 10 a 15 títulos do seu próprio catálogo que cubram todas as letras específicas do turco: İ, I, ı, i, Ş, Ğ, Ç, Ö, Ü. Inclua um título que comece com I, um que comece com İ e um com uma unidade como ML ou GB. Aqui está um conjunto inicial, com o resultado da conversão padrão para minúsculas ao lado do correto.
| Título de origem | Minúsculas padrão | Minúsculas em turco |
|---|---|---|
ISPARTA GÜL YAĞI 50 ML | isparta gül yaği 50 ml | ısparta gül yağı 50 ml |
İZMİR ÇİZGİLİ KIŞLIK MONT | i̇zmi̇r çi̇zgi̇li̇ kişlik mont | izmir çizgili kışlık mont |
KADIN İÇ ÇAMAŞIRI SETİ | kadin i̇ç çamaşiri seti̇ | kadın iç çamaşırı seti |
IŞIK GEÇİRMEZ PERDE | işik geçi̇rmez perde | ışık geçirmez perde |
ÇOCUK OKUL ÇANTASI | çocuk okul çantasi | çocuk okul çantası |
Olhe a última linha. Só uma letra difere, e uma checagem visual em alguns títulos facilmente deixaria isso passar. É por isso que o conjunto de teste precisa cobrir todas as letras, e por isso você deve comparar strings, não impressões.
Etapa 3: corrija a função de maiúsculas e minúsculas
Onde sua ferramenta permitir escolher o locale, defina-o como tr. Onde não permitir, envolva a transformação você mesmo. Em JavaScript ou Node, a correção é um argumento:
title.toLocaleLowerCase("tr")
title.toLocaleUpperCase("tr")
Os métodos de string padrão do Python não têm argumento de locale. Uma solução confiável é trocar as quatro letras especiais antes de chamar o método padrão. Testamos esta versão com as quatro primeiras linhas acima:
def tr_lower(s):
return s.replace("İ", "i").replace("I", "ı").lower()
def tr_upper(s):
return s.replace("i", "İ").replace("ı", "I").upper()
A ordem importa. Substitua İ e I primeiro e só depois converta para minúsculas. Se você converter primeiro, a informação sobre qual era a maiúscula já terá se perdido.
Etapa 4: trate title case e unidades separadamente
O title case acrescenta dois problemas. Colocar em maiúscula a primeira letra de cada palavra precisa usar a maiúscula do turco; caso contrário, iç çamaşırı vira Iç Çamaşırı no title() do Python. E uma regra genérica coloca unidades em maiúscula: 50 ML vira 50 Ml.
O padrão que usamos é: converter o título inteiro para minúsculas com a função turca, converter a primeira letra de cada palavra para maiúscula com a função turca e ignorar qualquer token que comece com um dígito ou que conste em uma lista curta de unidades (ml, gb, cm, kg). Em ISPARTA GÜL YAĞI 50 ML, isso resulta em Isparta Gül Yağı 50 ml. Sem a lista de unidades, o mesmo pipeline retorna 50 Ml. Observe que Isparta está correto: o nome da cidade começa com um I maiúsculo sem ponto.
Nomes de marcas são um caso à parte. Uma marca escrita propositalmente em maiúsculas (IKEA, HP) precisa de uma lista de exceções, porque o Google pede apenas que você evite maiúsculas para dar ênfase e continue usando-as quando apropriado, como em abreviações (Ajuda do Merchant Center). Mantenha a lista curta e no mesmo lugar da regra.
Se você mantém essas regras em uma ferramenta de gerenciamento de feed, verifique como ela aplica maiúsculas e minúsculas. As Feed Rules do Feedance listam maiúsculas, sentence case e primeira letra maiúscula como opções, e a página não informa qual locale elas usam; por isso, rodamos este conjunto de teste em qualquer ferramenta, inclusive na nossa, antes de confiar a ela textos em turco. Para uma visão mais ampla de quando uma regra basta e quando vale a pena usar um modelo de IA, veja nossa comparação entre títulos de produtos baseados em regras e em IA.
Etapa 5: detecte danos remanescentes nos dados existentes
Se uma regra incorreta já foi executada, o ponto combinante agora está nos seus dados armazenados. A normalização Unicode não o remove: no nosso teste, i seguido de U+0307 continuou com dois pontos de código após a normalização NFC, porque não existe uma forma pré-composta na qual combiná-los. Você precisa encontrá-lo e removê-lo.
Esta verificação informa todos os títulos que contêm o ponto combinante acima:
import re
bad = [t for t in titles if re.search("̇", t)]
Depois de executar novamente a regra corrigida em İZMİR, a mesma verificação retorna falso. Execute-a em title, description, brand, product_type e em qualquer campo custom_label, já que as regras de maiúsculas e minúsculas costumam ser aplicadas a mais do que apenas os títulos.
Separadamente, se um canal informar um erro de codificação, trata-se de outra falha. A página “Invalid UTF-8 encoding” do Merchant Center diz que a causa é um problema na codificação do texto e orienta você a declarar ou converter a codificação do arquivo (Ajuda do Merchant Center). O bug de maiúsculas e minúsculas produz UTF-8 válido, então não dispara esse erro. Ele passa em silêncio, e esse é o motivo para testá-lo.
Etapa 6: transforme isso em uma barreira a cada sincronização
Uma correção que ninguém reverifica vai regredir na primeira vez que alguém adicionar uma regra ou trocar de ferramenta. Use este checklist como barreira de publicação para qualquer alteração nas regras de título, descrição ou nome de categoria.
| Verificação | Condição de aprovação |
|---|---|
| O locale é explícito | Toda função de maiúsculas e minúsculas é chamada com tr ou envolvida como acima |
| O conjunto de teste passa | Todas as linhas coincidem com a saída correta para o turco, caractere por caractere |
| Sem ponto combinante | Nenhum campo contém U+0307 |
| Unidades preservadas | Tokens como ml, gb, cm não recebem title case |
| Exceções de marcas aplicadas | As marcas listadas mantêm as maiúsculas pretendidas |
| Comprimento inalterado | A saída não é mais longa que a entrada em pontos de código e fica dentro de 150 |
A verificação de comprimento detecta os pontos de código extras que a conversão padrão para minúsculas adiciona. É um alarme conveniente mesmo que você ainda não saiba qual regra causou a mudança.
Onde este método tem limites
Este é um método para turco e azerbaijano, os dois idiomas que o arquivo do Unicode lista para essa regra. Ele não cobre campos em escrita árabe; para esses, veja como estruturar dados de produtos em árabe e inglês.
Não temos evidências de que o Google ou qualquer marketplace reprove um produto por causa de um i com ou sem ponto errado. Os custos documentados são indiretos: títulos com erros de ortografia diante dos compradores e strings que deixam de corresponder aos seus filtros, joins e busca interna. Trate isso como uma falha de qualidade de dados, não de política.
O truque de substituição da Etapa 3 cobre as quatro letras especiais, mas não é uma implementação completa das regras de maiúsculas e minúsculas do Unicode. Bibliotecas baseadas em ICU e ferramentas que expõem uma configuração de locale cobrem mais casos extremos do que um wrapper escrito à mão. Se uma ferramenta que você usa já tem uma opção correta de locale turco, use-a e mantenha apenas o conjunto de teste. Não testamos como Channable, DataFeedWatch ou Productsup tratam o locale turco, então não afirmamos nada nem a favor nem contra; execute o conjunto de teste nelas como faria com qualquer ferramenta. Os marketplaces têm suas próprias regras de título além destas, abordadas em nossos guias sobre feeds do Akakçe, Cimri, N11 e ÇiçekSepeti.
FAQ
Por que İZMİR vira i̇zmi̇r quando eu converto para minúsculas?
A conversão padrão do Unicode para minúsculas mapeia o İ maiúsculo com ponto para um i comum mais um ponto combinante acima (U+0307). A regra do turco mapeia İ para um i simples. O resultado parece quase certo na tela, mas contém pontos de código extras.
O Google Merchant Center rejeita títulos com o ponto combinante?
Não encontramos nenhuma rejeição documentada por isso. A string é UTF-8 válido, então não dispara o erro “Invalid UTF-8 encoding”. O prejuízo são títulos com erros de ortografia e falhas de correspondência nas suas próprias ferramentas.
Devo enviar os títulos em maiúsculas, minúsculas ou title case?
O Google diz para não usar letras maiúsculas para dar ênfase e para colocar os detalhes mais importantes primeiro, já que os usuários geralmente veem apenas os primeiros 70 caracteres ou menos. Sentence case ou title case com as letras corretas do turco atendem a essa orientação. Qual converte melhor é um teste para a sua própria conta.
toLowerCase("tr") basta em JavaScript?
Não. toLowerCase() não aceita locale. Use toLocaleLowerCase("tr") e passe o locale explicitamente, porque o padrão depende do ambiente.
Por que setlocale não corrige o strtolower do PHP?
Desde o PHP 8.2, strtolower() ignora o locale e converte apenas letras ASCII. mb_strtolower() trata texto não ASCII mas, no nosso teste, ainda retornou i̇stanbul para İSTANBUL. Aplique a substituição de caracteres da Etapa 3 antes de chamá-lo.
A normalização Unicode consegue remover o ponto solto?
Não. No nosso teste, a NFC deixou i mais U+0307 como dois pontos de código. Remova o caractere explicitamente e depois execute novamente a regra de maiúsculas e minúsculas corrigida sobre o texto de origem original.
Isso afeta o árabe ou outros idiomas?
A regra se aplica ao turco e ao azerbaijano. Outros idiomas têm seus próprios problemas de maiúsculas, minúsculas e normalização, que este guia não aborda.
Quantas linhas de teste são suficientes?
O suficiente para cobrir todas as letras específicas do turco e cada posição que elas podem ocupar: início da palavra, meio, fim e ao lado de um dígito. Para a maioria dos catálogos, isso significa de 10 a 15 títulos. Adicione uma linha sempre que um novo defeito aparecer em produção.
Verifique o seu próprio feed
Se quiser ver como o seu feed atual se sai em qualidade de títulos e atributos, passe-o pela nossa ferramenta gratuita de auditoria de feed de produtos.

Cofundadora da Feedance, onde aplica mais de 20 anos de experiência em design de produto e de experiência do usuário para definir como os catálogos se tornam criativos. Com forte foco em unir design systems e automação, ela se dedica a ajudar marcas a escalar a qualidade visual sem escalar o esforço de design.
LinkedIn












