# Sorun Giderme

Yaygın besleme hataları
Kaynak: https://selwise.com/docs/product-feeds/troubleshooting

Besleme sorunlarının teşhisi. Belirtiden başlayın.

## Önce çalışma geçmişine bakın

**Katalog → Ürün Beslemesi** (Catalog → Product Feed) → **Analytics** (Analitik) sekmesi, her
senkronizasyonun ne yaptığını gösterir: kaç satır okundu, kaç ürün eklendi, güncellendi, değişmedi,
kaldırıldı ve kaç satır atlandı.

Bu ekranda iki sayı diğerlerinden önemlidir:

- **Rows skipped** (Atlanan satır): beslemede olup ürüne dönüşmeyen satırlar. Ürün kodu,
  başlık ya da fiyat okunamadığında ya da aynı ürün kodu ikinci kez geldiğinde satır
  yayınlanmaz. Bu sayı sıfır değilse
  kataloğunuz beslemenizden küçüktür ve başka hiçbir yerde belirti vermez.
- **Removed** (Kaldırılan): kaynağın artık taşımadığı, bu yüzden silinen ürünler. Bir
  gecede yüzlerce ürünün kaldırılması genellikle beslemenin eksik üretildiği
  anlamına gelir, ürünlerin gerçekten kaldırıldığı değil.

**Değişmeyen** yüksekse her şey yolundadır: Selwise yalnızca gerçekten değişen
ürünleri yazar.

## Durum `error` gösteriyor

Hata mesajı **Overview** sekmesinde **Error Details** kutusunda ve **Analytics** sekmesinde çalışmanın satırında görünür. Yaygın olanlar:

| Mesaj | Sebep | Çözüm |
|---|---|---|
| `The feed URL did not respond within 120 seconds` | Adres yanıt vermiyor veya çok yavaş | Adresi tarayıcıda açıp kontrol edin; dosya üretimini hızlandırın ya da push yöntemine geçin |
| `Feed URL answered 404` / `403` / `500` | Adres yanlış, erişime kapalı ya da sunucu hata veriyor | Adres herkese açık olmalı; kimlik doğrulaması istememeli |
| `The feed URL could not be reached: …` | DNS, sertifika ya da bağlantı hatası | Ayrıntı mesajın devamında yazar |
| `Feed URL answered with an empty body` | Beslemeniz o an üretilmemiş | Zamanlamayı üretim sonrasına alın |
| `Feed size (N bytes) exceeds the maximum` | Dosya 200 MB'ı aşıyor | Katalogu bölün ya da sıkıştırın (`.gz` kabul edilir) |
| `Feed is not parseable XML: …` | Bozuk XML | Dosyayı bir doğrulayıcıdan geçirin |
| `No repeating product element found in the feed` | XML'de ürün olarak tekrar eden bir öğe yok | Ürünler `item`, `product`, `entry`, `offer`, `urun` ya da `record` ile sarılsın — bkz. [Formatlar](/docs/product-feeds/formats) |
| `The CSV feed has a header but no rows` | CSV'de yalnızca başlık satırı var | Dosyanın tam üretildiğini kontrol edin |
| `No usable products in the feed: all N row(s) were rejected. First reason: …` | Satırlar okundu ama hepsi reddedildi | İlk neden (ürün kodu, başlık ya da fiyat) eşleştirmedeki hatayı gösterir |
| `Feed URL must not embed credentials`, `… points at an internal host`, `… uses a restricted port` | Adres güvenlik denetiminden geçmedi | Adresi herkese açık ve kimlik bilgisiz yazın — bkz. [Kurulum](/docs/product-feeds/setup) |
| `LIMIT_REACHED` (`409`) | `products` ya da `product_feeds` limiti dolu | Hesap yöneticinizle konuşun |
| `FEED_SYNC_IN_PROGRESS` (`409`) | Bir senkronizasyon zaten sürüyor | Bitmesini bekleyin |

Başarısız çalışma kataloğu boşaltmaz; bir önceki başarılı çalışmanın ürünleri yerinde kalır.

## Ürün sayısı beklenenden çok düşük

Hiç ürün çıkarılamazsa çalışma `error` ile biter ("No usable products…"). Sayı sıfır değil ama düşükse çalışma başarılı görünür ve geri kalan satırlar atlanmıştır. Neredeyse her zaman alan eşleştirmesi sorunudur:

1. **Field Mapping** (Alan Eşleme) sekmesini açın.
2. **Fields in your feed** (Beslemedeki alanlar) listesine bakın: beslemenizin gerçekten taşıdığı alan
   adları, örnek değerleriyle birlikte orada durur. Bir alana tıklamak onu
   seçili eşleme kutusuna yazar.
3. **Preview**'a (Önizle) basın. Bu, senkronizasyonun kullandığı eşleyicinin aynısını
   gerçek satırlarınız üzerinde çalıştırır ve her alan için kaç satırda değer
   çıktığını gösterir. Zorunlu bir alan `0/10` ise sorun oradadır.
4. Platformunuz hazır eşleme listesindeyse **Hazır eşleme** bölümünden
   uygulayın; elle yazılmış bir ada göre çok daha güvenilirdir. Önizleme yalnızca ilk 10 satırı görür; tüm satırlar için **Rows skipped** sayısına bakın.

Zorunlu satırlar doğruysa dosyanın kök yapısı beklenenden farklıdır — JSON'da ürünler kökte bir dizi ya da `products`, `items`, `results`, `data`, `rows` anahtarlarından birinin altında olmalıdır.

## Ürünler geldi ama görseller yok

| Kontrol | Açıklama |
|---|---|
| Görsel alanı eşlenmiş mi | Field mapping |
| Adresler tam mı | Göreli yol (`/img/1.jpg`) çalışmaz, tam adres gerekir |
| HTTPS mi | HTTP görseller tarayıcıda engellenir |

## Fiyatlar yanlış

| Belirti | Sebep |
|---|---|
| Fiyat 0 görünüyor | Fiyat alanı eşlenmemiş veya metin olarak geliyor |
| İndirim oranı boş / İndirimdekiler şeridi boş | Beslemede ne indirim oranı ne de satış fiyatından yüksek bir liste fiyatı var; liste fiyatı alanının eşlendiğini kontrol edin — bkz. [Alan Eşleştirme](/docs/product-feeds/field-mapping#liste-fiyatı-ve-indirim-oranı) |
| Ürün indirimsiz görünüyor | Liste fiyatı alanı eşlenmemiş ya da satış fiyatıyla aynı |
| Fiyatlar 100 kat büyük | Beslemede kuruş cinsinden geliyor olabilir |

## Bazı ürünler eksik

Her senkronizasyon kaynağı baştan okur ve kaynakta görmediği ürünleri siler.
Bir ürün eksikse:

- O ürün beslemede yok (en yaygın sebep).
- Ürünün zorunlu alanlarından biri boş ve satır atlanmış. Çalışma geçmişindeki
  **Atlanan satır** sayısı bunu gösterir.

Senkronizasyon başarısız olursa katalog **boşaltılmaz**: içindeki her ürün bir
önceki başarılı çalışmanın yayınladığı üründür, yani besleme adresiniz
çalışmazken mağazanız çalışmaya devam eder.

## Stok güncellenmiyor

Selwise stok bilgisini yalnızca senkronizasyon anında alır. Aradaki değişiklikleri bilmez. Aralığı kısaltın ya da push yöntemine geçin.

## Sepete ekleme her seferinde başarısız

Belirti: kart doğru görünüyor, sepete ekle düğmesi tıklanıyor, ürün sepete girmiyor.

Bazı altyapılarda sepetin kabul ettiği kod ürünün kendi kodundan farklıdır. Akinon'da sepet uç noktası numerik `pk` ister ve `sku`'yu reddeder. **Field Mapping** sekmesindeki **Add-to-Cart Code** (Sepete Ekleme Kodu) satırının dolu olduğunu kontrol edin — bkz. [Alan Eşleştirme](/docs/product-feeds/field-mapping).

Besleme kalite puanı bu alanı denetlemez: puan 100 iken de bu satır boş olabilir.

## Öneri şeridi aynı ürünün tonlarıyla doluyor

Belirti: sekiz kartlık şeritte tek ürünün yedi farklı tonu var.

Grup anahtarı okunmuyor. **Field Mapping** sekmesinde **Variant grouping** seçiminin **By group code** olduğunu ve **Product Group Key** satırının beslemenizdeki alanı gösterdiğini kontrol edin, sonra yeniden eşitleyin — bkz. [Varyant Gruplama](/docs/product-feeds/variant-grouping).

## Eşleştirmeyi kaydederken "tanınmayan alan" hatası

Selwise'in okumadığı bir alan adı yazılmış. Hata mesajı hangi ad olduğunu söyler.

En sık görüleni `base_code`: bu ad Selwise'de `itemGroupId`'dir ve **Product Group Key** satırına yazılır. Eski bir eşleştirmede `name`, `oldPrice` veya `link` kaldıysa bunların karşılığı da sırasıyla `title`, `originalPrice` ve `url`'dür.

Ekranda **Unrecognised mapping fields** (Tanınmayan eşleme alanları) uyarısı görüyorsanız o alanlar zaten etkisizdir; kaydettiğinizde temizlenirler.

## Ürün kodları siparişlerle eşleşmiyor

Belirti: ürün bazlı ciro raporları boş, "birlikte alınanlar" hiç çalışmıyor.

Kontrol: **Katalog → Ürün Listesi** (Catalog → Products) sayfasından birkaç ürün kodunu not alın, sonra sipariş verisinde gönderdiğiniz kodlarla karşılaştırın. Önek, sonek veya büyük/küçük harf farkı varsa besleme tarafında düzeltin.

## Senkronizasyon hiç çalışmıyor

Önce şunlara bakın:

1. **Active Method** `URL` mi? Dosya ve API ile beslenen feed zamanlanmaz.
2. **Sync Method** **Scheduled Hours** ise en az bir saat seçili mi? Boşsa feed hiç çalışmaz.
3. Kanal kataloğu başka bir kanaldan okuyor mu? O zaman feed'i yalnızca kaynak kanal senkronize eder.
4. **Background Jobs** sayfasında senkronizasyon işi görünüyor mu — bkz. [Arka Plan İşleri](/docs/operations/background-jobs). İş hiç oluşmuyorsa zamanlama ayarını kontrol edin; zamanlayıcı her 5 dakikada bir bakar.
5. **Analytics** sekmesinde sürmekte olan bir çalışma var mı? Yarım kalan bir çalışma 5 dakika sonra kendiliğinden "Failed" olur.

Saat dilimi konusu için bkz. [Zamanlama](/docs/product-feeds/scheduling).
