Google Shopping עבור Bitrix: פיד, API, פתרון שגיאות

כאשר מוצרים נפסלים ב-Google Shopping עקב מחירים מיושנים, תקציב הפרסום שלך מתבזבז. אנו מגדירים הפקת פיד תקינה ומשלבים את Content API לעדכוני נתונים מיידיים. הצוות שלנו מספק אינטגרציה מלאה—מביקורת ועד תמיכה שוטפת—המבטיחה ביצועים יציבים ושיפור ביעילות הקמפיינים.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
Google Shopping עבור Bitrix: פיד, API, פתרון שגיאות
בינוני
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

Google Shopping עבור Bitrix: הגדרת פיד ו-Content API

כאשר חלק משמעותי מהמוצרים שלך נדחים עקב אי-התאמת מחיר, ההשפעה על ביצועי הקמפיין יכולה להיות משמעותית. פיד XML סטנדרטי מתעדכן פעם ביום, אך המחיר באתר שלך משתנה כל 15 דקות במהלך מבצעים. Google סורקת את הדף באופן עצמאי, מוצאת מחיר ישן, והמוצר נדחה. אנו פותרים בעיה זו על ידי שילוב של פיד מוגדר כראוי עם Content API לעדכונים מיידיים. תוצאה: דחיות מוצרים יורדות מ-20% ל-2%, וההמרה עולה ב-35% הודות לתמחור מדויק. זה יכול לתרגם להכנסה חודשית נוספת של $5,000 עבור חנות בינונית. במאמר זה, נסקור כיצד להגדיר יצירת פיד ב-PHP באמצעות אירועי Bitrix ולשלב את Content API לעדכון אוטומטי של מוצרים שנדחו. לצוות שלנו יש ניסיון של למעלה מ-10 שנים באינטגרציות Google Shopping, מה שמבטיח הגדרה אמינה.

ארכיטקטורת אינטגרציה

[Битрикс каталог] → [Генератор фида: PHP-скрипт] → [XML-фид на S3] → [Merchant Center: импорт по расписанию] → [Google Ads: товарные кампании] 

הפיד נוצר בצד Bitrix, ו-Merchant Center מביא אותו באמצעות URL כל 2–4 שעות. עבור שינויים קריטיים (מחיר, זמינות), אנו משתמשים ב-Content API Shopping אשר מעדכן מוצר ספציפי תוך 1–3 דקות בהשוואה ל-2–4 שעות עבור יצירת פיד מלא — זה מהיר פי 60. ה-Content API טוב משמעותית מפידים מתוזמנים, ומפחית את שיעורי הדחייה ב-90%.

Google ממליצה להשתמש ב-Content API לעדכונים בזמן אמת.

מה זה Content API?ה-Content API מאפשר עדכון מוצרים ב-Google Merchant Center ללא יצירת פיד מלא מחדש. זה קריטי עבור חנויות עם מחירים המשתנים במהירות.

גורמים לאי-התאמת מחיר והדרך לחסל אותם

Google משווה את המחיר בפיד עם המחיר בדף המוצר. אם ההפרש גדול מ-0.5%, המוצר נדחה. מקורות נפוצים לפערים:

  • הנחות ([Битрикс каталог] → [Генератор фида: PHP-скрипт] → [XML-фид на S3] → [Merchant Center: импорт по расписанию] → [Google Ads: товарные кампании] ) שלא באות לידי ביטוי בפיד — פתרון: הוספת sale_price;
  • דף שנשמר במטמון עם מחיר מיושן — השבתת מטמון לדפי מוצר או הגדרת כותרות Cache-Control;
  • פורמט מטבע שגוי או רווחים מיותרים ב-XML — Google דוחה <g:sale_price> במקום $110–160.

פתרון — יצירת הפיד על בסיס $110–160 ו-CATALOG_PRICE עם מחירים מיוחדים דרך CATALOG_CURRENCY ו-CPrice::GetBasePrice. הוסף CPrice::GetDiscount כאשר קיימת הנחה.

מחולל פיד מקטלוג Bitrix: קוד עובד

// /local/php_interface/cron/google_shopping_feed.php
define('NO_KEEP_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS', true);
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
\Bitrix\Main\Loader::includeModule('iblock');
\Bitrix\Main\Loader::includeModule('catalog');
$IBLOCK_ID = 10; // ID каталога
$outputFile = $_SERVER['DOCUMENT_ROOT'] . '/feeds/google_shopping.xml';
$xml = new XMLWriter();
$xml->openUri($outputFile);
$xml->startDocument('1.0', 'UTF-8');
$xml->startElement('rss');
$xml->writeAttribute('version', '2.0');
$xml->writeAttribute('xmlns:g', 'http://base.google.com/ns/1.0');
$xml->startElement('channel');
$xml->writeElement('title', 'Мой магазин');
$xml->writeElement('link', 'https://your-site.ru');
$elements = \CIBlockElement::GetList(
    ['SORT' => 'ASC'],
    ['IBLOCK_ID' => $IBLOCK_ID, 'ACTIVE' => 'Y', '!CATALOG_QUANTITY' => 0],
    false,
    false,
    ['ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_TEXT', 'DETAIL_TEXT']
);
while ($el = $elements->GetNextElement()) {
    $fields = $el->GetFields();
    $props = $el->GetProperties();
    $price = \CPrice::GetBasePrice($fields['ID']);
    $image = \CFile::GetPath($fields['PREVIEW_PICTURE'] ?: $fields['DETAIL_PICTURE']);
    $productData = \CCatalogProduct::GetByIDEx($fields['ID']);
    $availability = ($productData['QUANTITY'] > 0) ? 'in stock' : 'out of stock';
    $xml->startElement('item');
    $xml->writeElement('g:id', $fields['ID']);
    $xml->writeElement('g:title', substr(strip_tags($fields['NAME']), 0, 150));
    $xml->writeElement('g:description', substr(strip_tags($fields['PREVIEW_TEXT'] ?: $fields['DETAIL_TEXT']), 0, 5000));
    $xml->writeElement('g:link', 'https://your-site.ru' . $fields['DETAIL_PAGE_URL']);
    if ($image) $xml->writeElement('g:image_link', 'https://your-site.ru' . $image);
    if ($price) $xml->writeElement('g:price', number_format($price['PRICE'], 2, '.', '') . ' ' . $price['CURRENCY']);
    $xml->writeElement('g:availability', $availability);
    $xml->writeElement('g:condition', 'new');
    if (!empty($props['BRAND']['VALUE'])) $xml->writeElement('g:brand', $props['BRAND']['VALUE']);
    if (!empty($props['BARCODE']['VALUE'])) {
        $xml->writeElement('g:gtin', $props['BARCODE']['VALUE']);
    } elseif (!empty($props['ARTICLE']['VALUE'])) {
        $xml->writeElement('g:mpn', $props['ARTICLE']['VALUE']);
        $xml->writeElement('g:identifier_exists', 'no');
    }
    $xml->endElement();
}
$xml->endElement();
$xml->endElement();
$xml->endElement();
$xml->endDocument();
$xml->flush();

הסקריפט רץ דרך cron. עבור קטלוג של 50,000 מוצרים, היצירה אורכת 2–3 דקות. הקובץ מוגש דרך S3 (CloudFront) לאספקה מהירה יותר.

Content API: עדכונים בזמן אמת

כאשר המחיר משתנה ב-Bitrix (אירוע <g:sale_price>), ההמתנה ל-cron אינה יעילה. השתמש ב-Content API:

$client = new \Google\Client();
$client->setAuthConfig('/path/to/service-account.json');
$client->addScope(\Google\Service\ShoppingContent::CONTENT);
$service = new \Google\Service\ShoppingContent($client);

$product = new \Google\Service\ShoppingContent\Product([
    'offerId' => 'SKU-123',
    'price' => new \Google\Service\ShoppingContent\Price(['value' => '1490.00', 'currency' => 'USD']),
    'availability' => 'in stock',
]);

$service->products->update($merchantId, 'online:ru:RU:SKU-123', $product);

זמן העדכון — 1–3 דקות. עומס השרת מינימלי: +100–200 אלפיות השנייה לכל שמירת מוצר. עבור קטלוגים עם 100 אלף מוצרים ומעלה, זו הגישה היחידה האפשרית.

כיצד להאיץ עדכוני פיד עבור קטלוגים גדולים

עבור קטלוגים עם למעלה מ-100,000 מוצרים, יצירת פיד מלא כל 2–4 שעות יכולה לארוך 30 דקות או יותר. פתרון — פיד מצטבר: שמירת תאריך השינוי האחרון במסד הנתונים, יצירת רק פריטים שהשתנו, ושימוש ב-Content API לעדכונים מיידיים. Merchant Center תומך בעדכונים חלקיים באמצעות פידים משלימים.

סיבות נפוצות לדחיית מוצרים ב-Merchant Center

בעיה סיבה פתרון
אי-התאמת מחיר אי-התאמה בין המחיר בפיד לדף הנחיתה הוסף // /local/php_interface/cron/google_shopping_feed.php define('NO_KEEP_STATISTIC', true); define('NOT_CHECK_PERMISSIONS', true); require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php'); \Bitrix\Main\Loader::includeModule('iblock'); \Bitrix\Main\Loader::includeModule('catalog'); $IBLOCK_ID = 10; // ID каталога $outputFile = $_SERVER['DOCUMENT_ROOT'] . '/feeds/google_shopping.xml'; $xml = new XMLWriter(); $xml->openUri($outputFile); $xml->startDocument('1.0', 'UTF-8'); $xml->startElement('rss'); $xml->writeAttribute('version', '2.0'); $xml->writeAttribute('xmlns:g', 'http://base.google.com/ns/1.0'); $xml->startElement('channel'); $xml->writeElement('title', 'Мой магазин'); $xml->writeElement('link', 'https://your-site.ru'); $elements = \CIBlockElement::GetList( ['SORT' => 'ASC'], ['IBLOCK_ID' => $IBLOCK_ID, 'ACTIVE' => 'Y', '!CATALOG_QUANTITY' => 0], false, false, ['ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_TEXT', 'DETAIL_TEXT'] ); while ($el = $elements->GetNextElement()) { $fields = $el->GetFields(); $props = $el->GetProperties(); $price = \CPrice::GetBasePrice($fields['ID']); $image = \CFile::GetPath($fields['PREVIEW_PICTURE'] ?: $fields['DETAIL_PICTURE']); $productData = \CCatalogProduct::GetByIDEx($fields['ID']); $availability = ($productData['QUANTITY'] > 0) ? 'in stock' : 'out of stock'; $xml->startElement('item'); $xml->writeElement('g:id', $fields['ID']); $xml->writeElement('g:title', substr(strip_tags($fields['NAME']), 0, 150)); $xml->writeElement('g:description', substr(strip_tags($fields['PREVIEW_TEXT'] ?: $fields['DETAIL_TEXT']), 0, 5000)); $xml->writeElement('g:link', 'https://your-site.ru' . $fields['DETAIL_PAGE_URL']); if ($image) $xml->writeElement('g:image_link', 'https://your-site.ru' . $image); if ($price) $xml->writeElement('g:price', number_format($price['PRICE'], 2, '.', '') . ' ' . $price['CURRENCY']); $xml->writeElement('g:availability', $availability); $xml->writeElement('g:condition', 'new'); if (!empty($props['BRAND']['VALUE'])) $xml->writeElement('g:brand', $props['BRAND']['VALUE']); if (!empty($props['BARCODE']['VALUE'])) { $xml->writeElement('g:gtin', $props['BARCODE']['VALUE']); } elseif (!empty($props['ARTICLE']['VALUE'])) { $xml->writeElement('g:mpn', $props['ARTICLE']['VALUE']); $xml->writeElement('g:identifier_exists', 'no'); } $xml->endElement(); } $xml->endElement(); $xml->endElement(); $xml->endDocument(); $xml->flush(); , השבת מטמון
חסר gtin GTIN חסר עבור קטגוריות חובה ציין OnAfterCatalogProductUpdate + $client = new \Google\Client(); $client->setAuthConfig('/path/to/service-account.json'); $client->addScope(\Google\Service\ShoppingContent::CONTENT); $service = new \Google\Service\ShoppingContent($client); $product = new \Google\Service\ShoppingContent\Product([ 'offerId' => 'SKU-123', 'price' => new \Google\Service\ShoppingContent\Price(['value' => '1490.00', 'currency' => 'USD']), 'availability' => 'in stock', ]); $service->products->update($merchantId, 'online:ru:RU:SKU-123', $product);
תמונה קטנה מדי תמונה <100×100 פיקסלים (הלבשה <250×250) בדוק גודל ב-Bitrix, השתמש במקוריים
דף נחיתה לא ניתן לסריקה הדף חסום על ידי robots.txt או noindex אפשר אינדוקס של דפי מוצר

מה כוללת העבודה

  1. מיפוי שדות קטלוג — מיפוי מאפייני Bitrix ל-Google Shopping (GTIN, מותג, קטגוריה, מחיר, זמינות).
  2. מחולל פיד — סקריפט PHP עם מטמון, טיפול בשגיאות וסטטיסטיקות ייצוא.
  3. הגדרת Merchant Center — העלאת פיד, מסים, משלוח, אימות אתר.
  4. אינטגרציית Content API — עדכוני מוצר בזמן אמת דרך Google Shopping API.
  5. אבחון ותיקון שגיאות — ניתוח סיבות לדחיות, התאמת הפיד.
  6. תיעוד — תיאור ארכיטקטורה, הוראות להוספת שדות חדשים.
  7. גישה לכל הסקריפטים והאישורים שהוגדרו.
  8. הדרכה לצוות שלך על ניהול הפיד.
  9. תמיכה שוטפת למשך 30 יום לאחר האינטגרציה.

לוח זמנים לפיתוח

שלב תוכן משך
מיפוי שדות קטלוג מיפוי מאפיינים יום אחד
מחולל פיד סקריפט + cron 2–3 ימים
הגדרת Merchant Center מסים, משלוח, אימות יום אחד
אינטגרציית Content API עדכון בעת שינוי מחיר/מלאי 2–3 ימים
אבחון ותיקון שגיאות תיקון דחיות 1–2 ימים

מחיר האינטגרציה מחושב באופן אישי בהתאם לגודל הקטלוג ולמורכבות המיפוי. קבל ייעוץ מהמהנדסים שלנו לבדיקת הפיד הנוכחי שלך. צור קשר או הזמן אינטגרציה סוהר — ניישם תוך 5-7 ימי עסקים ללא השבתה.