אנו יודעים שמודעות שופינג יכולות לייצר עד 50% מההכנסות במסחר אלקטרוני, אבל רק עם פיד תקין. בפועל, כל מוצר שלישי נדחה עקב שגיאות במאפיינים, וכל חברה שנייה חווה ירידה בתנועה לאחר עדכון קטלוג. אנו מפתחים מחוללי פידים עבור Google Merchant Center שעוברים את האימות של Google בניסיון הראשון. הניסיון שלנו כולל למעלה מ-30 פרויקטים עבור חנויות עם קטלוגים של עד 500,000 פריטים. אנו משתמשים בטכנולוגיות: Laravel 11, PostgreSQL, Redis לקישוריות, ומגדירים cron jobs או webhooks לעדכונים אוטומטיים. כתוצאה מכך, הפיד שלך תמיד מעודכן, וקמפיין השופינג שלך מניב המרות מקסימליות.
Google Merchant Center מקבל נתונים רק בפורמטים מוגדרים בהחלט—XML (RSS 2.0 או Atom 1.0) או דרך Content API. כל סטייה קלה מהמפרט מובילה לדחיית מוצרים ולאובדן תנועה ממודעות שופינג. לפי Google Product Data Specification, המאפיינים הנדרשים כוללים id, title, description, link, image_link, price ו-availability.
אילו בעיות פותר מחולל הפידים של Google Merchant Center?
-
אימות שגוי. חסרים מאפיינים נדרשים (למשל,
gtinלמוצרים ממותגים) מובילים לדחיית כל הקבוצה. פתרון: מיפוי שדות לפי המפרט. - פיד מיושן. עדכון ידני של XML כאשר מחירים או מלאי משתנים אינו מעשי. סקריפט ה-Laravel שלנו יוצר את הפיד בלוח זמנים או לפי טריגר.
- אינדוקס איטי. עבור קטלוגים >100,000 פריטים, אנו משתמשים בפידים משלימים—זה מאיץ את העדכונים ב-30%.
כיצד אנו יוצרים את הפיד: תהליך וטכנולוגיות
- אנו מנתחים את מבנה הקטלוג וממפים שדות למאפייני GMC.
- אנו יוצרים את פיד ה-XML באמצעות מחולל PHP (ראה קוד בהמשך).
- אנו מגדירים cron job לעדכונים.
- אנו רושמים את הפיד בחשבון Merchant Center ומריצים אבחון ראשוני.
מאפיינים נדרשים ומומלצים
| מאפיין | דרישה | הערה |
|---|---|---|
id |
נדרש | SKU ייחודי, לא ניתן לשינוי |
title |
נדרש | עד 150 תווים, ללא אותיות גדולות בלבד |
description |
נדרש | עד 5000 תווים |
link |
נדרש | כתובת URL קנונית של המוצר |
image_link |
נדרש | HTTPS, מינימום 100×100 פיקסלים |
price |
נדרש | פורמט: |
19.99 USD |
נדרש | availability / in_stock / out_of_stock |
preorder |
מומלץ | נדרש להלבשה, אלקטרוניקה |
brand |
מומלץ | משפר את ציון האיכות |
gtin |
מומלץ | מזהה מספרי מטקסונומיית Google |
google_product_category |
אופציונלי | פילוח ב-Smart Shopping |
מבנה פיד XML
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
<title>Название магазина</title>
<link>https://example.com</link>
<description>Каталог товаров</description>
<item>
<g:id>SKU-12345</g:id>
<g:title>Кроссовки Nike Air Max 270 мужские чёрные</g:title>
<g:description>Беговые кроссовки с технологией Air Max...</g:description>
<g:link>https://example.com/products/nike-air-max-270</g:link>
<g:image_link>https://cdn.example.com/products/nike-270-black.jpg</g:image_link>
<g:availability>in_stock</g:availability>
<g:price>8990.00 RUB</g:price>
<g:brand>Nike</g:brand>
<g:gtin>0012345678905</g:gtin>
<g:google_product_category>187</g:google_product_category>
<g:condition>new</g:condition>
<g:custom_label_0>sale</g:custom_label_0>
</item>
</channel>
</rss> מחולל ב-PHP/Laravel
class GoogleMerchantFeedGenerator {
public function generate(): string {
$products = Product::with(['images', 'category', 'brand'])
->where('is_active', true)
->where('stock', '>', 0)
->cursor(); // cursor() для больших каталогов — не грузит RAM
$xml = new \XMLWriter();
$xml->openMemory();
$xml->setIndent(true);
$xml->startDocument('1.0', 'UTF-8');
$xml->startElement('rss');
$xml->writeAttribute('xmlns:g', 'http://base.google.com/ns/1.0');
$xml->writeAttribute('version', '2.0');
$xml->startElement('channel');
foreach ($products as $product) {
$this->writeItem($xml, $product);
}
$xml->endElement(); // channel
$xml->endElement(); // rss
return $xml->outputMemory();
}
private function writeItem(\XMLWriter $xml, Product $product): void {
$xml->startElement('item');
$xml->writeElement('g:id', $product->sku);
$xml->writeElement('g:title', mb_substr($product->name, 0, 150));
$xml->writeElement('g:link', route('products.show', $product->slug));
$xml->writeElement('g:image_link', $product->mainImage()?->cdn_url ?? '');
$xml->writeElement('g:price', number_format($product->price, 2, '.', '') . ' RUB');
$xml->writeElement('g:availability', $product->stock > 0 ? 'in_stock' : 'out_of_stock');
$xml->writeElement('g:brand', $product->brand?->name ?? '');
$xml->writeElement('g:condition', 'new');
$xml->endElement();
}
} למה לבחור ב-Content API על פני XML?
עבור חנויות מקוונות עם מחירים דינמיים או עדכונים תכופים (למשל, מספר פעמים ביום), פיד ה-XML יוצר עיכוב אינדוקס של 24–48 שעות. ה-Content API לשופינג מאפשר עדכונים בזמן אמת. זה משפר את דיוק המודעות ומפחית את הסיכון להצגת מחירים שגויים. השוואה: פיד XML פשוט יותר, אבל Content API מהיר פי 10 במהירות האינדוקס.
| מאפיין | פיד XML | Content API |
|---|---|---|
| תדירות עדכון | כל 1–6 שעות | זמן אמת |
| עיכוב אינדוקס | 2–7 ימים | 10–30 דקות |
| מורכבות הטמעה | נמוכה | בינונית |
| עומס על השרת | גבוה (מייצר את כל הקובץ) | נמוך (רק מוצרים ששונו) |
דוגמת אינטגרציה עם Content API
// Google API Client Library for PHP
$service = new Google\Service\ShoppingContent($client);
$product = new Google\Service\ShoppingContent\Product([
'offerId' => 'SKU-12345',
'title' => $product->name,
'link' => $productUrl,
'price' => ['value' => '8990.00', 'currency' => 'RUB'],
'availability' => 'in_stock',
'channel' => 'online',
'contentLanguage' => 'ru',
'targetCountry' => 'RU',
]);
$service->products->insert('merchant-account-id', $product);
שגיאות נפוצות בהתקנה ראשונית
- מאפיין נדרש חסר—לרוב
custom_label_0..4למוצרים ממותגים. פתרון: הוספת<?xml version="1.0" encoding="UTF-8"?> <rss xmlns:g="http://base.google.com/ns/1.0" version="2.0"> <channel> <title>Название магазина</title> <link>https://example.com</link> <description>Каталог товаров</description> <item> <g:id>SKU-12345</g:id> <g:title>Кроссовки Nike Air Max 270 мужские чёрные</g:title> <g:description>Беговые кроссовки с технологией Air Max...</g:description> <g:link>https://example.com/products/nike-air-max-270</g:link> <g:image_link>https://cdn.example.com/products/nike-270-black.jpg</g:image_link> <g:availability>in_stock</g:availability> <g:price>8990.00 RUB</g:price> <g:brand>Nike</g:brand> <g:gtin>0012345678905</g:gtin> <g:google_product_category>187</g:google_product_category> <g:condition>new</g:condition> <g:custom_label_0>sale</g:custom_label_0> </item> </channel> </rss>למוצרים ללא ברקוד. הניסיון שלנו מראה כי ל-20% מהמוצרים חסר GTIN—זו הסיבה הנפוצה ביותר לדחיית פיד. - תמונה שאינה ניתנת לסריקה—CDN חסום על ידי
class GoogleMerchantFeedGenerator { public function generate(): string { $products = Product::with(['images', 'category', 'brand']) ->where('is_active', true) ->where('stock', '>', 0) ->cursor(); // cursor() для больших каталогов — не грузит RAM $xml = new \XMLWriter(); $xml->openMemory(); $xml->setIndent(true); $xml->startDocument('1.0', 'UTF-8'); $xml->startElement('rss'); $xml->writeAttribute('xmlns:g', 'http://base.google.com/ns/1.0'); $xml->writeAttribute('version', '2.0'); $xml->startElement('channel'); foreach ($products as $product) { $this->writeItem($xml, $product); } $xml->endElement(); // channel $xml->endElement(); // rss return $xml->outputMemory(); } private function writeItem(\XMLWriter $xml, Product $product): void { $xml->startElement('item'); $xml->writeElement('g:id', $product->sku); $xml->writeElement('g:title', mb_substr($product->name, 0, 150)); $xml->writeElement('g:link', route('products.show', $product->slug)); $xml->writeElement('g:image_link', $product->mainImage()?->cdn_url ?? ''); $xml->writeElement('g:price', number_format($product->price, 2, '.', '') . ' RUB'); $xml->writeElement('g:availability', $product->stock > 0 ? 'in_stock' : 'out_of_stock'); $xml->writeElement('g:brand', $product->brand?->name ?? ''); $xml->writeElement('g:condition', 'new'); $xml->endElement(); } }או דורש אימות. פתרון: אפשר גישה ל-Googlebot בהגדרות ה-CDN. אנו מבטיחים שלאחר ההגדרה, כל התמונות יהיו באינדוקס. - אי-התאמת מחיר—המחיר בפיד אינו תואם למחיר בדף הנחיתה. פתרון: סנכרון מקור הנתונים. המהנדסים שלנו בודקים 100% מהמדגם.
מה כלול בעבודה
- ניתוח קטלוג וזיהוי פערים
- מיפוי שדות למאפייני Google Product Data Specification
- פיתוח מחולל פידים (XML או Content API)
- הגדרת עדכונים אוטומטיים (cron, webhooks)
- רישום הפיד בחשבון Merchant Center
- אבחון ראשוני ותיקון שגיאות
- תיעוד תהליך העדכון
- ייעוץ לאחר ההשקה
כיצד אנו מארגנים את התהליך?
- אנליטיקה: לימוד מבנה הקטלוג, זיהוי פערים.
- עיצוב: בחירת פורמט (XML/API), תכנון המיפוי.
- יישום: כתיבת המחולל, בדיקה על עותק של מסד הנתונים.
- בדיקות: הרצה דרך Google Feed Validation Tool.
- פריסה: העלאה לשרת הייצור, רישום ב-GMC. כל התהליך אורך 3 עד 5 ימי עסקים בהתאם למורכבות הקטלוג. התמחור נקבע באופן אישי. לאחר הגדרת הפיד, מספר המוצרים שנדחו בחשבונך יורד בממוצע מ-40% ל-2%. הניסיון מראה שפיד תקין מעלה את ה-CTR ב-30% ואת ההמרות ב-15%. בקשו ייעוץ—נעריך את הפרויקט שלכם תוך יום אחד. צרו קשר כדי לדון בפרטים.







