Feed Kurtarma: Ham Ulta Verilerini Google Merchant Center XML’ine Dönüştürme
E-ticaret dünyasında ürünlerinizi doğru kitleye ulaştırmanın en etkili yollarından biri Google Alışveriş reklamlarıdır. Ancak bu reklamların temelini oluşturan ürün feed’lerinin kalitesi, kampanya başarınızı doğrudan etkiler. Özellikle Ulta gibi büyük ve dinamik bir e-ticaret sitesinden çekilen ham veriler, genellikle Google Merchant Center (GMC) gereksinimlerini karşılamaktan uzaktır. Bu teknik makale, ham Ulta verilerini temizleyerek, standartlaştırarak ve zenginleştirerek Google Merchant Center’a uygun, hatasız bir XML feed’ine nasıl dönüştüreceğinizi adım adım açıklayacaktır. Bu süreç, “Feed Kurtarma” olarak adlandırılır ve reklam performansınızı maksimize etmek için kritik öneme sahiptir.
Giriş: Ham Veri Sorunsalı ve Feed Kurtarmanın Önemi
Ulta gibi dinamik ve sürekli güncellenen e-ticaret sitelerinden veri çekmek (scraping), pazarlamacılar ve veri analistleri için cazip bir kaynaktır. Ancak bu veriler genellikle ham, yapısal olmayan ve tutarsız bir formatta gelir. Ürün başlıkları eksik olabilir, fiyat bilgileri metin içinde gömülü olabilir, stok durumu net olmayabilir veya görsel URL’leri geçersiz çıkabilir. Bu tür “ham veri” sorunları, Google Merchant Center gibi platformlara doğrudan yüklenemez ve bir dizi dönüşüm sürecinden geçirilmesi gerekir. İşte bu noktada “Feed Kurtarma” devreye girer.
Ulta Verilerinin Özellikleri
Ulta’nın web sitesi, kullanıcı deneyimini zenginleştirmek için dinamik içerik yükleme, JavaScript tabanlı etkileşimler ve bazen karmaşık HTML yapıları kullanır. Bu durum, otomatik veri çekme (scraping) süreçlerini zorlaştırabilir. Çekilen veriler genellikle aşağıdaki sorunları barındırır:
- Tutarsız HTML Yapıları: Farklı ürün sayfalarında aynı bilgi için farklı etiketler veya sınıflar kullanılabilir.
- Dinamik Yüklenen İçerik: Fiyat, stok durumu gibi kritik bilgiler sayfa yüklendikten sonra JavaScript ile getirilebilir, bu da basit HTTP istekleriyle çekilemez.
- Eksik veya Yanlış Bilgiler: Bazı ürünlerin GTIN’i (Global Ticari Ürün Numarası) olmayabilir, açıklamalar yetersiz kalabilir veya görsellerin çözünürlüğü düşük olabilir.
- Metinsel Fiyatlar: Fiyatlar “24.99 $” gibi string formatında olabilir ve sayısal işleme uygun olmayabilir.
Neden Feed Kurtarma?
Kaliteli bir ürün feed’i, Google Alışveriş reklamlarının temelidir. İyi optimize edilmiş bir feed, ürünlerinizin doğru aramalarda görünmesini sağlar, tıklama oranlarını (CTR) artırır ve dönüşüm oranlarını yükseltir. Feed kurtarma süreci, bu ham veriyi işleyerek pazarlama hedeflerinize ulaşmanızı sağlayan temiz, yapılandırılmış ve optimize edilmiş bir feed’e dönüştürür. Aksi takdirde, eksik veya hatalı verilerle oluşturulan feed’ler, Google tarafından reddedilir veya düşük performans gösterir.
Google Merchant Center ve Feed Kalitesi
Google Merchant Center, ürün feed’leri için katı kurallar ve gereksinimler belirlemiştir. Bu kurallara uyulmaması, ürünlerinizin onaylanmamasına, reklamlarınızın yayınlanmamasına veya hesabınızın askıya alınmasına yol açabilir. Feed kurtarma, bu gereksinimleri karşılamak ve potansiyel reddedilme nedenlerini ortadan kaldırmak için zorunludur. Kaliteli bir feed, aynı zamanda Google’ın ürünlerinizi daha iyi anlamasına ve ilgili aramalarda göstermesine yardımcı olur.
Veri Toplama ve İlk Temizlik Adımları
Feed kurtarma sürecinin ilk adımı, ham veriyi toplamak ve ön temizliğini yapmaktır. Bu aşama, sonraki adımların başarısı için kritik bir temel oluşturur.
Scraping Yöntemleri ve Araçları
Ulta gibi bir siteden veri çekmek için çeşitli yöntemler ve araçlar mevcuttur:
- Python Kütüphaneleri:
- Scrapy: Büyük ölçekli, asenkron scraping projeleri için güçlü bir framework.
- BeautifulSoup ve Requests: Daha küçük ölçekli projeler veya belirli sayfaları çekmek için ideal, kullanımı kolay kütüphaneler.
- Selenium veya Playwright: JavaScript ile dinamik olarak yüklenen içerikleri çekmek için bir web tarayıcısını simüle eden araçlar.
- Node.js Kütüphaneleri: Puppeteer veya Cheerio, JavaScript tabanlı sitelerden veri çekmek için popüler seçeneklerdir.
- Ticari Scraping Araçları: Bright Data, Scrape.it gibi platformlar, proxy yönetimi ve ölçeklenebilirlik gibi avantajlar sunar.
Hangi yöntemin seçileceği, projenin ölçeğine, bütçeye ve teknik bilgi birikimine bağlıdır. Dinamik içerik nedeniyle genellikle Selenium veya Puppeteer gibi tarayıcı otomasyon araçları tercih edilir.
Ham Verinin Yapısı
Scraping işlemi sonucunda elde edilen ham veri genellikle JSON, CSV veya direkt HTML çıktısı şeklinde olabilir. Bu veriler, genellikle ana ürün bilgileri (başlık, fiyat, açıklama, görsel URL’si), SKU, marka ve kategori gibi temel alanları içerir. Ancak bu alanlar, yukarıda belirtildiği gibi tutarsız veya eksik olabilir.
Temel Veri Temizliği
Ham veriyi topladıktan sonra, ilk temizlik adımları uygulanmalıdır. Bu adımlar, veriyi daha işlenebilir hale getirir:
- Boş Değerleri Doldurma: Eksik
descriptionveyabrandalanları için varsayılan değerler atama veya diğer kaynaklardan tamamlama. - Gereksiz Karakterleri Kaldırma: Fiyatlardan para birimi sembollerini, başlık ve açıklamalardan HTML etiketlerini veya özel karakterleri temizleme.
- Veri Tiplerini Düzeltme: Fiyat string’lerini float’a, stok durumunu boolean’a veya belirli bir string formatına dönüştürme.
- URL Doğrulama: Görsel ve ürün linklerinin geçerli ve erişilebilir olup olmadığını kontrol etme.
Örnek: Fiyat Verisi Temizliği (Python)
import re
def clean_price(price_str):
if not price_str:
return None
# Para birimi sembollerini, virgülleri kaldır ve noktaya dönüştür
cleaned = re.sub(r'[^\d.,]+', '', price_str).replace(',', '.')
try:
return float(cleaned)
except ValueError:
return None
# Kullanım örneği
raw_price = "$24.99 USD"
cleaned_price = clean_price(raw_price) # Sonuç: 24.99
raw_price_turkish = "₺129,90"
cleaned_price_turkish = clean_price(raw_price_turkish) # Sonuç: 129.90
Veri Standardizasyonu ve Zenginleştirme
Temel temizlikten sonra, veriyi Google Merchant Center'ın beklentilerine uygun hale getirmek ve reklam performansını artırmak için standardizasyon ve zenginleştirme adımları gelir.
Ürün Başlıklarını Optimize Etme
GMC'de ürün başlıkları, ürününüzün aramalarda görünmesi için en önemli faktörlerden biridir. Ham başlıklara genellikle marka, model, renk, boyut gibi kritik bilgiler eksik olabilir. Başlıklar, kullanıcıların arama sorgularına uygun olacak şekilde yeniden düzenlenmelidir.
Örnek Başlık Optimizasyonu:
- Ham Başlık: "Ruj"
- Optimize Edilmiş Başlık: "MAC Ruby Woo Mat Ruj - Kırmızı, 3g"
Optimal başlık formatı genellikle: [Marka] [Ürün Adı] [Anahtar Özellik 1] [Anahtar Özellik 2] şeklindedir.
Açıklamaları Zenginleştirme
Ürün açıklamaları, ürününüz hakkında daha fazla bilgi sağlar ve potansiyel müşterilerin satın alma kararını etkiler. Açıklamalar, ürünün faydalarını, temel özelliklerini ve anahtar kelimeleri içermelidir. HTML etiketlerinden arındırılmış, okunaklı ve bilgilendirici olmalıdır.
Kategori Eşleştirme
Ulta'nın kendi iç kategori yapısı, Google'ın standart ürün kategorileriyle (Google Product Categories - GPC) genellikle uyuşmaz. Ürünlerinizin doğru kategoride listelenmesi için Ulta kategorilerini GPC'ye eşleştirmek zorunludur. Bu, manuel olarak veya bir eşleştirme tablosu oluşturarak yapılabilir.
Örnek Kategori Eşleştirme Tablosu:
| Ulta Kategori | Google Ürün Kategorisi (GPC) |
|---|---|
| Makyaj > Dudaklar > Rujlar | Giyim ve Aksesuarlar > Kozmetik > Makyaj > Dudak Makyajı > Rujlar |
| Cilt Bakımı > Nemlendiriciler | Sağlık ve Güzellik > Kişisel Bakım > Cilt Bakımı > Nemlendiriciler |
| Saç Bakımı > Şampuanlar | Sağlık ve Güzellik > Kişisel Bakım > Saç Bakımı > Şampuanlar |
Görsel URL'leri ve Stok Durumu
Görsel URL'lerinin geçerli, erişilebilir ve yüksek çözünürlüklü olması gerekir. Ayrıca, ürünlerin stok durumunun (in stock, out of stock, preorder) doğru bir şekilde belirtilmesi, Google'ın reklamları doğru zamanda göstermesi için önemlidir. Stok durumu bilgisi genellikle anlık olarak çekilmeli veya düzenli olarak güncellenmelidir.
Google Merchant Center Gereksinimlerini Anlama
Google Merchant Center, ürün feed'leri için belirli alanları zorunlu kılar ve bazılarını da önerir. Bu gereksinimleri tam olarak anlamak, feed'inizin onaylanması için hayati öneme sahiptir.
Zorunlu Alanlar
Her ürün için aşağıdaki alanlar kesinlikle sağlanmalıdır:
id: Her ürün için benzersiz bir kimlik.title: Ürün başlığı (optimize edilmiş hali).description: Ürün açıklaması (zenginleştirilmiş hali).link: Ürünün Ulta'daki doğrudan URL'si.image_link: Ana ürün görselinin URL'si.price: Ürünün güncel fiyatı (örn: "24.99 USD").availability: Stok durumu (in stock,out of stock,preorder).brand: Ürünün markası.gtin: Global Ticari Ürün Numarası (UPC, EAN, ISBN, JAN) veyampn(Üretici Parça Numarası) vebrandkombinasyonu. Özel ürünler içinidentifier_existsalanıfalseolarak ayarlanabilir.condition: Ürünün durumu (new,refurbished,used).
Önerilen Alanlar
Bu alanlar zorunlu olmasa da, ürünlerinizin performansını artırmak ve daha spesifik aramalarda görünmesini sağlamak için şiddetle tavsiye edilir:
google_product_category: Google Ürün Kategorisi.product_type: Kendi iç kategori yapınız.item_group_id: Varyant ürünleri (farklı renk, boyut) gruplamak için.color,size,material,pattern: Ürün özelliklerini detaylandırmak için.shipping,tax: Gönderim ve vergi bilgileri.custom_label_0,custom_label_1, vb.: Özel etiketler, kampanya yönetimi için esneklik sağlar.
Veri Formatı Kuralları
GMC, her alan için belirli format kuralları belirler. Örneğin, fiyatlar sayısal bir değer ve para birimi koduyla (örn: "24.99 USD") belirtilmelidir. URL'ler geçerli olmalı ve HTTP/HTTPS protokolünü kullanmalıdır. Başlıklar ve açıklamalar belirli karakter limitlerine sahip olabilir. Bu kurallara uymak, feed'inizin sorunsuz bir şekilde işlenmesini sağlar.
XML Yapılandırması ve Dönüşüm Süreci
Tüm veriler temizlenip standartlaştırıldıktan sonra, sıra bu veriyi Google Merchant Center'ın kabul ettiği XML formatına dönüştürmeye gelir. GMC, Atom 1.0 veya RSS 2.0 tabanlı XML şemalarını destekler.
XML Şeması
Google Alışveriş feed'leri için genellikle Atom 1.0 şeması kullanılır. Bu şema, ürün bilgilerini belirli etiketler altında yapılandırır ve Google'ın özel uzantılarını (g: öneki ile belirtilenler) kullanır.
XML Oluşturma Adımları
- Kök Element ve Namespace Tanımları: XML dosyasının başında
veyakök elementi ve gerekli namespace (ad alanı) tanımları yer alır. Google'ın özel etiketleri içinxmlns:g="http://base.google.com/ns/1.0"ad alanı eklenmelidir. - Kanal Bilgileri: Feed'in genel bilgilerini içeren
,,gibi etiketler eklenir. - Her Ürün İçin
veyaElementleri: Her bir ürün,içinde bir(Atom için) veyaiçinde bir(RSS için) elementi olarak temsil edilir. - GMC Alanlarını Ekleme: Her
veyaiçine, daha önce hazırladığınız tüm zorunlu ve önerilen GMC alanları,g:önekiyle (örn:,) eklenir.
Python ile XML Oluşturma Örneği (lxml kütüphanesi ile):
from lxml import etree
def create_gmc_xml(products_data):
# Google Merchant Center namespace
ns_g = "http://base.google.com/ns/1.0"
# Atom 1.0 namespace
ns_atom = "http://www.w3.org/2005/Atom"
# Kök elementi oluştur
root = etree.Element("feed", nsmap={'g': ns_g, None: ns_atom})
# Feed genel bilgilerini ekle
title = etree.SubElement(root, "title")
title.text = "Ulta Ürün Feed'i"
link = etree.SubElement(root, "link", href="https://www.example.com", rel="self")
updated = etree.SubElement(root, "updated")
updated.text = "2023-10-27T10:00:00Z" # Son güncelleme tarihi
for product in products_data:
entry = etree.SubElement(root, "entry")
# Zorunlu alanlar
etree.SubElement(entry, f"{{{ns_g}}}id").text = str(product['id'])
etree.SubElement(entry, f"{{{ns_g}}}title").text = product['title']
etree.SubElement(entry, f"{{{ns_g}}}description").text = product['description']
etree.SubElement(entry, f"{{{ns_g}}}link").text = product['link']
etree.SubElement(entry, f"{{{ns_g}}}image_link").text = product['image_link']
etree.SubElement(entry, f"{{{ns_g}}}price").text = f"{product['price']:.2f} USD"
etree.SubElement(entry, f"{{{ns_g}}}availability").text = product['availability']
etree.SubElement(entry, f"{{{ns_g}}}brand").text = product['brand']
etree.SubElement(entry, f"{{{ns_g}}}condition").text = product['condition']
# GTIN veya MPN/brand
if 'gtin' in product and product['gtin']:
etree.SubElement(entry, f"{{{ns_g}}}gtin").text = product['gtin']
elif 'mpn' in product and product['mpn'] and 'brand' in product and product['brand']:
etree.SubElement(entry, f"{{{ns_g}}}mpn").text = product['mpn']
# Brand zaten eklenmişti
else:
etree.SubElement(entry, f"{{{ns_g}}}identifier_exists").text = "false"
# Önerilen alanlar (örnek)
if 'google_product_category' in product and product['google_product_category']:
etree.SubElement(entry, f"{{{ns_g}}}google_product_category").text = product['google_product_category']
if 'color' in product and product['color']:
etree.SubElement(entry, f"{{{ns_g}}}color").text = product['color']
# Diğer alanlar da benzer şekilde eklenebilir
# XML'i string olarak döndür
return etree.tostring(root, pretty_print=True, encoding='utf-8', xml_declaration=True).decode()
# Örnek kullanım (gerçek verilerle değiştirilmeli)
# products = [
# {
# 'id': 12345,
# 'title': 'MAC Ruby Woo Mat Ruj - Kırmızı, 3g',
# 'description': 'MAC Cosmetics\'in ikonik Ruby Woo mat rujunu keşfedin. Yoğun pigmentli, uzun süre kalıcı formül.',
# 'link': 'https://www.ulta.com/ruby-woo-matte-lipstick',
# 'image_link': 'https://www.ulta.com/images/ruby-woo.jpg',
# 'price': 24.00,
# 'availability': 'in stock',
# 'brand': 'MAC Cosmetics',
# 'condition': 'new',
# 'gtin': '773602061030',
# 'google_product_category': 'Giyim ve Aksesuarlar > Kozmetik > Makyaj > Dudak Makyajı > Rujlar',
# 'color': 'Kırmızı'
# }
# ]
# xml_output = create_gmc_xml(products)
# print(xml_output)
Doğrulama, Hata Ayıklama ve Optimizasyon
XML feed'i oluşturulduktan sonra, Google Merchant Center'a yüklemeden önce ve yükledikten sonra dikkatlice doğrulanmalı ve hatalar ayıklanmalıdır.
GMC Feed Tanılama
Google Merchant Center, yüklediğiniz feed'i otomatik olarak tarar ve "Teşhis" bölümünde detaylı bir rapor sunar. Bu rapor, feed'inizdeki hataları, uyarıları ve iyileştirme fırsatlarını gösterir.
- Hatalar: Ürünlerin onaylanmasını engelleyen kritik sorunlardır (örn: eksik zorunlu alanlar, geçersiz fiyat formatı).
- Uyarılar: Ürünler onaylansa da performansını etkileyebilecek veya gelecekte hataya dönüşebilecek sorunlardır (örn: düşük çözünürlüklü görsel, eksik önerilen alan).
- Fırsatlar: Feed'i daha da optimize etmek için önerilerdir.
Hata Türleri ve Çözümleri
- Eksik Alanlar: En yaygın hatalardan biridir. Hangi alanların eksik olduğunu belirleyin ve veri çekme veya temizleme aşamalarını kontrol ederek bu bilgileri ekleyin.
- Geçersiz Değerler: Fiyat formatı, URL geçerliliği, stok durumu metni gibi değerlerin GMC kurallarına uygun olduğundan emin olun.
- Görsel Hataları: Görsel URL'lerinin erişilebilir, doğru formatta ve minimum boyut gereksinimlerini karşıladığından emin olun.
- GTIN Sorunları: GTIN'ler benzersiz olmalı ve doğru formatta girilmelidir. Eğer GTIN yoksa,
mpnvebrandkullanın veyaidentifier_existsalanınıfalseolarak ayarlayın. - Kategori Eşleştirme Hataları: Google Ürün Kategorileri'nin doğru ve en spesifik seviyede eşleştiğinden emin olun.
Performans Optimizasyonu
Feed'i yalnızca hatasız hale getirmek yeterli değildir; aynı zamanda performansını da optimize etmelisiniz:
- Başlık ve Açıklama Optimizasyonu: Anahtar kelimeleri ve ürünün en çekici özelliklerini içeren başlıklar ve açıklamalar kullanın.
- Özel Etiketler (Custom Labels): Kampanya yönetimi için özel etiketler oluşturun. Örneğin, "yeni gelenler", "çok satanlar", "indirimli ürünler" gibi etiketlerle ürün grupları oluşturabilirsiniz.
- Promosyonlar: Fiyat indirimleri veya özel teklifler için promosyon feed'lerini kullanın.
A/B Testleri
Farklı başlık formatları, açıklamalar veya görsellerin performansını ölçmek için A/B testleri yapabilirsiniz. Bu, hangi elementlerin daha yüksek tıklama ve dönüşüm oranları sağladığını anlamanıza yardımcı olur.
Sürekli Bakım ve Otomasyon
Feed kurtarma tek seferlik bir işlem değildir. Ürün bilgilerinin sürekli güncel kalması ve feed'in hatasız çalışması için düzenli bakım ve otomasyon şarttır.