מה זה משתנה ב-GTM ואיפה משתמשים בו?
לפי התיעוד של Google משתנים הם מצייני מקום בעלי שם לערכים שמתמלאים כשהקוד רץ באתר. המשתנה Page URL, לדוגמה, מחזיר את כתובת העמוד הנוכחי. משתמשים בהם בשני מקומות. בטריגרים הם מגדירים את התנאי שקובע מתי תג נורה, למשל טריגר שפועל כשה-URL מכיל כתובת מסוימת. בתגים הם מעבירים ערכים דינמיים, למשל ערך עסקה ומזהה מוצר לתג המרה.
משתנה אחד יכול להישען על משתנה אחר. בתוך קוד מפנים למשתנה בשמו בין סוגריים מסולסלים כפולים, כמו בדוגמה שבתיעוד: {{url}}. לכן שם ברור ועקבי הוא חלק מההגדרה ולא קישוט. על הצד השני של המשוואה, מתי תג נורה, כתבנו במדריך סוגי הטריגרים.
הדרך של ערך אל התג
מהמקור, דרך המשתנה ועד הטריגר או התג
אילו משתנים מובנים יש ואיך מפעילים אותם?
משתנים מובנים הם לפי התיעוד קטגוריה מיוחדת: הם נוצרו מראש ואי אפשר לשנות אותם. קונטיינר חדש מגיע בלי אף משתנה בהגדרת משתמש ועם חלק מהמובנים פעילים. כדי להפעיל את השאר נכנסים ל-Variables, לוחצים על Configure בחלק Built-In Variables ומסמנים את מה שצריך. אחרי הסימון המשתנה מופיע בכל תפריטי הבחירה בקונטיינר.
| קטגוריה | משתנים עיקריים | מאיפה הערך מגיע |
|---|---|---|
| Pages | Page URL, Page Hostname, Page Path, Referrer | כתובת העמוד הנוכחי |
| Clicks | Click Element, Click Classes, Click ID, Click Target, Click URL, Click Text | טריגרים של קליק |
| Forms | Form Element, Form Classes, Form ID, Form Target, Form URL, Form Text | טריגר Form Submission |
| History | New History Fragment, Old History Fragment, New History State, Old History State, History Source | טריגר History Change |
| Scroll | Scroll Depth Threshold, Scroll Depth Units, Scroll Direction | טריגר Scroll Depth |
| Videos | Video Status, Video Percent, Video Title, Video URL, Video Duration | טריגר YouTube Video |
| Visibility | Percent Visible, On-Screen Duration | טריגר Element Visibility |
| Errors | Error Message, Error URL, Error Line | טריגר JavaScript Error |
| Utilities | Event, Container ID, Container Version, Environment Name, Random Number | הקונטיינר עצמו |
שני דברים ששווה לדעת על הטבלה. המשתנה Event מחזיר את שם האירוע הנוכחי ב-Data Layer, למשל gtm.js או אירוע מותאם. משתני הקליק והטופס קוראים מפתחות ב-Data Layer כמו gtm.element ו-gtm.elementUrl. לפי התיעוד מי שממלא אותם הם הטריגרים של קליק ושל טופס, כך שבאירוע מסוג אחר הם לא יחזירו את מה שציפיתם.
איך עובד Data Layer Variable?
זה המשתנה שתשתמשו בו הכי הרבה. הוא קורא ערך שהאתר דחף ב-dataLayer.push לפי שם המפתח. בהגדרה שלו יש בחירה בין שתי גרסאות. לפי התיעוד, Version 1 מתיר נקודות בתוך שם המפתח, כך שהמפתח a.b.c נשאר מפתח אחד. Version 2 מפרש נקודות כערכים מקוננים, כך ש-a.b.c הוא שלוש רמות. בדוגמה הבאה משתנה בשם ecommerce.value ב-Version 2 יחזיר 250.
dataLayer.push({
'event': 'purchase',
'ecommerce': {
'value': 250,
'currency': 'ILS'
}
});
שלושה כללים מהתיעוד למפתחים קובעים אם המשתנה יחזיר ערך. ערכים ב-Data Layer נשמרים רק כל עוד המשתמש נשאר באותו עמוד. ערך שצריך בכל עמוד, כמו סוג המשתמש, נדחף מחדש בכל עמוד. דחיפה של מפתח בשם שכבר קיים דורסת את הערך הקודם. שמות המפתחות חייבים להיות עקביים בין העמודים: visitorType ו-visitor_type הם שני משתנים שונים. רוב המקרים של משתנה שמחזיר undefined נגמרים באחד משלושת אלה. איך מגדירים למפתחים שמות אחידים פירטנו במסמך dataLayer למפתחים.
מה ההבדל בין Lookup Table ל-RegEx Table?
שניהם ממירים ערך של משתנה אחד לערך אחר לפי טבלה. Lookup Table יוצר לפי התיעוד משתנה שהערך שלו משתנה לפי הערך של משתנה אחר. הטבלה בנויה משתי עמודות: בראשונה הערך של משתנה הקלט ובשנייה הפלט. הדוגמה בתיעוד ממפה עמודי תודה שונים למזהי המרה שונים. RegEx Table דומה, אבל כל שורה היא תבנית של ביטוי רגולרי.
| מאפיין | Lookup Table | RegEx Table |
|---|---|---|
| מה כותבים בכל שורה | ערך של משתנה הקלט ולצדו הפלט | תבנית של ביטוי רגולרי ולצדה הפלט |
| איך נבחר הפלט | לפי השורה שמתאימה לערך הקלט | מלמעלה למטה, ההתאמה הראשונה מחזירה את הפלט |
| מתי בוחרים בו | כשרשימת הערכים האפשריים סגורה וידועה | כשהערכים משתנים אבל יש להם תבנית משותפת |
| שימוש לדוגמה | מזהה מדידה שונה לכל hostname | קיבוץ של תבניות URL לסוג עמוד |
ב-RegEx Table יש כמה נקודות שכדאי להכיר. לפי התיעוד, כברירת מחדל התבנית חייבת להתאים למחרוזת הקלט כולה וההתאמה אינה רגישה לאותיות גדולות וקטנות. האפשרות Set Default Value קובעת פלט למקרה שאף תבנית לא התאימה.
תחת Advanced Settings יש שלוש אפשרויות: Ignore Case, Full Matches Only ו-Capture Groups and Replace. כש-Full Matches Only מסומן, התבנית מתנהגת כאילו יש לה עוגנים בהתחלה ובסוף. כשמבטלים אותו, התאמה יכולה להיות בכל מקום במחרוזת. Capture Groups and Replace מאפשר לשלב בפלט חלקים שנתפסו מהקלט בעזרת $1 ו-$2. התיעוד מזהיר שהפעלה שלו יחד עם ביטול של Full Matches Only עלולה לתת תוצאות לא צפויות. בגלל שהבדיקה רצה מלמעלה למטה, שמים את התבניות הספציפיות לפני הכלליות.
מתי כותבים Custom JavaScript ומתי לא?
Custom JavaScript מחזיר את התוצאה של פונקציה. הדרישה היחידה מהתיעוד: הקוד חייב להיות פונקציה אנונימית שמחזירה ערך. הדוגמה מהתיעוד הופכת כתובת לאותיות קטנות:
function () {
return {{url}}.toLowerCase();
}
הדוגמה הזאת היא גם הסיבה שאני ממעט להשתמש בו. המרה לאותיות קטנות קיימת היום כאפשרות מוכנה ב-Format Value, בלי שורת קוד. לפני שכותבים פונקציה כדאי לעבור על הסוגים המוכנים. JavaScript Variable קורא משתנה גלובלי שקיים בקוד העמוד. DOM Element מחזיר טקסט של אלמנט או ערך של מאפיין שלו. 1st Party Cookie מחזיר ערך של עוגייה. URL מפרק כתובת לרכיבים. Auto-Event Variable מחזיר פרטים על האלמנט שהפעיל את האירוע, כולל מאפיין לפי בחירה. קוד שנכתב ביד צריך תחזוקה ובדיקה בכל שינוי באתר, בעוד שסוג מוכן פשוט ממשיך לעבוד.
מה עושה Format Value?
Format Value הוא חלק שמופיע בתחתית ההגדרה של משתנה בהגדרת משתמש. הוא משנה את הערך אחרי שהמשתנה קרא אותו. לפי התיעוד האפשרויות הן: Change Case to לאותיות קטנות או גדולות, Convert null to ו-Convert undefined to להחלפת ערך חסר בטקסט או במשתנה, Convert true to ו-Convert false to. כשמסמנים כמה אפשרויות הן מופעלות מלמעלה למטה לפי הסדר ברשימה. השימוש הנפוץ: אחידות. ערך שמגיע פעם כ-Contact ופעם כ-contact יוצר שתי שורות בדוח. המרה לאותיות קטנות במשתנה פותרת את זה במקור.
איזה סוג משתנה מתאים לאיזה צורך?
| הצורך | סוג המשתנה | הערה |
|---|---|---|
| ערך שהאתר דחף | Data Layer Variable | Version 2 לקריאת ערכים מקוננים |
| חלק מכתובת העמוד | URL | רכיבים: Full URL, Protocol, Hostname, Port, Path, Filename Extension, Query, Fragment |
| ערך של עוגייה | 1st Party Cookie | אם יש כמה עוגיות באותו שם, מוחזר הערך הראשון |
| מאפיין של האלמנט שנלחץ | Auto-Event Variable | Element Attribute עם שם המאפיין |
| ערך קבוע שחוזר בכמה תגים | Constant | למשל מספר חשבון |
| ערך שתלוי במשתנה אחר | Lookup Table או RegEx Table | ערך קבוע מול תבנית |
| פרמטרים משותפים לאירועי GA4 | Google Tag: Event Settings | פירוט במדריך Google tag ותג אירוע GA4 |
| חישוב שאין לו סוג מוכן | Custom JavaScript | פונקציה אנונימית שמחזירה ערך |
איך יוצרים משתנה חדש ובודקים אותו?
- פותחים את מסך המשתנים. בתפריט הצד לוחצים על Variables. בחלק User-Defined Variables לוחצים על New.
- בוחרים סוג. לוחצים על Variable Configuration ובוחרים את הסוג הפשוט ביותר שמחזיר את הערך שאתם צריכים.
- ממלאים את ההגדרות. ב-Data Layer Variable זה שם המפתח והגרסה. ב-Lookup Table זה משתנה הקלט והשורות.
- מוסיפים Format Value כשצריך. המרה לאותיות קטנות וערך חלופי ל-undefined חוסכים שורות כפולות בדוחות.
- נותנים שם שמתאר את התפקיד. התיעוד ממליץ על שיטת שמות שמתארת מה המשתנה עושה. מוסכמה נפוצה היא קידומת לפי סוג, לדוגמה DLV לערכים מה-Data Layer.
- בודקים ב-Preview. בוחרים את האירוע הרלוונטי ובודקים את הערך של המשתנה באותו רגע. את הבדיקה הזאת תיארנו במדריך Preview ו-Tag Assistant.
שאלות נפוצות
מה ההבדל בין משתנה מובנה למשתנה בהגדרת משתמש ב-GTM?
משתנים מובנים נוצרו מראש על ידי Google ואי אפשר לשנות את ההגדרה שלהם. מפעילים אותם במסך Variables: לוחצים על Configure בחלק Built-In Variables ומסמנים את המשתנים הרצויים. משתנים בהגדרת משתמש יוצרים לבד לפי סוג, למשל Data Layer Variable או Lookup Table. קונטיינר חדש מגיע בלי משתנים בהגדרת משתמש ועם חלק מהמובנים פעילים.
מה ההבדל בין Version 1 ל-Version 2 ב-Data Layer Variable?
ההבדל הוא בפירוש של נקודות בשם המפתח. לפי התיעוד של Google, Version 1 מתיר נקודות כחלק מהשם, כך ש-a.b.c הוא מפתח אחד. Version 2 מפרש נקודות כערכים מקוננים, כך ש-a.b.c מצביע על c בתוך b בתוך a. כדי לקרוא ערך מתוך אובייקט מקונן כמו ecommerce.value משתמשים ב-Version 2.
למה Data Layer Variable מחזיר undefined?
שלוש סיבות נפוצות נובעות מהכללים שבתיעוד. ערכים ב-Data Layer נשמרים רק באותו עמוד, כך שערך שנדחף בעמוד קודם כבר לא קיים. שמות המפתחות חייבים להיות עקביים, כי visitorType ו-visitor_type הם שני מפתחות שונים. סיבה שלישית היא תזמון: הערך נדחף אחרי האירוע שבו התג נורה. בודקים את זה ב-Preview על האירוע המדויק.
מה ההבדל בין Lookup Table ל-RegEx Table?
Lookup Table ממפה ערך קבוע של משתנה קלט לערך פלט. RegEx Table עושה את אותו דבר עם תבניות של ביטויים רגולריים. לפי התיעוד, RegEx Table נבדק מלמעלה למטה וההתאמה הראשונה מחזירה את הפלט. כברירת מחדל התבנית חייבת להתאים למחרוזת כולה בלי רגישות לאותיות גדולות וקטנות. יש בו גם Set Default Value למקרה שאין התאמה.
איך כותבים משתנה Custom JavaScript ב-GTM?
לפי התיעוד הקוד חייב להיות פונקציה אנונימית שמחזירה ערך. אפשר להפנות בתוכה למשתנים אחרים בשמם בין סוגריים מסולסלים כפולים. לפני שכותבים קוד כדאי לבדוק אם סוג מוכן מחזיר את אותו ערך: JavaScript Variable למשתנה גלובלי, DOM Element לטקסט של אלמנט, 1st Party Cookie לעוגייה או Format Value להמרת אותיות.
מה זה Format Value במשתנה של GTM?
Format Value הוא חלק בתחתית ההגדרה של משתנה בהגדרת משתמש שמשנה את הערך אחרי הקריאה. האפשרויות כוללות Change Case to לאותיות קטנות או גדולות, Convert null to, Convert undefined to, Convert true to ו-Convert false to. לפי התיעוד, כשמסמנים כמה אפשרויות הן מופעלות מלמעלה למטה לפי הסדר שבו הן מופיעות.
מה השורה התחתונה?
משתנים הם המקום שבו קונטיינר נשאר נקי או מסתבך. קונטיינר טוב נשען על מעט סוגים: Data Layer Variable לכל מה שהאתר מדווח, משתנים מובנים לעמוד ולקליק, Constant למזהים וטבלת Lookup או RegEx כשאותו תג צריך ערך שונה בהקשרים שונים. Custom JavaScript נשאר למקרים שבאמת אין להם סוג מוכן. את המקום של המשתנים בתמונה הכוללת תמצאו במדריך המלא ל-Google Tag Manager. סידור המשתנים והמוסכמות הוא חלק קבוע משירות הטמעת Google Tag Manager שלנו. אם יש לכם קונטיינר עם עשרות משתנים שאף אחד לא בטוח מה הם מחזירים, כתבו לנו.
מקורות
Tag Manager Help: About variables, Tag Manager Help: Built-in variables, Tag Manager Help: Built-in variables for web containers, Tag Manager Help: User-defined variable types for web, Tag Manager Help: Format values in user-defined web variables, Google for Developers: The data layer
