ליקספיקס – גוגל אנליטיקס, גוגל תג מנג'ר ואופטימיזציה

טיפול ב-not set ותקלות נוספות בגוגל אנליטיקס 4 (כולל פתרונות)

יש שאלות שתמיד חוזרות על עצמן בהקשר של גוגל אנליטיקס 4.

אני פעיל במספר פורומים ועונה לאנשים על שאלות שקשורות לגוגל אנליטיקס 4, ולפעמים אני מוצא את עצמי עונה על אותן השאלות שוב ושוב.

החלטתי לכתוב את המדריך הזה, שיתעדכן כל הזמן, וארכז בו את השאלות הנפוצות שאני נתקל בהן, כדי שבפעם הבאה שמשהו לא יסתדר לכם עם הנתונים – תוכלו לבוא לכאן ולראות אם יש פה פתרון.

אקדים ואומר שיש כל מיני מצבים של דאטה חסר באנליטיקס. לפעמים זה unassigned, לפעמים not set, לפעמים other ולפעמים סתם שורה ריקה.

לכל אחד מהמצבים האלו יש סיבה, ואם רוצים לפתור את הבעיה – צריך להגדיר בדיוק מה מופיע ובאיזה דוח.

not set זה לא unassigned ולא other ולא direct.

בנוסף, not set בדוח אחד לא דומה ל-not set בדוח אחר, אז חשוב לדייק.

1. שורות ריקות בדוחות

הבעיה: לפעמים קורה שלא מופיע שום ערך בשורה בטבלה. לרוב זה קורה בדיימנשן של מקור התנועה, אבל גם בדיימנשנס אחרים.

זה לא not set ולא unassigned, אלא פשוט שורה ריקה. ככה:

הפתרון: פשוט מאוד, לרוב מדובר בדאטה של היום/אתמול שפשוט עוד לא עבר עיבוד מלא, ואם תחזרו כעבור 24 שעות זה יסתדר.

2. unassigned בדוחות

לרוב זה יקרה בדיימנשן Session default channel group:

חשוב לציין ש-channel group זה לא מקור תנועה, אלא קיבוץ של מספר מקורות תנועה.

לגוגל יש סט של כללים שעל פיהם היא משייכת את מקורות התנועה השונים לקבוצות השונות.

למשל אם הדימנשן Source platform הוא Google Ads, וגם הדימנשן Google Ads ad network type הוא Google Search או Google Partners, אז הערך של Session default channel group יהיה Paid Search:

אם יש לכם מקור תנועה שלא עונה על סט הכללים שמופיע בלינק – הוא יכנס תחת unassigned פשוט כי גוגל לא יודעת לאן לשייך אותו.

זה לא יהיה direct כי מקור התנועה אכן קיים, אבל הוא פשוט לא עונה על הכללים המובנים ולכן לא משוייך לשום channel group.

כדי לאבחן מה היה מקור התנועה האמיתי, צריך פשוט להוסיף secondary dimension של Session source / medium  (1) ואז לסנן לפי unassigned (2):

בדוגמא אמנם טשטשתי את הערכים, אבל במקרה הזה מדובר ב-UTMים שלא עונים על הקריטריונים של הקבוצות הדיפולטיביות.

הפתרון:

הפתרון הכי פשוט הוא לוודא שה-UTMים שאתם שולחים עונים על הקריטריונים של גוגל, כדי שהערכים יכנסו להגדרות ברירת המחדל.

אפשרות שניה – ליצור custom channel group כאן, אבל קחו בחשבון שה-default channel group עדיין יכניס את מקורות התנועה האלו תחת unassigned:

אפשרות שלישית – תשתמשו ב-session source / medium במקום channel group.

3. not set ב-Session source / medium

הבעיה: ראיתם Unassigned בchannel group, הוספתם Session source / medium אבל עדיין מופיע לכם שם not set – למה זה קורה?

במקרה הזה צריך לבדוק מה הגורם לבעיה:

אפשרות 1: אתם שולחים איוונטים באמצעות Measurement Protocol, אבל שכחתם לצרף את הפרמטר session_id שהכרחי כדי שגוגל אנליטיקס יוכל לשייך את האיוונט לסשן המתאים.

תחשבו שהגולש מגיע לאתר מגוגל אורגני למשל, עושה מה שעושה, מבצע רכישה ואז אתם שולחים את האיוונט של הרכישה באמצעות MP.

גם אם שלחתם client_id, איך גוגל אמור לדעת לאיזה סשן של הגולש הוא צריך לשייך את האיוונט הזה?

ואם האיוונט לא משוייך לשום סשן – הגיוני שהערך של Session source / medium יהיה not set.

הפתרון במקרה הזה הוא כמובן לצרף את הפרמטר session_id לרשימת הפרמטרים:

אפשרות 2: האיוונט session_start חסר

אם אתם לא עושים שימוש בשליחת איוונטים אופליין באמצעות Measurement Protocol, הדבר הבא שעליכם לבדוק זה האם יש לכם סשנים שלא מכילים את האיוונט session_start.

צרו את הסגמנט הבא (שימו לב שהשתמשתי ב-exclude), והשוו את מספר הסשנים שהוא תופס למספר הסשנים שיש להם session source / medium = not set ותראו שברוב הפעמים המספר מאוד קרוב:

עכשיו תשאלו – מה יכול לגרום לכך שהאיוונט session_start, שאמור להישלח באופן אוטומטי, לא נשלח?!

אין לי תשובה טובה לזה. יש דעות שזה קשור ל-server side tagging אבל מכל הבדיקות שעשיתי זה לא בהכרח קשור.

ישנם עוד מקרים שיכולים לגרום למקור התנועה להיות not set אבל הם יחסית בשוליים.

4. not set ב-landing page

כמו שאמרתי בהתחלה, הסיבות ל-not set ב-landing page שונות לחלוטין מהסיבות ל-not set ב-session source / medium.

הבעיה נובעת מזה שאין איוונט של page_view שפותח את הסשן, ואם אין page_view – גוגל אנליטיקס לא יודע מה היה דף הנחיתה.

אבל איך יכול להיות שהביקור התחיל בלי שהגולש צפה בדף כלשהוא?

פשוט מאוד: לרוב זה קורה בגלל שהגולש עוזב את האתר באמצע הסשן והולך לעשות משהו, ואז כעבור 30 דקות הוא חוזר ומבצע איוונט של גלילה או לחיצה על משהו.

אחרי 30 דקות הסשן כבר הסתיים, והאיוונט של הגלילה/לחיצה מתחיל סשן חדש מבלי לשלוח page_view, וכך קורה שאין landing page לסשן.

הפתרון: באופן טכני, אפשר פשוט להאריך את ה-session timeout ל-8 שעות וכך בעצם לצמצם (אבל לא למנוע לחלוטין) את כמות הפעמים שהסיטואציה הזו קורית.

כדי לעשות את זה לכו להגדרות של ה-data stream, לחצו על configure tag settings ואז adjust session timeout, ושם תוכלו לשחק עם הזמן שאחריו הסשן יסתיים:

חשוב לציין שזה פתרון עקיף שיש לו השלכות, ולפני שעושים את השינוי צריך לבחון כל מקרה לגופו.

5. (other)

הבעיה: אתם מסתכלים על דוח, ובמקום לראות ערכים אתם רואים (other):

אז ממה זה נגרם?

ובכן, נגיד שאתם רוצים לראות ״כמה דפים נצפו בתאריך מסוים״. גוגל צריכה לעבור על כללללל השורות בטבלה, ולספור כמה פעמים מופיע כל URL.

אבל מה קורה כשיש לכם יותר מדי URLים שונים?

גוגל אומרת ״עד כאן. אני לא הולכת לעבור על מאות אלפי שורות בשביל היוזר החינמי הזה״, ואז היא עוברת רק על השורות שחוזרות על עצמן הכי הרבה, ואותן היא מציגה בדוח.

את כל הערכים שלא חוזרים על עצמם כל כך הרבה היא מקבצת ומציגה תחת (other).

בצילום המסך ששמתי קודם תוכלו לראות שיש כמעט 300K שורות ייחודיות בדוח הזה, וזה נגרם בגלל פרמטרים ייחודיים שגרמו לאותו URL להישלח בהמון וריאציות שונות.

תחשבו שיש לכם מנוע חיפוש באתר, ובכל פעם שמישהו מחפש מילה כלשהיא הוא מגיע לעמוד שמכיל את מונח החיפוש.

לחילופין – פילטרים בחנות איקומרס, שמרפרשים את העמוד עם הפרמטרים של הפילטר.

ה-URL הבסיסי נשאר אותו דבר (נגיד www.site.com/search), אבל לאנליטיקס נשלח URL ייחודי שמכיל את הקומבינציה של הפילטרים אותם הגולש בחר, מה שיכול ליצור מאות אלפי קומבינציות ייחודיות.

תראו כמה פילטרים יש באתר bike24.com למשל:

השתמשתי ב-4 פילטרים בלבד, וזה ה-URL שנוצר:

עכשיו תחשבו על מליוני הגולשים שמשתמשים באתר, וכל אחד מהם משתמש בפילטרים שונים.

בקיצור הבנתם את הבעיה.

כאמור, כדי לחסוך בעלויות גוגל תיקח את כל הקומבינציות הייחודיות שאין להם הרבה מופעים בטבלה, ותקבץ אותם תחת (other):

קוראים לזה cardinality.

מה בדיוק נחשב לקומבינציה ייחודית? המספרים המדוייקים לא מפורסמים, ויש כמה פרמטים שמשפיעים על זה:

1. קודם כל באנליטיקס הרגיל הרף יהיה נמוך יותר מאשר בגרסת 360 שבתשלום.

2. יש דוחות שבהם הרף יהיה גבוה יותר, כמו למשל דוח pages and screens, ולכן גם אם הוא יכיל עשרות אלפי ערכים ייחודיים, גוגל עדיין תציג את כולם, בניגוד לדוחות אחרים שבהם הרף יהיה נמוך יותר.

3. המורכבות של הדוח גם יכולה להשפיע, ולכן אם תוסיפו secondary dimension יש יותר סיכוי שתקבלו (other) מאשר אם לא תוסיפו.

בימים הראשונים של גוגל אנליטיקס 4 זו היתה ממש בעיה רצינית, כי המון דוחות היו ״מלוכלכים״ בזה. בהמשך גוגל תיקנו את זה, וכיום הבעיה נסבלת.

הפתרון: בדקו אם יש לכם מנוע חיפוש/פילטר כלשהוא באתר, או משהו שמייצר הרבה URLים ייחודיים, ונסו לחשוב איך לצמצם ולאחד אותם.

בכל מקרה אתם יכולים להשתמש בדוחות ה-Explorations, כי ה-(other) מופיע רק בדוחות הרגילים שעוברים אגרגציה. ה-Explorations לעומת זאת מביאים לכם מידע ללא אגרגציה.

פתרון נוסף הוא כמובן להשתמש בביג קוורי.

7. האיוונטים לא מופיעים בדוח, למרות שבדיבאגר הם כן מופיעים

הבעיה: שלחתם איוונט, אתם רואים שהוא נשלח בצורה תקינה בתג מנג׳ר ואפילו רואים אותו בדיבאגר של גוגל אנליטיקס (כלומר הוא לא רק נשלח – הוא גם הגיע), אבל משום מה אתם לא רואים את האיוונטים האלו בדוחות.

הפתרון פשוט – בדקו שאין לכם Google Signals פעיל. ברוב המקרים זו תהיה הבעיה, כי גוגל סיגנלס עלול לא להציג את האיוונטים האלו כדי ״לשמור על פרטיות הגולש״, כך לפחות גוגל טוענת…

כתבתי על זה באריכות כאן.

אני ממש מציע לכם לקרוא (אם עוד לא עשיתם את זה) כי יותר מדי משתמשים מפעילים את האופציה הזו וסובלים אחרי זה מדאטה לא אמין.

עדכון: גוגל בדיוק שחררו פיצ׳ר חדש, שמאפשר להשתמש ביתרונות של גוגל סיגנלס (בעיקר יצירת קהלים וייבוא לגוגל אדס) מבלי שזה ישפיע על המדדים באנליטיקס. כל שעליכם לעשות זה לכבות את המתג הזה, תחת הגדרות Data collection:

8. המספרים של השורות לא מסתכמים לטוטאל

הבעיה: אם יצא לכם לעשות export לאחד הדוחות ולסכום באקסל את השורות, בטח שמתם לב שזה לא תואם למה שמופיע בטוטאל בראש הדוח:

הסיבה: פשוט מאוד. כדי לספק לכם את הדאטה במהירות, גוגל צריכה לתשאל את הדאטה בייס הגולמי בצד שלה, וזה לוקח זמן וכרוך בעלויות לא מבוטלות.

כדי לעשות זה במהירות ובזול גוגל משתמשת באלגוריתם בשם HyperLogLog++ שמאפשר לה לספק הערכה של הכמות האמיתית.

נכון, זה אומר שכשאתם מסתכלים על יוזרים או סשנים זו לא בהכרח הכמות המדוייקת שביקרה אצלכם באתר, אבל זו (אמורה להיות) הערכה מספיק מדוייקת בשביל לקבל באמצעותה החלטות.

בכל מקרה, אם הטוטאל שונה מסכום השורות זה בגלל שכל אחד מהם מחושב בנפרד, ומכיוון שמדובר באלגוריתם – הוא לא תמיד יחזיר תוצאות זהות אחד לאחד.

אין לזה ממש פתרון, מלבד להשתמש ב-BigQuery ששם אתם מתשאלים את הדאטה הגולמי.

סיכום:

יש עוד הרבה בעיות נפוצות אבל הפוסט הזה מתחיל להיות ארוך. בהמשך אעדכן.