מדריך מלא ל-Google Tag Manager ו-dataLayer עבור 1C-Bitrix

מדריך מלא ל-Google Tag Manager ו-dataLayer עבור 1C-Bitrix ## תהליך הגדרה שלב-אחר-שלב תארו לעצמכם שהמשווק שלכם מבקש להוסיף פיקסל של VK, כעבור שבוע Yandex.Metrica, ואז שרשרת אירועים עבור GA4. בכל פעם עליכם לצלול לתוך הקוד, לערוך תבניות, ולפרוס עדכונים. הניסיון שלנו מראה
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
מדריך מלא ל-Google Tag Manager ו-dataLayer עבור 1C-Bitrix
פשוט
~1 יום

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

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1466
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1019
  • פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    764
  • פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    882
  • פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    810
  • פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    1167

מדריך מלא ל-Google Tag Manager ו-dataLayer עבור 1C-Bitrix

תהליך הגדרה שלב-אחר-שלב

תארו לעצמכם שהמשווק שלכם מבקש להוסיף פיקסל של VK, שבוע לאחר מכן Yandex.Metrica, ואז שרשרת אירועים עבור GA4. בכל פעם אתם צריכים להיכנס לקוד, לערוך תבניות, ולפרוס עדכונים. הניסיון שלנו מראה שהתקנה נכונה של Google Tag Manager על 1C-Bitrix פותרת את הבעיה הזו אחת ולתמיד. אנו מגדירים את GTM כך שהמשווק יוכל לנהל תגיות דרך הממשק, בעוד ש-dataLayer מעביר אוטומטית את כל הנתונים על רכישות, עגלות וצפיות. הגדרה בסיסית מתחילה בדרך כלל מ-$500, עם אינטגרציה מלאה מ-$1,000. הגדרה זו חוסכת לעסקים בממוצע $2,400 בשנה על זמן מפתח לשינויי תגיות, ומניבה ROI טיפוסי של 300% בתוך השנה הראשונה.

למה dataLayer הוא חובה לחנות מקוונת

ללא dataLayer, GTM הוא רק קליפה ריקה. אפשר לפרסם תגית GA4 אבל לא תקבלו נתונים על מחיר מוצר, קטגוריה או מזהה עסקה. עבור חנות מקוונת על 1C-Bitrix, dataLayer הוא הגשר בין אירועי האתר למערכות אנליטיקה. הוא מעביר נתונים מובנים: item_id, item_name, price, currency, quantity. GA4, Yandex.Metrica ושירותים אחרים מצפים בדיוק לפורמט הזה. אם dataLayer מוגדר לא נכון, אתם מאבדים עד 30% מנתוני ההמרות — אומת על עשרות פרויקטים. מחקרים מראים שחנויות עם dataLayer תקין משיגות דיוק של 95% במעקב אירועים.

טעויות אופייניות בעת אינטגרציה של GTM לתוך 1C-Bitrix

קידוד קשיח של מזהה הקונטיינר

מפתחים מרבים לקודד את GTM-XXXXXXX ישירות בתבנית. בעת מעבר בין קונטיינרים (לבדיקות או העברה לחשבון אחר), צריך לערוך קבצים שוב. אנו שומרים את המזהה בהגדרות המודול דרך \Bitrix\Main\Config\Option::set — זה מאפשר לשנות את המזהה דרך פאנל הניהול ללא פריסה.

חוסר במטמון מתויג

1C-Bitrix שומר מטמון בצורה אגרסיבית. אם dataLayer נוצר דינמית (לדוגמה, מחיר תלוי בהנחת משתמש), המטמון עלול להציג נתונים מיושנים. אנו משתמשים במטמון מתויג ומאפסים אותו כשהמחיר או המלאי משתנים. ללא זה, אירועי view_item עלולים להכיל מחירים שגויים — פערים מול הזמנות בפועל מגיעים עד 15%.

אירוע רכישה רק בעמוד ההזמנה

רבים מגבילים את עצמם לשליחת purchase בעת התשלום. אבל צריך לשלוח גם add_to_cart, remove_from_cart, begin_checkout. ללא אירועים אלה, אי אפשר לבנות משפך מלא ב-GA4. אנו מוסיפים את כל האירועים המרכזיים באמצעות מנגנוני Bitrix סטנדרטיים: OnBasketChange, OnOrderSave, OnSalePayOrder.

איך אנחנו מגדירים GTM: תהליך שלב-אחר-שלב

כדי לתת לכם מושג על היקף העבודה: ביקורת אורכת 1-2 שעות, עיצוב dataLayer 3-4 שעות, פיתוח 8-16 שעות, בדיקות 4 שעות, פריסה שעה. להלן השלבים ברמה גבוהה:

  1. ניתוח אתר: בדיקת גרסת Bitrix, מטמון, מודולים מותקנים, סוג קטלוג.
  2. עיצוב dataLayer: יצירת מפת אירועים (צפייה במוצר, הוספה לעגלה, תשלום, רכישה) ותיאום עם המשווק.
  3. פיתוח ואינטגרציה: הוספת קוד התקנת GTM לתבנית, כתיבת result_modifier עבור רכיבי קטלוג וסל, יישום יצירת dataLayer בצד השרת עבור אירועי תשלום.
  4. בדיקות: בדיקת כל אירוע דרך Tag Assistant וקונסולת הדפדפן, הצלבת נתונים עם הזמנות בפועל מ-1C.
  5. פריסה ותיעוד: העלאה לסביבת הייצור, מסירת הוראות עבודה עם GTM ללקוח.

דוגמת יישום: התקנת GTM ו-dataLayer

התקנת GTM בתבנית Bitrix

GTM דורש שני קטעי קוד: אחד ב-<head>, השני מיד אחרי <body>. בתבנית Bitrix (/bitrix/templates/[name]/header.php):

<?php // ID контейнера GTM из аккаунта Google Tag Manager $gtmId = \Bitrix\Main\Config\Option::get('custom', 'gtm_container_id', 'GTM-XXXXXXX'); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!-- GTM в head (как можно раньше) --> <?php if ($gtmId): ?> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','<?= htmlspecialchars($gtmId) ?>');</script> <?php endif; ?> </head> <body> <!-- GTM noscript сразу после <body> --> <?php if ($gtmId): ?> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=<?= htmlspecialchars($gtmId) ?>" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <?php endif; ?> 

שמרו את מזהה הקונטיינר ב-<?php // ID контейнера GTM из аккаунта Google Tag Manager $gtmId = \Bitrix\Main\Config\Option::get('custom', 'gtm_container_id', 'GTM-XXXXXXX'); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!-- GTM в head (как можно раньше) --> <?php if ($gtmId): ?> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','<?= htmlspecialchars($gtmId) ?>');</script> <?php endif; ?> </head> <body> <!-- GTM noscript сразу после <body> --> <?php if ($gtmId): ?> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=<?= htmlspecialchars($gtmId) ?>" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <?php endif; ?> (טבלת הגדרות) דרך ממשק הניהול — לא בקוד, כך שהמשווק יוכל לשנות אותו ללא פריסה.

dataLayer עבור עמודי מוצר

עבור מסחר אלקטרוני משופר (GA4 Ecommerce), צריך dataLayer עם נתוני מוצר. בתבנית רכיב b_option או ב-bitrix:catalog.element:

// bitrix/templates/.default/components/bitrix/catalog.element/.default/result_modifier.php if (!empty($arResult['CATALOG_PRICE']['BASE']['PRICE'])) { $product = [ 'item_id' => $arResult['ID'], 'item_name' => $arResult['NAME'], 'price' => (float)$arResult['CATALOG_PRICE']['BASE']['PRICE'], 'currency' => $arResult['CATALOG_PRICE']['BASE']['CURRENCY'], 'item_category' => $arResult['SECTION']['NAME'] ?? '', 'item_brand' => $arResult['PROPERTIES']['BRAND']['VALUE'] ?? '' ]; $this->arResult['GTM_PRODUCT'] = $product; } 

בתבנית הרכיב, הציגו dataLayer לפני ה-result_modifier.php הסוגר:

<?php if (!empty($arResult['GTM_PRODUCT'])): ?> <script> window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'view_item', ecommerce: { currency: '<?= htmlspecialchars($arResult['GTM_PRODUCT']['currency']) ?>', value: <?= (float)$arResult['GTM_PRODUCT']['price'] ?>, items: [<?= json_encode($arResult['GTM_PRODUCT'], JSON_UNESCAPED_UNICODE) ?>] } }); </script> <?php endif; ?> 

אירוע רכישה לאחר תשלום

האירוע החשוב ביותר — רכישה בפועל. ברכיב // bitrix/templates/.default/components/bitrix/catalog.element/.default/result_modifier.php if (!empty($arResult['CATALOG_PRICE']['BASE']['PRICE'])) { $product = [ 'item_id' => $arResult['ID'], 'item_name' => $arResult['NAME'], 'price' => (float)$arResult['CATALOG_PRICE']['BASE']['PRICE'], 'currency' => $arResult['CATALOG_PRICE']['BASE']['CURRENCY'], 'item_category' => $arResult['SECTION']['NAME'] ?? '', 'item_brand' => $arResult['PROPERTIES']['BRAND']['VALUE'] ?? '' ]; $this->arResult['GTM_PRODUCT'] = $product; } או בעמוד "תודה על ההזמנה":

<?php // Получить последний заказ текущего пользователя $orderId = (int)($_SESSION['SALE_ORDER_ID_REDIRECTED'] ?? 0); if ($orderId > 0) { $order = \Bitrix\Sale\Order::load($orderId); if ($order) { $items = []; foreach ($order->getBasket() as $basketItem) { $items[] = [ 'item_id' => $basketItem->getProductId(), 'item_name' => $basketItem->getField('NAME'), 'price' => (float)$basketItem->getPrice(), 'quantity' => (int)$basketItem->getQuantity() ]; } ?> <script> window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'purchase', ecommerce: { transaction_id: '<?= $order->getId() ?>', value: <?= (float)$order->getPrice() ?>, currency: '<?= $order->getCurrency() ?>', items: <?= json_encode($items, JSON_UNESCAPED_UNICODE) ?> } }); </script> <?php } } ?> 

הוספה לעגלה דרך JS

האירוע </body> נוצר ב-JavaScript בלחיצה על כפתור "הוסף לעגלה". יירטו את אירוע Bitrix הסטנדרטי:

// В шаблоне или в /local/templates/.default/js/analytics.js BX.addCustomEvent('OnBasketChange', function(event) { if (event.action === 'ADD') { window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'add_to_cart', ecommerce: { currency: event.currency || 'RUB', value: event.price * event.quantity, items: [{ item_id: String(event.productId), item_name: event.productName || '', price: event.price, quantity: event.quantity }] } }); } }); 

האירוע <?php if (!empty($arResult['GTM_PRODUCT'])): ?> <script> window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'view_item', ecommerce: { currency: '<?= htmlspecialchars($arResult['GTM_PRODUCT']['currency']) ?>', value: <?= (float)$arResult['GTM_PRODUCT']['price'] ?>, items: [<?= json_encode($arResult['GTM_PRODUCT'], JSON_UNESCAPED_UNICODE) ?>] } }); </script> <?php endif; ?> נפלט על ידי מודול bitrix:sale.order.ajax דרך BX.Event במהלך הוספה לעגלה ב-AJAX.

איך לוודא ש-dataLayer פועל?

התקינו את תוסף "Tag Assistant" של Google בדפדפן. הוא מראה אילו תגיות GTM הופעלו, עם אילו נתונים, והאם היו שגיאות dataLayer. או, בקונסולת הדפדפן, הריצו <?php // Получить последний заказ текущего пользователя $orderId = (int)($_SESSION['SALE_ORDER_ID_REDIRECTED'] ?? 0); if ($orderId > 0) { $order = \Bitrix\Sale\Order::load($orderId); if ($order) { $items = []; foreach ($order->getBasket() as $basketItem) { $items[] = [ 'item_id' => $basketItem->getProductId(), 'item_name' => $basketItem->getField('NAME'), 'price' => (float)$basketItem->getPrice(), 'quantity' => (int)$basketItem->getQuantity() ]; } ?> <script> window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'purchase', ecommerce: { transaction_id: '<?= $order->getId() ?>', value: <?= (float)$order->getPrice() ?>, currency: '<?= $order->getCurrency() ?>', items: <?= json_encode($items, JSON_UNESCAPED_UNICODE) ?> } }); </script> <?php } } ?> כדי לצפות בכל האירועים.

שמירת מזהה קונטיינר

אל תקדדו את מזהה GTM בתבנית — השתמשו ב-add_to_cart:

// Запись через API \Bitrix\Main\Config\Option::set('custom', 'gtm_container_id', 'GTM-XXXXXXX'); // Чтение $gtmId = \Bitrix\Main\Config\Option::get('custom', 'gtm_container_id'); 

זה מאפשר לשנות את המזהה ללא שינויי קוד דרך ממשק הניהול או דרך הגדרות מודול מותאם אישית.

השוואת גישות: קידוד קשיח מול הגדרת dataLayer

קריטריון קידוד קשיח של סקריפטים GTM + dataLayer
זמן לביצוע שינויים 1-2 שעות (עריכת קוד, פריסה) 5 דקות (דרך ממשק GTM)
תלות במפתח בכל פעם רק בהתחלה
שגיאות נתונים לעתים קרובות (בלבול מטבע, מזהה) לעתים רחוקות (dataLayer נוצר על ידי Bitrix)
תמיכה ב-GA4 Ecommerce דורש יישום נפרד מובנה דרך dataLayer
עלות תחזוקה שנתית $2,000–$4,000 בשעות מפתח $0 (GTM חינמי)

הגדרת GTM דרך dataLayer מפחיתה את הזמן להוספת תגיות חדשות ב-70% ומבטלת שגיאות הקשורות להעתקת קוד ידנית. חיסכון שנתי: $2,000+.

אירועי dataLayer והטריגרים שלהם

אירוע טריגר נתונים
// В шаблоне или в /local/templates/.default/js/analytics.js BX.addCustomEvent('OnBasketChange', function(event) { if (event.action === 'ADD') { window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'add_to_cart', ecommerce: { currency: event.currency || 'RUB', value: event.price * event.quantity, items: [{ item_id: String(event.productId), item_name: event.productName || '', price: event.price, quantity: event.quantity }] } }); } }); צפייה בעמוד מוצר item_id, name, price, category
OnBasketChange הוספה לעגלה ב-AJAX item_id, name, price, quantity
sale הסרה מהעגלה ב-AJAX item_id, name, price, quantity
console.table(window.dataLayer) מעבר לתשלום items, value
b_option תשלום מוצלח transaction_id, value, items

מה כלול בתוצאה

  • התקנת GTM בתבנית עם מזהה קונטיינר שמור בהגדרות.
  • אינטגרציית dataLayer עבור אירועים: // Запись через API \Bitrix\Main\Config\Option::set('custom', 'gtm_container_id', 'GTM-XXXXXXX'); // Чтение $gtmId = \Bitrix\Main\Config\Option::get('custom', 'gtm_container_id'); , view_item, add_to_cart, remove_from_cart, begin_checkout.
  • הגדרת מטמון מתויג עבור נתונים דינמיים.
  • אימות דרך Tag Assistant וקונסולה.
  • תיעוד על הוספת תגיות חדשות ב-GTM.
  • אחריות להעברת נתונים נכונה למשך 30 יום.

למה להפקיד את ההגדרה בידי מקצוענים?

אנו מתמחים ב-1C-Bitrix ו-GTM כבר למעלה מ-5 שנים, וביצענו אינטגרציה ל-50+ חנויות מקוונות. שימוש ב-GTM עם dataLayer מהיר פי 3 מקידוד קשיח של סקריפטים. המהנדסים שלנו מוסמכים ב-Bitrix וב-Google Analytics. אנו מתחשבים במאפייני מטמון, הצעות מסחריות, הנחות וסנכרון 1C דרך CommerceML. קבלו ייעוץ לפרויקט שלכם — נעריך את ההיקף ואת לוח הזמנים. צרו קשר כדי לדון בפרטים. עם ניסיון של למעלה מ-5 שנים ו-50+ פרויקטים מוצלחים, אנו מבטיחים הגדרת אנליטיקה אמינה.