NeuProduct Score, 4T Segmentation, Price War und Broken Size sind live.Neuigkeiten ansehen
Feedance
Artikel

Türkische Produkttitel in Kleinbuchstaben umwandeln, ohne İ und ı zu zerstören: Praxisleitfaden für Feed-Regeln

Standard-Lowercase macht aus İZMİR „i̇zmi̇r“ und aus ISPARTA „isparta“. Türkische Schreibung in Feed-Titelregeln testen, korrigieren, absichern.

Inci DindarInci Dindar
9 Min. Lesezeit
Product tags with one misplaced dot being inspected by a magnifier, illustrating Turkish casing errors in feed titles

Google erlaubt Produkttitel mit 1 bis 150 Zeichen und weist Händler an, keine Großbuchstaben zur Hervorhebung zu verwenden (Merchant Center Help). Türkische Kataloge, die aus ERP-Systemen exportiert werden, sind oft in Großbuchstaben geschrieben. Die naheliegende Lösung ist deshalb eine Regel, die jeden Titel in Kleinbuchstaben oder in Title Case umwandelt. Genau an dieser Regel scheitern türkische Daten unbemerkt. In unserem Test lieferte ein Standard-Lowercase von İZMİR ÇİZGİLİ KIŞLIK MONT 30 Codepoints statt 25, und aus ISPARTA wurde isparta statt ısparta. Dieser Leitfaden richtet sich an Feed-Manager und Entwickler, die mit türkischen Produkttexten arbeiten. Am Ende können Sie Ihren Stack testen, die Regel für die Groß- und Kleinschreibung korrigieren und eine Prüfung einrichten, die das Problem bei jeder Synchronisierung erkennt.

Warum türkische Groß- und Kleinschreibung gewöhnliche Regeln aushebelt

Das Türkische kennt zwei getrennte Buchstabenpaare: das punktlose ı mit dem Großbuchstaben I und das gepunktete i mit dem Großbuchstaben İ. Die Unicode-Datei zur Groß-/Kleinschreibung sagt das ausdrücklich: „I and i-dotless; I-dot and i are case pairs in Turkish and Azeri“ (Unicode SpecialCasing.txt).

Die Standardumwandlung (sprachneutral) weiß davon nichts. Sie wandelt I in i um und İ in i plus einen kombinierenden Punkt darüber (U+0307). Die türkischen Regeln in derselben Datei wandeln I in ı und İ in ein einfaches i um. Aserbaidschanisch folgt derselben Regel.

In einem Feed gehen dabei drei Dinge schief:

  • Falsche Buchstaben. Aus KADIN wird kadin, aus YAĞI wird yaği. Das Wort bleibt lesbar, ist aber falsch geschrieben.
  • Zusätzliche Zeichen. Aus İZMİR wird i̇zmi̇r, ein String mit zwei zusätzlichen, unsichtbar wirkenden Codepoints. Er sieht am Bildschirm fast richtig aus, stimmt aber in einem Filter, einem Join oder einer Suche nicht mit izmir überein.
  • Falsche Großbuchstaben in die andere Richtung. Aus istanbul wird ISTANBUL statt İSTANBUL, und Title Case erzeugt Iç statt İç.

Schritt 1: Prüfen, was Ihr Stack heute tut

Bevor Sie eine Regel ändern, prüfen Sie, wie sich der Code verhält, der Ihre Titel umwandelt. Wir haben dieselben zwei Eingaben durch die Laufzeitumgebungen geschickt, die die meisten Feed-Pipelines verwenden. Die Eingabe war ISPARTA İSTANBUL für Kleinbuchstaben und istanbul ışık für Großbuchstaben.

Laufzeitumgebung und AufrufErgebnis KleinbuchstabenErgebnis GroßbuchstabenTürkisch korrekt?
JavaScript toLowerCase() / toUpperCase()isparta i̇stanbulISTANBUL IŞIKNein
JavaScript toLocaleLowerCase("tr") / toLocaleUpperCase("tr")ısparta istanbulİSTANBUL IŞIKJa
Python 3.13 str.lower() / str.upper()isparta i̇stanbulISTANBUL IŞIKNein
PHP 8.3 mb_strtolower()i̇stanbul (für İSTANBUL)k. A.Nein
PHP 8.3 strtolower()isparta (für ISPARTA)k. A.Nein
Perl lc() / uc()isparta i̇stanbulISTANBUL IŞIKNein

Zwei Details sind wichtig. Erstens verwendet das einfache toLocaleLowerCase() in JavaScript ohne Argument die Standardsprache (Default Locale). Derselbe Code kann sich daher auf einem Server anders verhalten als auf einem Laptop. Die Dokumentation zeigt, dass "İstanbul".toLocaleLowerCase("en-US") den Wert i̇stanbul zurückgibt und toLocaleLowerCase("tr") den Wert istanbul (MDN). Übergeben Sie "tr" deshalb immer explizit.

Zweitens wurde strtolower() in PHP 8.2 so geändert, dass es nicht mehr von setlocale() abhängt und nur ASCII-Zeichen umwandelt (PHP-Handbuch). Das Setzen einer türkischen Locale ändert daran in einer aktuellen Version nichts.

Schritt 2: Ein Testset aus echten Titeln aufbauen

Wählen Sie 10 bis 15 Titel aus Ihrem eigenen Katalog, die alle türkischen Sonderbuchstaben abdecken: İ, I, ı, i, Ş, Ğ, Ç, Ö, Ü. Nehmen Sie einen Titel auf, der mit I beginnt, einen, der mit İ beginnt, und einen mit einer Einheit wie ML oder GB. Hier ist ein Startset, jeweils mit dem Ergebnis eines Standard-Lowercase neben dem korrekten.

AusgangstitelStandard-LowercaseTürkisches Lowercase
ISPARTA GÜL YAĞI 50 MLisparta gül yaği 50 mlısparta gül yağı 50 ml
İZMİR ÇİZGİLİ KIŞLIK MONTi̇zmi̇r çi̇zgi̇li̇ kişlik montizmir çizgili kışlık mont
KADIN İÇ ÇAMAŞIRI SETİkadin i̇ç çamaşiri seti̇kadın iç çamaşırı seti
IŞIK GEÇİRMEZ PERDEişik geçi̇rmez perdeışık geçirmez perde
ÇOCUK OKUL ÇANTASIçocuk okul çantasiçocuk okul çantası

Sehen Sie sich die letzte Zeile an. Nur ein Buchstabe unterscheidet sich, und eine visuelle Stichprobe einiger Titel würde das leicht übersehen. Deshalb muss das Testset jeden Buchstaben abdecken, und deshalb vergleichen Sie Strings, statt sich auf Eindrücke zu verlassen.

Schritt 3: Die Umwandlungsfunktion korrigieren

Wenn Ihr Tool die Auswahl der Locale erlaubt, setzen Sie sie auf tr. Wenn nicht, kapseln Sie die Umwandlung selbst. In JavaScript oder Node genügt dafür ein Argument:

title.toLocaleLowerCase("tr")
title.toLocaleUpperCase("tr")

Die Standard-String-Methoden von Python haben kein Locale-Argument. Ein verlässlicher Workaround besteht darin, die vier Sonderbuchstaben zu ersetzen, bevor die Standardmethode aufgerufen wird. Diese Version haben wir an den ersten vier Zeilen oben getestet:

def tr_lower(s):
    return s.replace("İ", "i").replace("I", "ı").lower()

def tr_upper(s):
    return s.replace("i", "İ").replace("ı", "I").upper()

Die Reihenfolge ist entscheidend. Ersetzen Sie zuerst İ und I und wandeln Sie erst danach in Kleinbuchstaben um. Wenn Sie zuerst umwandeln, ist die Information, welcher Großbuchstabe es war, bereits verloren.

Schritt 4: Title Case und Einheiten getrennt behandeln

Title Case bringt zwei weitere Probleme mit sich. Der erste Buchstabe jedes Wortes muss mit der türkischen Großschreibung umgewandelt werden, sonst wird aus iç çamaşırı in Pythons title() der Text Iç Çamaşırı. Außerdem schreibt eine pauschale Regel auch Einheiten groß: Aus 50 ML wird 50 Ml.

Wir gehen so vor: den gesamten Titel mit der türkischen Funktion in Kleinbuchstaben umwandeln, den ersten Buchstaben jedes Wortes mit der türkischen Funktion großschreiben und jedes Token überspringen, das mit einer Ziffer beginnt oder auf einer kurzen Einheitenliste steht (ml, gb, cm, kg). Bei ISPARTA GÜL YAĞI 50 ML ergibt das Isparta Gül Yağı 50 ml. Ohne Einheitenliste liefert dieselbe Pipeline 50 Ml. Beachten Sie, dass Isparta korrekt ist: Der Städtename beginnt mit einem punktlosen großen I.

Markennamen sind ein Sonderfall. Eine Marke, die absichtlich in Großbuchstaben geschrieben wird (IKEA, HP), braucht eine Ausschlussliste. Google verlangt nämlich nur, Großbuchstaben nicht zur Hervorhebung zu verwenden, und erlaubt sie weiterhin dort, wo sie angemessen sind, etwa bei Abkürzungen (Merchant Center Help). Halten Sie die Liste kurz und pflegen Sie sie an derselben Stelle wie die Regel.

Wenn Sie diese Regeln in einem Feed-Management-Tool pflegen, prüfen Sie, wie es mit Groß- und Kleinschreibung umgeht. Die Feed Rules von Feedance bieten Großbuchstaben, Satzschreibung (Sentence Case) und Anfangsbuchstaben in Großschreibung als Optionen an, und die Seite nennt nicht, welche Locale sie verwenden. Deshalb lassen wir dieses Testset über jedes Tool laufen, auch über unser eigenes, bevor wir ihm türkische Texte anvertrauen. Einen breiteren Überblick darüber, wann eine Regel genügt und wann sich ein KI-Modell lohnt, finden Sie in unserem Vergleich von regelbasierten und KI-generierten Produkttiteln.

Schritt 5: Verbliebene Schäden in bestehenden Daten erkennen

Wenn bereits eine fehlerhafte Regel gelaufen ist, steckt der kombinierende Punkt nun in Ihren gespeicherten Daten. Die Unicode-Normalisierung entfernt ihn nicht: In unserem Test blieb i gefolgt von U+0307 auch nach der NFC-Normalisierung zwei Codepoints, weil es keine vorkomponierte Form gibt, in die sich beide zusammenführen ließen. Sie müssen ihn selbst finden und entfernen.

Diese Prüfung meldet jeden Titel, der den kombinierenden Punkt darüber enthält:

import re
bad = [t for t in titles if re.search("̇", t)]

Nachdem Sie die korrigierte Regel erneut auf İZMİR angewendet haben, liefert dieselbe Prüfung „false“. Führen Sie sie für title, description, brand, product_type und jedes custom_label-Feld aus, denn Regeln zur Groß- und Kleinschreibung werden oft auf mehr als nur Titel angewendet.

Wenn ein Kanal einen Kodierungsfehler meldet, ist das eine andere Ursache. Die Merchant-Center-Seite „Invalid UTF-8 encoding“ nennt als Ursache ein Problem mit der Kodierung des Textes und rät, die Kodierung der Datei anzugeben oder umzuwandeln (Merchant Center Help). Der Fehler bei der Groß- und Kleinschreibung erzeugt gültiges UTF-8 und löst diese Meldung daher nicht aus. Er fällt unbemerkt durch, und genau deshalb sollten Sie gezielt darauf testen.

Schritt 6: Eine Prüfschranke bei jeder Synchronisierung einrichten

Eine Korrektur, die niemand erneut prüft, fällt zurück, sobald jemand eine Regel hinzufügt oder das Tool wechselt. Verwenden Sie diese Checkliste als Freigabeschranke für jede Änderung an Regeln für Titel, Beschreibungen oder Kategorienamen.

PrüfungBestehensbedingung
Locale ist explizit gesetztJede Funktion zur Groß-/Kleinschreibung wird mit tr aufgerufen oder wie oben gekapselt
Testset bestehtAlle Zeilen stimmen Zeichen für Zeichen mit der türkisch korrekten Ausgabe überein
Kein kombinierender PunktKein Feld enthält U+0307
Einheiten bleiben erhaltenTokens wie ml, gb, cm werden nicht in Title Case umgewandelt
Markenausschlüsse greifenGelistete Marken behalten ihre beabsichtigte Großschreibung
Länge unverändertDie Ausgabe ist in Codepoints nicht länger als die Eingabe und bleibt innerhalb von 150

Die Längenprüfung erkennt die zusätzlichen Codepoints, die das Standard-Lowercase erzeugt. Sie ist ein praktischer Stolperdraht, selbst wenn Sie noch nicht wissen, welche Regel die Änderung verursacht hat.

Wo diese Methode an ihre Grenzen stößt

Diese Methode gilt für Türkisch und Aserbaidschanisch, die beiden Sprachen, die die Unicode-Datei für diese Regel nennt. Felder in arabischer Schrift deckt sie nicht ab. Dazu lesen Sie, wie Sie arabische und englische Produktdaten strukturieren.

Wir haben keinen Beleg dafür, dass Google oder ein Marktplatz ein Produkt wegen eines falschen gepunkteten oder punktlosen i ablehnt. Die dokumentierten Kosten sind indirekt: falsch geschriebene Titel vor den Augen der Käufer und Strings, die nicht mehr zu Ihren Filtern, Joins und Ihrer internen Suche passen. Betrachten Sie es als Datenqualitätsfehler, nicht als Richtlinienverstoß.

Der Ersetzungstrick in Schritt 3 deckt die vier Sonderbuchstaben ab, ist aber keine vollständige Implementierung der Unicode-Regeln zur Groß- und Kleinschreibung. Auf ICU basierende Bibliotheken und Tools mit Locale-Einstellung decken mehr Randfälle ab als ein selbst geschriebener Wrapper. Wenn ein von Ihnen genutztes Tool bereits eine korrekte türkische Locale-Option hat, nutzen Sie sie und behalten Sie nur das Testset. Wie Channable, DataFeedWatch oder Productsup mit der türkischen Locale umgehen, haben wir nicht getestet; wir treffen dazu keine Aussage. Lassen Sie das Testset dort wie bei jedem Tool laufen. Marktplätze haben zusätzlich eigene Titelregeln, die wir in unseren Leitfäden zu den Feeds von Akakçe, Cimri, N11 und ÇiçekSepeti behandeln.

FAQ

Warum wird İZMİR beim Umwandeln in Kleinbuchstaben zu i̇zmi̇r?

Die Standard-Kleinschreibung von Unicode wandelt das gepunktete große İ in ein normales i plus einen kombinierenden Punkt darüber (U+0307) um. Die türkische Regel wandelt İ in ein einfaches i um. Das Ergebnis sieht am Bildschirm fast richtig aus, enthält aber zusätzliche Codepoints.

Lehnt Google Merchant Center Titel mit dem kombinierenden Punkt ab?

Eine dokumentierte Ablehnung dafür haben wir nicht gefunden. Der String ist gültiges UTF-8 und löst daher den Fehler „Invalid UTF-8 encoding“ nicht aus. Der Schaden besteht in falsch geschriebenen Titeln und fehlgeschlagenem Matching in Ihren eigenen Tools.

Sollte ich Titel in Großbuchstaben, Kleinbuchstaben oder Title Case senden?

Google sagt, man solle keine Großbuchstaben zur Hervorhebung verwenden und die wichtigsten Angaben nach vorn stellen, da Nutzer meist nur die ersten 70 oder weniger Zeichen sehen. Satzschreibung oder Title Case mit korrekten türkischen Buchstaben erfüllen beides. Welche Variante besser konvertiert, ist ein Test für Ihr eigenes Konto.

Genügt toLowerCase("tr") in JavaScript?

Nein. toLowerCase() nimmt keine Locale entgegen. Verwenden Sie toLocaleLowerCase("tr") und übergeben Sie die Locale explizit, weil der Standardwert von der Umgebung abhängt.

Warum behebt setlocale das strtolower von PHP nicht?

Seit PHP 8.2 ignoriert strtolower() die Locale und wandelt nur ASCII-Buchstaben um. mb_strtolower() verarbeitet Nicht-ASCII-Text, lieferte in unserem Test für İSTANBUL aber trotzdem i̇stanbul. Wenden Sie die Zeichenersetzung aus Schritt 3 an, bevor Sie die Funktion aufrufen.

Kann die Unicode-Normalisierung den losen Punkt entfernen?

Nein. In unserem Test beließ NFC i plus U+0307 als zwei Codepoints. Entfernen Sie das Zeichen explizit und wenden Sie dann die korrigierte Regel erneut auf den ursprünglichen Quelltext an.

Betrifft das auch Arabisch oder andere Sprachen?

Die Regel gilt für Türkisch und Aserbaidschanisch. Andere Sprachen haben eigene Probleme bei Groß- und Kleinschreibung und Normalisierung, die dieser Leitfaden nicht behandelt.

Wie viele Testzeilen genügen?

So viele, dass jeder türkische Sonderbuchstabe und jede Position, die er einnehmen kann, abgedeckt ist: Wortanfang, Wortmitte, Wortende und neben einer Ziffer. Für die meisten Kataloge sind das 10 bis 15 Titel. Fügen Sie eine Zeile hinzu, sobald im Live-Betrieb ein neuer Fehler auftaucht.

Prüfen Sie Ihren eigenen Feed

Wenn Sie sehen möchten, wie Ihr aktueller Feed bei Titel- und Attributqualität abschneidet, lassen Sie ihn durch unser kostenloses Tool zur Feed-Analyse laufen.

Möchten Sie, dass jemand Ihren Feed noch einmal prüft? Wir gehen ihn gemeinsam mit Ihnen durch und zeigen Ihnen die Lücken vor Ihrer nächsten Einreichung.
Kostenloses Audit starten
Inci Dindar
Geschrieben von
Inci Dindar

Mitgründerin von Feedance. Mit über 20 Jahren Erfahrung in Produkt- und User-Experience-Design gestaltet sie, wie aus Katalogen kreative Inhalte werden. Mit einem starken Fokus darauf, Designsysteme und Automatisierung zu verbinden, hilft sie Marken, ihre visuelle Qualität zu skalieren, ohne den Designaufwand zu skalieren.

LinkedIn

Sehen Sie, welche
Produkte Umsatz bringen.

Verbinden Sie Ihren Feed und GA4. Wir zeigen Product Score, 4T, Price War und Broken Size für Ihren eigenen Katalog.