Cantürk Çelikok
Tüm yazılarGoogle Hizmetleri

Google Merchant Center'da ürün yayınlama: ekleme, onay ve feed

Cantürk Çelikok • • 5 dk okuma

Google Merchant Center'da ürün yayınlama: ekleme, onay ve feed

Ürün eklendikten sonra ne oluyor?

Merchant Center'a bir ürün eklediğinizde o ürün hemen Google'da görünmüyor. Önce Google ürünü inceliyor, ürün verisinin eksiksiz olup olmadığına ve politikalara uyup uymadığına bakıyor. Onay gelirse ürün ücretsiz listelemelerde çıkmaya başlıyor, reklam hesabı bağlıysa reklamlarda da kullanılabiliyor. Onay gelmezse ürün panelde duruyor ama kimse onu görmüyor.

Merchant Center'ın ne olduğunu ve hesap açmadan önce sitenizde neyin hazır olması gerektiğini önceki yazımda anlatmıştım. Bu yazıda bir sonraki adıma geçiyorum: ürünleri Merchant Center'a nasıl eklediğinizi, onay sürecinin nasıl işlediğini ve ürünlerin yayında nasıl tutulacağını örnek kodlarla anlatıyorum.

Ürün eklemenin yolları

Merchant Center'da ürünler Ürünler bölümünden ekleniyor. Sol menüde "Products & store" altındaki Products sayfasına girip Add products düğmesine bastığınızda hangi yöntemi kullanacağınızı seçiyorsunuz. Daha önce bir kaynak eklediyseniz, yenisi için açılır menüden Add another product source seçeneğini kullanıyorsunuz.

Sitenizden otomatik ekleme. Ürün sayfalarınızda doğru Product yapılandırılmış verisi varsa, Google ürünleri sitenizi tarayarak kendisi ekleyebiliyor. Hesap açarken bu seçenek doğrudan öneriliyor. Az emek istiyor ama ürün verisi üzerindeki kontrolünüz daha az.

Google E-Tablolar. Google'ın hazır şablonunu kullanıp ürünleri bir tabloya giriyorsunuz. Ürün sayısı az olan ve sitesini elle yöneten mağazalar için en pratik yol.

Dosya ve planlı getirme. Ürünlerinizi TSV ya da XML dosyası olarak hazırlıyorsunuz. Dosyayı elle yükleyebileceğiniz gibi, sitenizde sabit bir adreste yayınlayıp Google'ın düzenli olarak indirmesini de sağlayabiliyorsunuz.

Platform entegrasyonu. Shopify gibi bir altyapı kullanıyorsanız, mağazayı Merchant Center'a bağladığınızda ürünler otomatik olarak senkronize ediliyor.

Merchant API. Kendi e-ticaret yazılımınız varsa, ürün eklendiğinde ya da değiştiğinde Google'a doğrudan bildirebiliyorsunuz. Fiyatı ve stoğu sık değişen mağazalar için en güncel yol bu.

Google E-Tablolar ile ilk ürünleri eklemek

Elinizde birkaç ürün varsa ve feed altyapısı kurmadan başlamak istiyorsanız, en hızlı yol E-Tablolar şablonu.

  1. Products sayfasında Add products düğmesine basın.
  2. Use Google Sheets seçeneğini, ardından Use template seçeneğini seçin.
  3. Açılan tabloya ürün bilgilerinizi girin. Şablonun 2 ile 5 arasındaki satırları açıklama ve örnek içeriyor, bunları silin.
  4. Merchant Center'a dönüp senkronizasyon zamanlamasını ayarlayın ve Continue ile devam edin.

Varsayılan senkronizasyon aralığı 24 saat. Tabloda bir fiyatı değiştirdiğinizde Merchant Center bunu bir sonraki senkronizasyonda alıyor. Bu yüzden kampanya gibi aynı gün içinde fiyatın değiştiği durumlarda zamanlamayı göz önünde bulundurmak gerekiyor.

Tablonun sütun başlıkları feed alan adlarıyla aynı:

id	title	description	link	image_link	availability	price	brand	gtin	condition
KLV-1001	Mekanik Klavye, Kahverengi Switch, Türkçe Q	Alüminyum kasalı, çıkarılabilir kablolu mekanik klavye.	https://ornekmagaza.com/urun/mekanik-klavye	https://ornekmagaza.com/img/klv-1001.jpg	in_stock	1299.00 TRY	OrnekMarka	8690000000012	new

Feed'i veritabanından otomatik üretmek

Ürün sayısı arttığında tabloyu elle güncel tutmak zorlaşıyor. Ürünler zaten bir veritabanında duruyorsa, feed'i oradan üreten küçük bir betik yazmak daha sağlam bir yöntem. Aşağıdaki örnek TypeScript ve Prisma ile yazıldı. Modeldeki alan adları örnek amaçlı, kendi şemanıza göre değiştirmeniz gerekiyor.

// feed-uret.ts: yayındaki ürünlerden Google Merchant Center için XML feed üretir
import { writeFile } from "node:fs/promises";
import { PrismaClient } from "@prisma/client";
 
const prisma = new PrismaClient();
const SITE = "https://ornekmagaza.com";
 
// Ürün adı ya da açıklamasındaki & ve < gibi karakterler XML'i bozmasın
function xmlKacis(metin: string): string {
  return metin
    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;")
    .replace(/"/g, "&quot;")
    .replace(/'/g, "&apos;");
}
 
// Tutarlar veritabanında kuruş cinsinden tamsayı olarak tutuluyor
function fiyat(kurus: number): string {
  return `${(kurus / 100).toFixed(2)} TRY`;
}
 
async function main() {
  const urunler = await prisma.product.findMany({ where: { yayinda: true } });
 
  const itemlar = urunler
    .map(
      (u) => `
    <item>
      <g:id>${xmlKacis(u.sku)}</g:id>
      <g:title>${xmlKacis(u.ad)}</g:title>
      <g:description>${xmlKacis(u.aciklama)}</g:description>
      <g:link>${SITE}/urun/${u.slug}</g:link>
      <g:image_link>${xmlKacis(u.gorselUrl)}</g:image_link>
      <g:availability>${u.stok > 0 ? "in_stock" : "out_of_stock"}</g:availability>
      <g:price>${fiyat(u.fiyatKurus)}</g:price>
      ${u.marka ? `<g:brand>${xmlKacis(u.marka)}</g:brand>` : ""}
      ${u.barkod ? `<g:gtin>${u.barkod}</g:gtin>` : ""}
      <g:condition>new</g:condition>
    </item>`,
    )
    .join("");
 
  const xml = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
  <channel>
    <title>Örnek Mağaza</title>
    <link>${SITE}</link>
    <description>Örnek Mağaza ürün listesi</description>${itemlar}
  </channel>
</rss>`;
 
  await writeFile("public/feed/google.xml", xml, "utf-8");
  console.log(`${urunler.length} ürün feed'e yazıldı.`);
}
 
main().finally(() => prisma.$disconnect());

Birkaç ayrıntı bilerek böyle yazıldı. Marka ya da barkod yoksa alan hiç yazılmıyor. Google, markası olmayan bir üründe alanın "Yok" gibi bir değerle doldurulmasını istemiyor. Stok durumu veritabanındaki stok sayısından hesaplanıyor. Böylece tükenen bir ürün bir sonraki feed'de kendiliğinden out_of_stock oluyor. Metinler XML'e yazılmadan önce kaçışlanıyor. "Kablo & Adaptör" gibi bir ürün adı kaçışlanmazsa bütün dosya geçersiz hale geliyor.

Betiği her gece çalıştırmak için sunucunuzda bir cron satırı yeterli:

# Her gece 03:00'te feed'i yeniden üret
0 3 * * * cd /var/www/ornekmagaza && npx tsx scripts/feed-uret.ts >> logs/feed.log 2>&1

Dosya https://ornekmagaza.com/feed/google.xml adresinde yayına çıktıktan sonra Merchant Center'da ürün kaynağı olarak bu adresi verip planlı getirme zamanlamasını, betiğin çalıştığı saatten sonraya ayarlıyorsunuz.

Ürün durumları ne anlama geliyor?

Ürünleri ekledikten sonra Products sayfasındaki All products sekmesinde her ürünün yanında bir durum görünüyor.

İnceleniyor (Under review). Google ürünü kontrol ediyor. Google'a göre bu inceleme ücretsiz listeleme ve Alışveriş reklamları için genelde 3 ile 5 iş günü sürüyor. Bu süre çok aşılırsa sitenizin, iletişim bilgilerinizin ve ürün verinizin politikalara uyduğunu kontrol edip Merchant Center'dan inceleme talebi gönderebiliyorsunuz.

İşleniyor (Processing). Bir ürünü düzenledikten sonra Google değişikliği uyguluyor. Bu genelde 15 dakika içinde bitiyor.

Onaylandı (Approved). İnceleme tamamlandı ve ürün Google'da gösteriliyor.

Sınırlı (Limited). Ürün yalnızca bazı durumlarda gösteriliyor. Belirli ülkelerde çıkmıyor olabilir ya da verisinin bir kısmı gizleniyor olabilir. Nedeni Needs attention sekmesinde yazıyor.

Onaylanmadı (Not approved). Ürün bir politika ihlali ya da veri kalitesi sorunu yüzünden gösterilemiyor. Sorunları Fix errors seçeneğinden ya da Needs attention sekmesinden görüp düzeltebiliyorsunuz.

Durumdan ayrı olarak bir de görünürlük bilgisi var. Bir ürünü onaylı olsa bile elle gizleyebiliyorsunuz. Gizlenen ürünler 14 gün sonra otomatik olarak arşive taşınıyor ve Google'da gösterilmiyor, ama Archive klasöründen geri alınabiliyor.

Ürünleri yayında tutmak: 30 gün kuralı

Onay almak işin bir kısmı. Bir ürün 30 gün boyunca güncellenmezse Merchant Center onun üzerine Needs update uyarısı koyuyor. Bu ayrı bir durum değil, mevcut durumun üstüne eklenen bir işaret. Uyarı göz ardı edilirse ürünün görünürlüğü düşebiliyor ve sonunda Merchant Center'dan kaldırılabiliyor.

Ürünleri güncel tutmanın yolu, kaynağın düzenli olarak yeniden gönderilmesi. Planlı getirme ya da E-Tablolar senkronizasyonu kullanıyorsanız bu kendiliğinden oluyor. Dosyayı elle yüklediyseniz, 30 gün dolmadan yeniden yüklemeniz gerekiyor. Ürün sayfalarınızda doğru yapılandırılmış veri varsa Google ürünleri sitenizden kontrol edip kendisi de yenileyebiliyor.

Feed ile sayfa arasındaki fiyat farkını yakalamak

Ürünlerin onaylanmamasının en sık nedeni, feed'deki fiyat ya da stok bilgisinin sayfadakinden farklı olması. Bunu Google'dan önce yakalamak için ürün sayfalarındaki Product şemasını okuyup feed'deki fiyatla karşılaştıran basit bir kontrol yazılabilir:

// fiyat-kontrol.ts: feed fiyatı ile ürün sayfasındaki şema fiyatını karşılaştırır (Node 18+)
const urunler = [
  { link: "https://ornekmagaza.com/urun/mekanik-klavye", feedFiyat: 1299.0 },
  { link: "https://ornekmagaza.com/urun/kablosuz-mouse", feedFiyat: 649.9 },
];
 
async function main() {
  for (const u of urunler) {
    const html = await (await fetch(u.link)).text();
    const blok = html.match(
      /<script type="application\/ld\+json">([\s\S]*?)<\/script>/,
    );
 
    if (!blok) {
      console.log(`${u.link}: Product şeması bulunamadı`);
      continue;
    }
 
    const sayfaFiyat = Number(JSON.parse(blok[1]).offers?.price);
    if (sayfaFiyat !== u.feedFiyat) {
      console.log(`${u.link}: feed ${u.feedFiyat}, sayfa ${sayfaFiyat}`);
    }
  }
}
 
main();

Bu örnek, sayfada tek bir JSON-LD bloğu olduğunu varsayıyor. Sayfanızda birden fazla blok varsa (örneğin ayrıca bir Organization şeması), @type değeri Product olanı seçecek şekilde genişletmeniz gerekiyor. Gerçek kullanımda ürün listesini elle yazmak yerine aynı veritabanından çekmek daha mantıklı.

Ücretsiz listelemeden reklama geçmek

Ürünleriniz onaylandıktan sonra ücretsiz listelemelerde nasıl performans gösterdiğini Merchant Center'daki raporlardan izleyebiliyorsunuz. Reklam vermeye karar verdiğinizde Merchant Center'ı bir Google Ads hesabına bağlıyorsunuz. Reklamlar, Merchant Center'daki aynı onaylı ürün verisini kullanıyor. Bu yüzden reklama geçmeden önce Needs attention sekmesinin temiz olması, bütçenin onaylanmayan ürünler yüzünden boşa gitmemesini sağlıyor.

Menü adları, ürün durumları ve süreler 8 Kasım 2026 tarihinde Google Merchant Center yardım sayfalarından kontrol edildi. Google arayüzü sık güncellediği için menü adları değişebilir.

Cantürk Çelikok

Ankara'da freelance full stack yazılım geliştirici. PlusTurk, Nerdesin, Ayda POS ve Songnaria Coffee gibi canlı ürünleri uçtan uca geliştirdi; burada bu projelerden çıkan notları paylaşıyor.

Hakkımda