ייצוא מוצרים ל-Google Merchant Feed (מפתח מלא)
אנחנו עובדים עם Google Merchant Center כבר למעלה מחמש שנים ויישמנו אינטגרציות ל-50+ חנויות עם קטלוגים הנעים בין 100 ל-50,000 מוצרים. פעם אחת, לקוח איבד 30% מהתנועה עקב שגיאה במאפיין availability: המערכת הציגה in_stock כאשר המוצר היה אזל מהמלאי. Google דחתה את כל המודעות. מצבים כאלה אופייניים כאשר פידים מורכבים ידנית או בחיפזון. הגדרת פיד נכונה היא לא רק ייצוא XML — היא ערובה לכך שכל מוצר יעבור את המודרציה ויופיע ב-Shopping.
פורמטים ומבנה של פיד — ייצוא מוצרים אל
מדוע הפיד צריך להיות מופק בצורה נכונה?
Google בודקת כל מאפיין. אי-התאמה במחיר בין האתר לפיד משמעותה דחייה מיידית. חסרון של GTIN למוצרים ממותגים מפחית חשיפות. אנו מבטיחים שהפיד שלכם עומד בכל נקודה של מפרט נתוני המוצר.
השוו בין שתי גישות: פיד XML ו-Content API. פיד XML מתאים יותר לקטלוגים סטטיים, בעוד ש-Content API מהיר פי 10 לעדכונים (בשל מודל ה-push). לאחר המעבר ל-API, הלקוחות שלנו חוסכים עד 40% מזמן עדכון הפיד.
| קריטריון | פיד XML | Content API v2.1 |
|---|---|---|
| תדירות עדכון | פעם ביום או לפי לוח זמנים | בזמן אמת |
| מורכבות יישום | נמוכה | בינונית |
| גודל קטלוג | עד 100,000 מוצרים | כל גודל |
| בקרת שגיאות | רישום לאחר העלאה | משוב מיידי |
| מומלץ עבור | חנויות עם עדכונים נדירים | מחירים ומלאי דינמיים |
מאפיינים נדרשים
| מאפיין | תיאור | דוגמה |
|---|---|---|
id |
מזהה ייחודי | SKU-12345 |
title |
שם עד 150 תווים | Samsung Galaxy S24 256GB Black |
description |
עד 5000 תווים | תיאור מפורט |
link |
כתובת URL מלאה של המוצר | https://example.com/product/123 |
image_link |
תמונה ראשית | https://cdn.example.com/img.jpg |
availability |
in_stock / out_of_stock / preorder |
in_stock |
price |
עם מטבע | $270–390 |
brand |
מותג | Samsung |
gtin |
ברקוד EAN/UPC (אם זמין) | 4895183805887 |
condition |
new / refurbished / used |
new |
מבנה פיד XML
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
<channel>
<title>Мой магазин</title>
<link>https://example.com</link>
<description>Product feed</description>
<item>
<g:id>SKU-12345</g:id>
<g:title>Samsung Galaxy S24 256GB Black</g:title>
<g:description>Флагманский смартфон Samsung...</g:description>
<g:link>https://example.com/product/12345</g:link>
<g:image_link>https://cdn.example.com/12345.jpg</g:image_link>
<g:additional_image_link>https://cdn.example.com/12345-2.jpg</g:additional_image_link>
<g:availability>in_stock</g:availability>
<g:price>$270–390</g:price>
<g:sale_price>$220–320</g:sale_price>
<g:brand>Samsung</g:brand>
<g:gtin>4895183805887</g:gtin>
<g:mpn>SM-S921BZKDSER</g:mpn>
<g:condition>new</g:condition>
<g:product_type>Электроника > Смартфоны</g:product_type>
<g:google_product_category>267</g:google_product_category>
<g:color>Чёрный</g:color>
<g:size>One Size</g:size>
<g:item_group_id>GALAXY-S24</g:item_group_id>
<g:shipping>
<g:country>RU</g:country>
<g:service>Курьерская доставка</g:service>
<g:price>$3–5</g:price>
</g:shipping>
</item>
</channel>
</rss>המאפיין <?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:g="http://base.google.com/ns/1.0"> <channel> <title>Мой магазин</title> <link>https://example.com</link> <description>Product feed</description> <item> <g:id>SKU-12345</g:id> <g:title>Samsung Galaxy S24 256GB Black</g:title> <g:description>Флагманский смартфон Samsung...</g:description> <g:link>https://example.com/product/12345</g:link> <g:image_link>https://cdn.example.com/12345.jpg</g:image_link> <g:additional_image_link>https://cdn.example.com/12345-2.jpg</g:additional_image_link> <g:availability>in_stock</g:availability> <g:price>$270–390</g:price> <g:sale_price>$220–320</g:sale_price> <g:brand>Samsung</g:brand> <g:gtin>4895183805887</g:gtin> <g:mpn>SM-S921BZKDSER</g:mpn> <g:condition>new</g:condition> <g:product_type>Электроника > Смартфоны</g:product_type> <g:google_product_category>267</g:google_product_category> <g:color>Чёрный</g:color> <g:size>One Size</g:size> <g:item_group_id>GALAXY-S24</g:item_group_id> <g:shipping> <g:country>RU</g:country> <g:service>Курьерская доставка</g:service> <g:price>$3–5</g:price> </g:shipping> </item> </channel> </rss> הוא קריטי למוצרים עם וריאציות — הוא מקבץ וריאנטים (צבע, גודל) לכרטיס Shopping אחד.
כיצד להגדיר מיפוי Google Product Category?
Google Product Category (GPC) הוא קוד מספרי מהטקסונומיה הרשמית. עבור חנות מקוונת, יש צורך בטבלת מיפוי של קטגוריות פנימיות לקודי GPC. אנו הופכים תהליך זה לאוטומטי: אנו יוצרים מיפוי המתחשב בהיררכיית הקטגוריות ויורש קודים ממקטעי אב.
class GoogleCategoryMapper {
private array $mapping = [
'smartphones' => 267, // Electronics > Communications > Phones
'laptops' => 328, // Electronics > Computers > Laptops
'headphones' => 232, // Electronics > Audio > Headphones
'shoes-men' => 187, // Apparel > Shoes > Men
'refrigerators' => 4356, // Appliances > Kitchen Appliances > Refrigerators
];
public function map(Category $category): ?int {
// Поиск по slug категории или её предкам
$slugs = $category->ancestors()->pluck('slug')->push($category->slug);
foreach ($slugs->reverse() as $slug) {
if (isset($this->mapping[$slug])) {
return $this->mapping[$slug];
}
}
return null; // Google допускает отсутствие GPC, но снижает качество фида
}
}ניתן להרחיב את המיפוי לכל קטגוריות החנות. אנו ממליצים להכין מראש רשימה של הקטגוריות שלכם וקודי GPC תואמים — זה מזרז את היישום.
הפקת פיד: XML ו-API
מחולל פיד PHP/Laravel
class GoogleMerchantFeedBuilder {
public function build(string $outputPath): void {
$writer = new XMLWriter();
$writer->openUri($outputPath);
$writer->startDocument('1.0', 'UTF-8');
$writer->startElement('rss');
$writer->writeAttribute('version', '2.0');
$writer->writeAttribute('xmlns:g', 'http://base.google.com/ns/1.0');
$writer->startElement('channel');
$this->writeChannelMeta($writer);
Product::with(['category.ancestors', 'brand', 'images', 'variants'])
->active()
->hasPrice()
->chunk(500, function ($products) use ($writer) {
foreach ($products as $product) {
if ($product->variants->isNotEmpty()) {
foreach ($product->variants as $variant) {
$this->writeVariantItem($writer, $product, $variant);
}
} else {
$this->writeItem($writer, $product);
}
}
});
$writer->endElement(); // channel
$writer->endElement(); // rss
$writer->endDocument();
$writer->flush();
}
private function writeItem(XMLWriter $w, Product $p): void {
$w->startElement('item');
$w->writeElement('g:id', $p->sku);
$w->writeElement('g:title', $this->sanitizeTitle($p->name));
$w->writeElement('g:description', strip_tags($p->description));
$w->writeElement('g:link', route('product.show', $p->slug));
$w->writeElement('g:image_link', $p->mainImage()?->url ?? '');
$w->writeElement('g:availability', $p->in_stock ? 'in_stock' : 'out_of_stock');
$w->writeElement('g:price', number_format($p->price, 2, '.', '') . ' USD');
if ($p->sale_price) {
$w->writeElement('g:sale_price', number_format($p->sale_price, 2, '.', '') . ' USD');
}
$w->endElement();
}
private function sanitizeTitle(string $title): string {
$title = preg_replace('/[!]{2,}/', '!', $title);
return mb_substr($title, 0, 150);
}
} העלאה דרך Content API v2.1
עבור קטלוגים גדולים ועדכוני מחיר/מלאי מיידיים, API עדיף:
use Google\Service\ShoppingContent;
class GoogleContentApiUploader
{
private ShoppingContent $service;
private string $merchantId;
public function batchUpsert(Collection $products): void
{
$entries = $products->map(fn($p) => [
'batchId' => $p->id,
'merchantId' => $this->merchantId,
'method' => 'insert',
'product' => $this->toApiProduct($p),
])->values()->toArray();
foreach (array_chunk($entries, 1000) as $batch) {
$this->service->products->custombatch([
'entries' => $batch,
]);
}
}
}אינטגרציית API מאפשרת עדכון מחיר ומלאי תוך דקות ללא המתנה לסריקה חוזרת של קובץ. Content API v2.1 מומלץ לקטלוגים דינמיים.
אבחון ותיקון שגיאות
סיבות אופייניות לדחיית מוצרים:
-
חסרון GTIN — עבור מוצרים ממותגים, Google דורשת GTIN; פתרון: מלאו את השדה או הגדירו
item_group_id - שכבת קידום מכירות על התמונה — תמונה עם טקסט/סימן מים; יש צורך בתמונת מוצר נקייה
- אי-התאמת מחיר — המחיר בפיד שונה מהמחיר בעמוד; יש צורך בסנכרון
- שפה לא נתמכת — תיאור שאינו בשפת מדינת היעד
רישום class GoogleCategoryMapper { private array $mapping = [ 'smartphones' => 267, // Electronics > Communications > Phones 'laptops' => 328, // Electronics > Computers > Laptops 'headphones' => 232, // Electronics > Audio > Headphones 'shoes-men' => 187, // Apparel > Shoes > Men 'refrigerators' => 4356, // Appliances > Kitchen Appliances > Refrigerators ]; public function map(Category $category): ?int { // Поиск по slug категории или её предкам $slugs = $category->ancestors()->pluck('slug')->push($category->slug); foreach ($slugs->reverse() as $slug) { if (isset($this->mapping[$slug])) { return $this->mapping[$slug]; } } return null; // Google допускает отсутствие GPC, но снижает качество фида } } מתגובת ה-API לזיהוי אוטומטי של בעיות:
$response = $this->service->products->get($this->merchantId, "online:ru:RU:{$sku}");
foreach ($response->getItemLevelIssues() as $issue) {
Log::warning('GMC issue', [
'sku' => $sku,
'code' => $issue->getCode(),
'servability' => $issue->getServability(), // 'disapproved' | 'demoted'
'description' => $issue->getDescription(),
]);
}הגדרת מאפיינים נכונה מגדילה את שיעור ההמרה ב-Google Shopping ב-25%.
שלבי יישום ולוחות זמנים
מה כלול
אנו מספקים חבילה מלאה: קוד מקור של מחולל הפיד, תיעוד מיפוי GPC, הוראות העלאה ל-Merchant Center, והגדרת התראות שגיאות. לאחר ההשקה, אנו מספקים שבועיים של תמיכה — עזרה במודרציה והתאמת מאפיינים אם מתעוררות דחיות. עלות האינטגרציה תלויה בהיקף, וחיסכון בתקציב הפרסום יכול להגיע ל-30%.
לוחות זמנים ליישום
- מחולל פיד XML עם מאפיינים בסיסיים: יום אחד.
- מיפוי GPC + מאפייני וריאציות: +יום אחד.
- אינטגרציית Content API v2.1: +1–2 ימים.
- רישום דחיות והתראות: +0.5 יום.
פרויקט טיפוסי ללא אינטגרציית API: יומיים עבודה. העלות מחושבת באופן אישי לפי גודל הקטלוג ומורכבותו.
בקשו ייעוץ — נבחן את הפרויקט שלכם תוך יום אחד ונציע את הפתרון האופטימלי. צרו קשר כדי להשיק את הפיד שלכם במהירות ולהתחיל למכור דרך Google Shopping.







