Google dopuszcza tytuł produktu o długości od 1 do 150 znaków i zaleca, by nie używać wielkich liter do wyróżniania (Merchant Center Help). Tureckie katalogi eksportowane z systemów ERP są często zapisane wielkimi literami, więc oczywistym rozwiązaniem wydaje się reguła, która zamienia każdy tytuł na małe litery lub nadaje mu format title case. Właśnie tu tureckie dane po cichu się psują. W naszym teście domyślna zamiana İZMİR ÇİZGİLİ KIŞLIK MONT na małe litery zwróciła 30 punktów kodowych zamiast 25, a ISPARTA zamieniło się w isparta zamiast w ısparta. Ten poradnik jest dla osób zarządzających feedem i programistów, którzy pracują z tureckimi tekstami produktowymi. Na jego końcu będziesz umieć przetestować swój stack, poprawić regułę zmiany wielkości liter i dodać kontrolę, która wychwyci ten problem przy każdej synchronizacji.
Dlaczego turecka wielkość liter psuje zwykłe reguły
Turecki ma dwie oddzielne pary liter: bezkropkowe ı z wielkim I oraz kropkowe i z wielkim İ. Plik Unicode z mapowaniem wielkości liter mówi o tym wprost: „I and i-dotless; I-dot and i are case pairs in Turkish and Azeri” (Unicode SpecialCasing.txt).
Domyślna zamiana (neutralna językowo) tego nie wie. Mapuje I na i, a İ na i plus łączącą kropkę nad literą (U+0307). Reguły tureckie z tego samego pliku mapują I na ı, a İ na zwykłe i. Azerbejdżański stosuje tę samą zasadę.
W feedzie psują się trzy rzeczy:
- Złe litery.
KADINzmienia się wkadin, aYAĞIwyaği. Słowo nadal da się odczytać, ale jest zapisane z błędem. - Dodatkowe znaki.
İZMİRzmienia się wi̇zmi̇r, czyli ciąg z dwoma dodatkowymi, niemal niewidocznymi punktami kodowymi. Na ekranie wygląda prawie poprawnie, ale nie pasuje doizmirw filtrze, złączeniu ani wyszukiwarce. - Złe wielkie litery w drugą stronę.
istanbulzmienia się wISTANBULzamiast wİSTANBUL, a title case dajeIçzamiastİç.
Krok 1: Sprawdź, co robi dziś Twój stack
Zanim zmienisz jakąkolwiek regułę, sprawdź, jak zachowuje się kod przekształcający Twoje tytuły. Te same dwa dane wejściowe przepuściliśmy przez środowiska uruchomieniowe, z których korzysta większość pipeline'ów feedów. Dla małych liter danymi wejściowymi było ISPARTA İSTANBUL, a dla wielkich istanbul ışık.
| Środowisko i wywołanie | Wynik zamiany na małe litery | Wynik zamiany na wielkie litery | Poprawne po turecku? |
|---|---|---|---|
JavaScript toLowerCase() / toUpperCase() | isparta i̇stanbul | ISTANBUL IŞIK | Nie |
JavaScript toLocaleLowerCase("tr") / toLocaleUpperCase("tr") | ısparta istanbul | İSTANBUL IŞIK | Tak |
Python 3.13 str.lower() / str.upper() | isparta i̇stanbul | ISTANBUL IŞIK | Nie |
PHP 8.3 mb_strtolower() | i̇stanbul (dla İSTANBUL) | n/d | Nie |
PHP 8.3 strtolower() | isparta (dla ISPARTA) | n/d | Nie |
Perl lc() / uc() | isparta i̇stanbul | ISTANBUL IŞIK | Nie |
Znaczenie mają dwa szczegóły. Po pierwsze, zwykłe toLocaleLowerCase() w JavaScripcie bez argumentu używa domyślnych ustawień regionalnych, więc ten sam kod może działać inaczej na serwerze i na laptopie. Dokumentacja pokazuje, że "İstanbul".toLocaleLowerCase("en-US") zwraca i̇stanbul, a toLocaleLowerCase("tr") zwraca istanbul (MDN). Zawsze przekazuj "tr" jawnie.
Po drugie, PHP 8.2 zmieniło strtolower() tak, że funkcja nie zależy już od setlocale() i konwertuje wyłącznie znaki ASCII (podręcznik PHP). Ustawienie tureckich ustawień regionalnych niczego tu nie zmieni w aktualnej wersji.
Krok 2: Zbuduj zestaw testowy z prawdziwych tytułów
Weź z własnego katalogu 10–15 tytułów, które obejmują każdą turecką literę specjalną: İ, I, ı, i, Ş, Ğ, Ç, Ö, Ü. Uwzględnij tytuł zaczynający się od I, taki, który zaczyna się od İ, oraz taki z jednostką, np. ML lub GB. Oto zestaw startowy, w którym obok poprawnego wyniku widać efekt domyślnej zamiany na małe litery.
| Tytuł źródłowy | Domyślne małe litery | Tureckie małe litery |
|---|---|---|
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ı |
Spójrz na ostatni wiersz. Różni się tylko jedna litera, a wzrokowa kontrola kilku tytułów łatwo by ją przeoczyła. Dlatego zestaw testowy musi obejmować każdą literę i dlatego porównuje się ciągi znaków, a nie wrażenia.
Krok 3: Popraw funkcję zmiany wielkości liter
Jeśli narzędzie pozwala wybrać ustawienia regionalne, ustaw tr. Jeśli nie, opakuj przekształcenie samodzielnie. W JavaScripcie lub Node poprawka to jeden argument:
title.toLocaleLowerCase("tr")
title.toLocaleUpperCase("tr")
Standardowe metody łańcuchów w Pythonie nie mają argumentu z ustawieniami regionalnymi. Niezawodne obejście polega na podmianie czterech liter specjalnych przed wywołaniem metody domyślnej. Przetestowaliśmy tę wersję na pierwszych czterech wierszach powyżej:
def tr_lower(s):
return s.replace("İ", "i").replace("I", "ı").lower()
def tr_upper(s):
return s.replace("i", "İ").replace("ı", "I").upper()
Kolejność ma znaczenie. Najpierw zamień İ i I, potem przejdź na małe litery. Jeśli zrobisz to odwrotnie, informacja o tym, która to była wielka litera, zostanie już utracona.
Krok 4: Obsłuż title case i jednostki osobno
Title case dokłada dwa problemy. Zamiana pierwszej litery każdego wyrazu na wielką musi używać tureckiej wielkiej litery, inaczej iç çamaşırı zmieni się w Iç Çamaşırı w Pythonowym title(). Ponadto zbiorcza reguła zmienia wielkość liter w jednostkach: 50 ML staje się 50 Ml.
Stosujemy taki wzorzec: zamień cały tytuł na małe litery tureckią funkcją, zamień pierwszą literę każdego wyrazu na wielką tureckią funkcją i pomiń każdy token zaczynający się od cyfry lub znajdujący się na krótkiej liście jednostek (ml, gb, cm, kg). Dla ISPARTA GÜL YAĞI 50 ML daje to Isparta Gül Yağı 50 ml. Bez listy jednostek ten sam pipeline zwraca 50 Ml. Zauważ, że Isparta jest poprawne: nazwa miasta zaczyna się od bezkropkowego wielkiego I.
Nazwy marek to osobny przypadek. Marka celowo zapisana wielkimi literami (IKEA, HP) wymaga listy wyjątków, ponieważ Google prosi jedynie o unikanie wielkich liter do wyróżniania i dopuszcza je tam, gdzie są uzasadnione, np. w skrótach (Merchant Center Help). Trzymaj tę listę krótką i w tym samym miejscu co regułę.
Jeśli utrzymujesz te reguły w narzędziu do zarządzania feedem, sprawdź, jak stosuje ono wielkość liter. Feed Rules w Feedance oferują jako opcje wielkie litery, wielkość liter jak w zdaniu i wielkie pierwsze litery, a strona nie podaje, jakich ustawień regionalnych używają. Dlatego przed powierzeniem narzędziu tureckiego tekstu uruchamiamy ten zestaw testowy na każdym z nich, także na naszym. Szerszy obraz tego, kiedy wystarczy reguła, a kiedy warto sięgnąć po model AI, znajdziesz w naszym porównaniu tytułów produktów opartych na regułach i na AI.
Krok 5: Wykryj pozostałe uszkodzenia w istniejących danych
Jeśli zła reguła już działała, łącząca kropka jest teraz w Twoich zapisanych danych. Normalizacja Unicode jej nie usuwa: w naszym teście i z następującym po nim U+0307 pozostało dwoma punktami kodowymi po normalizacji NFC, ponieważ nie istnieje forma złożona, w którą można by je połączyć. Musisz ją znaleźć i usunąć.
Ta kontrola raportuje każdy tytuł zawierający łączącą kropkę nad literą:
import re
bad = [t for t in titles if re.search("̇", t)]
Po ponownym uruchomieniu poprawionej reguły na İZMİR ta sama kontrola zwraca fałsz. Uruchom ją na polach title, description, brand, product_type i każdym polu custom_label, ponieważ reguły zmiany wielkości liter często stosuje się nie tylko do tytułów.
Osobna sprawa: jeśli kanał zgłasza błąd kodowania, to jest to inna usterka. Strona Merchant Center „Invalid UTF-8 encoding” podaje, że przyczyną jest problem z kodowaniem tekstu, i każe zadeklarować lub przekonwertować kodowanie pliku (Merchant Center Help). Błąd wielkości liter daje poprawny UTF-8, więc nie wywoła tego komunikatu. Przechodzi bez echa, i właśnie dlatego trzeba go testować.
Krok 6: Zrób z tego bramkę przy każdej synchronizacji
Poprawka, której nikt nie sprawdza ponownie, zregresuje się przy pierwszym dodaniu reguły lub zmianie narzędzia. Użyj tej listy kontrolnej jako bramki wydania dla każdej zmiany reguł tytułów, opisów lub nazw kategorii.
| Kontrola | Warunek zaliczenia |
|---|---|
| Ustawienia regionalne są jawne | Każda funkcja zmiany wielkości liter jest wywoływana z tr lub opakowana jak powyżej |
| Zestaw testowy przechodzi | Wszystkie wiersze zgadzają się z poprawnym tureckim wynikiem znak po znaku |
| Brak łączącej kropki | Zero pól zawiera U+0307 |
| Jednostki zachowane | Tokeny takie jak ml, gb, cm nie są zapisane w title case |
| Wyjątki dla marek zastosowane | Marki z listy zachowują zamierzone wielkie litery |
| Długość bez zmian | Wynik nie jest dłuższy od wejścia w punktach kodowych i mieści się w 150 |
Kontrola długości wychwytuje dodatkowe punkty kodowe, które dodaje domyślna zamiana na małe litery. To wygodny wykrywacz, nawet jeśli jeszcze nie wiesz, która reguła spowodowała zmianę.
Gdzie ta metoda przestaje działać
To metoda dla tureckiego i azerbejdżańskiego, dwóch języków, które plik Unicode wymienia przy tej regule. Nie obejmuje pól w alfabecie arabskim; zobacz, jak zbudować arabskie i angielskie dane produktowe.
Nie mamy dowodów, że Google lub jakikolwiek marketplace odrzuca produkt z powodu błędnego kropkowego lub bezkropkowego i. Udokumentowane koszty są pośrednie: tytuły z błędami przed oczami kupujących oraz ciągi, które przestają pasować do Twoich filtrów, złączeń i wewnętrznej wyszukiwarki. Traktuj to jako błąd jakości danych, nie naruszenie zasad.
Sztuczka z podmianą z Kroku 3 obsługuje cztery litery specjalne, ale nie jest pełną implementacją reguł Unicode dotyczących wielkości liter. Biblioteki oparte na ICU i narzędzia udostępniające ustawienie regionalne pokrywają więcej przypadków brzegowych niż ręcznie napisana nakładka. Jeśli używane przez Ciebie narzędzie ma już poprawną opcję tureckich ustawień regionalnych, skorzystaj z niej i zachowaj tylko zestaw testowy. Nie testowaliśmy, jak Channable, DataFeedWatch ani Productsup obsługują tureckie ustawienia regionalne, więc nie formułujemy w tej sprawie żadnych twierdzeń; uruchom na nich zestaw testowy tak jak na każdym narzędziu. Marketplace'y mają ponadto własne reguły dotyczące tytułów, które omawiamy w naszych poradnikach o feedach Akakçe, Cimri, N11 i ÇiçekSepeti.
FAQ
Dlaczego İZMİR zmienia się w i̇zmi̇r po zamianie na małe litery?
Domyślna zamiana Unicode na małe litery mapuje kropkowe wielkie İ na zwykłe i plus łączącą kropkę nad literą (U+0307). Reguła turecka mapuje İ na zwykłe i. Wynik wygląda na ekranie niemal poprawnie, ale zawiera dodatkowe punkty kodowe.
Czy Google Merchant Center odrzuca tytuły z łączącą kropką?
Nie znaleźliśmy udokumentowanego odrzucenia z tego powodu. Ciąg jest poprawnym UTF-8, więc nie wywołuje błędu „Invalid UTF-8 encoding”. Szkodą są tytuły z błędami i nieudane dopasowania w Twoich własnych narzędziach.
Czy wysyłać tytuły wielkimi literami, małymi czy w title case?
Google zaleca, by nie używać wielkich liter do wyróżniania i umieszczać najważniejsze informacje na początku, ponieważ użytkownicy zwykle widzą tylko pierwsze 70 znaków lub mniej. Wielkość liter jak w zdaniu oraz title case z poprawnymi tureckimi literami spełniają ten wymóg. To, który wariant konwertuje lepiej, trzeba sprawdzić testem na własnym koncie.
Czy w JavaScripcie wystarczy toLowerCase("tr")?
Nie. toLowerCase() nie przyjmuje ustawień regionalnych. Użyj toLocaleLowerCase("tr") i przekaż ustawienia jawnie, ponieważ wartość domyślna zależy od środowiska.
Dlaczego setlocale nie naprawia strtolower w PHP?
Od PHP 8.2 strtolower() ignoruje ustawienia regionalne i konwertuje tylko litery ASCII. mb_strtolower() obsługuje tekst spoza ASCII, ale w naszym teście nadal zwracało i̇stanbul dla İSTANBUL. Zastosuj podmianę znaków z Kroku 3 przed jego wywołaniem.
Czy normalizacja Unicode może usunąć zabłąkaną kropkę?
Nie. W naszym teście NFC zostawiła i plus U+0307 jako dwa punkty kodowe. Usuń ten znak jawnie, a potem ponownie uruchom poprawioną regułę wielkości liter na oryginalnym tekście źródłowym.
Czy dotyczy to arabskiego lub innych języków?
Reguła dotyczy tureckiego i azerbejdżańskiego. Inne języki mają własne problemy z wielkością liter i normalizacją, których ten poradnik nie obejmuje.
Ile wierszy testowych wystarczy?
Tyle, by pokryć każdą turecką literę specjalną i każdą pozycję, jaką może zajmować: początek wyrazu, środek, koniec i sąsiedztwo cyfry. W przypadku większości katalogów to 10–15 tytułów. Dodawaj wiersz za każdym razem, gdy na produkcji pojawi się nowy defekt.
Sprawdź własny feed
Jeśli chcesz zobaczyć, jak Twój obecny feed wypada pod względem jakości tytułów i atrybutów, przepuść go przez nasze bezpłatne narzędzie do audytu feedu produktowego.

Współzałożycielka Feedance, która wykorzystuje ponad 20 lat doświadczenia w projektowaniu produktów i doświadczeń użytkownika, aby kształtować sposób, w jaki katalogi stają się kreacjami. Skupiając się na łączeniu systemów projektowych z automatyzacją, pomaga markom skalować jakość wizualną bez zwiększania nakładu pracy projektowej.
LinkedIn












