רמת קושי 3

נלחמים בסמפלינג - ניקוי פרמטרים אקראיים מכתובת האתר

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

אסף טרפיקנט | 11 אפריל, 2020
הורדת ספר

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

למי זה מתאים

לעיתים האתר שלכם כולל כתובות נורא יפות כמו domain.com/page ולפעמים מערכת ניהול התוכן משרשרת לכתובת הדף ערימות של פרמטרים שמייצרים משהו שיכול להיראות ככה:

domain.com/page/?apd=123&DS=2544&PartnerID=664

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

אז איפה הבעיה

לכתובות בעלות פרמטרים רבים יכולות להיות השלכות רבות על תפקיד האתר ומדידתו. אחת ההשפעות המובהקות והמוכרות יותר, זה על גוגל. שני דפים זהים, שכל מה שמבחין ביניהם זה פרמטר אחד בכתובת האתר עלולים לייצר "תוכן כפול" ומכאן להשפיע על הביצועים בגוגל, אינדוקס יתר של האתר ופגיעה במדדי SEO. כל זה יכול להפתר על ידי שימוש בתגיות Canonical המספרות לגוגל מה הדף הראשי (המאסטר), כך שהוא יתעלם מהשאר. עם זאת, זה לא מונע מהבוטים של גוגל לרוץ גם על הדפים האלה. מיותר אבל פתיר באמצעים שונים ואני לא אכנס לזה כאן כי זה רלוונטי לעולם ה SEO. השאלה היא איך זה משפיע על כלי האנליטיקס?

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

התוצאה: דף index.html פשוט, מקבל מליון מופעים שונים!! על דף אחד! ואפשר לראות שלכל "דף" כזה יש Pageview אחד בלבד. לא רק זה, כמות כזו גדולה של "דפים" מעמיסה על גוגל אנליטיקס ותהפוך כל דוח פשוט למשימה מורכבת שלוקחת זמן רב ושאפילו גורמת לסמפלינג משמעותי בנתונים:

 

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

הדרך הקלה והבעייתית להתמודד עם זה

אחת הדרכים המהירות (אבל עם חסרון שאציג בהמשך) להתמודד עם שפע הפרמטרים האלה, נמצאת בממשק ה Admin. שם, תחת ה View Settings, תמצאו את Exclude URL Query Parameters. שם אפשר להזין את רשימת הפרמטרים שאינכם מעוניינים בהם, וגוגל אנליטיקס יעלים אותם מהמדידה ויקצר משמעותית את אורך ה URL.

אחלה. אבל…

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

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

 מכיוון שאנחנו לא יודעים אילו פרמטרים הולכים להגיע אלינו למערכת, החלטתי שבאמצעות Google Tag Manager אני אמחק את כל הפרמטרים באופן גורף. כן, כן. את כולם. גם את הטובים וגם את הרעים, ואשאיר URL נקי וטהור מפרמטרים, אבל, שנייה לפני שאשלח אותו לגוגל אנליטיקס, אוסיף לו בחזרה את הפרמטרים שהלקוח רצה שיישארו.

איך עושים את זה עם Google Tag Manager

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

עבור כל פרמטר כזה, אנחנו מייצרים Variable שכל התפקיד שלו, זה לשאוב את הערך מה URL. כלומר, גולש נכנס לאתר, לדף הבית, ו GTM לפני שהוא שולח את הדף לגוגל אנליטיקס, שולף את הערכים מהפרמטרים החשובים ו"שומר אותם" בצד. אז אם יש לנו עשרה פרמטרים חשובים, אנחנו צריכים לייצר עשרה Variables. הנה דוגמא לאחד ששולף את הערך של הפרמטר CampaignD למשל:

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

כדי לעשות את זה, נייצר Variable חדש מסוג JavaScript, נקרא לו נניח Clean Path ונזין בו את הקוד הבא:

function() {
var final = {{url path}}; 
 final +='?';
   if(
     ({{language}})
   )
   {
   final +='&lang={{language}}';
   }
if(
     ({{mediaID}})
   )
   {
   final +='&mediaID={{mediaID}}';
   }
if(
     ({{campaignId}})
   )
   {
   final +='&campaignId={{campaignId}}';
   }
return final;
}

הסבר לקוד:

  1. אני מייצר משתנה בשם Final והוא בהתחלה מכיל את ה URL Path המכיל את כתובת האתר ללא שום פרמטר. זה משתנה פנימי של GTM ואין צורך להגדיר אותו.
  2. אחר כך אני מצמיד לכתובת את סימן השאלה ? (לא חובה..)
  3. בשלב הבא, אני שואל את המערכת האם קיים ערך במשתנים שיצרתי מקודם. נניח CampiagnID. אם יש, הוא מצמיד אותו לכתובת האתר. אם לא, הוא ממשיך לפרמטר הבא. וכך, הפונקציה הזו מדביקה פרמטר אחר פרמטר. רק את הפרמטרים שאנו רוצים ורק את אלו עם ערכים. כמו שאמרתי – שואפים למינימום.
  4. השורה האחרונה פולטת החוצה את הכתובת הסופית.

השלב הבא, זה לקחת את הכתובת הסופית שיצרנו ושלוח אותה לגוגל אנליטיקס. אז נכנס ל Tag של גוגל אנליטיקס, ונגדיר ל Tag שלא יקח את ה URL הרגיל של האתר, אלא את ה URL הנקי.

תחת More Settings, הקליקו על Fields to Set ואז בעמודת Field Name הזינו Page. בעמודה השנייה הזינו את השם של ה Variable שיצרנו זה עתה – Clean Path.

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

 

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

בשורה התחתונה

ניצחנו את הסמפלינג בקרב אבל לא במלחמה. גם זה משהו (:

תגובות

Please Post Your Comments & Reviews

האימייל לא יוצג באתר. שדות החובה מסומנים *

אסף טרפיקנט
רוצה לקרוא אחר כך?

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

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

למי זה מתאים

לעיתים האתר שלכם כולל כתובות נורא יפות כמו domain.com/page ולפעמים מערכת ניהול התוכן משרשרת לכתובת הדף ערימות של פרמטרים שמייצרים משהו שיכול להיראות ככה:

domain.com/page/?apd=123&DS=2544&PartnerID=664

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

אז איפה הבעיה

לכתובות בעלות פרמטרים רבים יכולות להיות השלכות רבות על תפקיד האתר ומדידתו. אחת ההשפעות המובהקות והמוכרות יותר, זה על גוגל. שני דפים זהים, שכל מה שמבחין ביניהם זה פרמטר אחד בכתובת האתר עלולים לייצר "תוכן כפול" ומכאן להשפיע על הביצועים בגוגל, אינדוקס יתר של האתר ופגיעה במדדי SEO. כל זה יכול להפתר על ידי שימוש בתגיות Canonical המספרות לגוגל מה הדף הראשי (המאסטר), כך שהוא יתעלם מהשאר. עם זאת, זה לא מונע מהבוטים של גוגל לרוץ גם על הדפים האלה. מיותר אבל פתיר באמצעים שונים ואני לא אכנס לזה כאן כי זה רלוונטי לעולם ה SEO. השאלה היא איך זה משפיע על כלי האנליטיקס?

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

התוצאה: דף index.html פשוט, מקבל מליון מופעים שונים!! על דף אחד! ואפשר לראות שלכל "דף" כזה יש Pageview אחד בלבד. לא רק זה, כמות כזו גדולה של "דפים" מעמיסה על גוגל אנליטיקס ותהפוך כל דוח פשוט למשימה מורכבת שלוקחת זמן רב ושאפילו גורמת לסמפלינג משמעותי בנתונים:

 

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

הדרך הקלה והבעייתית להתמודד עם זה

אחת הדרכים המהירות (אבל עם חסרון שאציג בהמשך) להתמודד עם שפע הפרמטרים האלה, נמצאת בממשק ה Admin. שם, תחת ה View Settings, תמצאו את Exclude URL Query Parameters. שם אפשר להזין את רשימת הפרמטרים שאינכם מעוניינים בהם, וגוגל אנליטיקס יעלים אותם מהמדידה ויקצר משמעותית את אורך ה URL.

אחלה. אבל…

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

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

 מכיוון שאנחנו לא יודעים אילו פרמטרים הולכים להגיע אלינו למערכת, החלטתי שבאמצעות Google Tag Manager אני אמחק את כל הפרמטרים באופן גורף. כן, כן. את כולם. גם את הטובים וגם את הרעים, ואשאיר URL נקי וטהור מפרמטרים, אבל, שנייה לפני שאשלח אותו לגוגל אנליטיקס, אוסיף לו בחזרה את הפרמטרים שהלקוח רצה שיישארו.

איך עושים את זה עם Google Tag Manager

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

עבור כל פרמטר כזה, אנחנו מייצרים Variable שכל התפקיד שלו, זה לשאוב את הערך מה URL. כלומר, גולש נכנס לאתר, לדף הבית, ו GTM לפני שהוא שולח את הדף לגוגל אנליטיקס, שולף את הערכים מהפרמטרים החשובים ו"שומר אותם" בצד. אז אם יש לנו עשרה פרמטרים חשובים, אנחנו צריכים לייצר עשרה Variables. הנה דוגמא לאחד ששולף את הערך של הפרמטר CampaignD למשל:

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

כדי לעשות את זה, נייצר Variable חדש מסוג JavaScript, נקרא לו נניח Clean Path ונזין בו את הקוד הבא:

function() {
var final = {{url path}}; 
 final +='?';
   if(
     ({{language}})
   )
   {
   final +='&lang={{language}}';
   }
if(
     ({{mediaID}})
   )
   {
   final +='&mediaID={{mediaID}}';
   }
if(
     ({{campaignId}})
   )
   {
   final +='&campaignId={{campaignId}}';
   }
return final;
}

הסבר לקוד:

  1. אני מייצר משתנה בשם Final והוא בהתחלה מכיל את ה URL Path המכיל את כתובת האתר ללא שום פרמטר. זה משתנה פנימי של GTM ואין צורך להגדיר אותו.
  2. אחר כך אני מצמיד לכתובת את סימן השאלה ? (לא חובה..)
  3. בשלב הבא, אני שואל את המערכת האם קיים ערך במשתנים שיצרתי מקודם. נניח CampiagnID. אם יש, הוא מצמיד אותו לכתובת האתר. אם לא, הוא ממשיך לפרמטר הבא. וכך, הפונקציה הזו מדביקה פרמטר אחר פרמטר. רק את הפרמטרים שאנו רוצים ורק את אלו עם ערכים. כמו שאמרתי – שואפים למינימום.
  4. השורה האחרונה פולטת החוצה את הכתובת הסופית.

השלב הבא, זה לקחת את הכתובת הסופית שיצרנו ושלוח אותה לגוגל אנליטיקס. אז נכנס ל Tag של גוגל אנליטיקס, ונגדיר ל Tag שלא יקח את ה URL הרגיל של האתר, אלא את ה URL הנקי.

תחת More Settings, הקליקו על Fields to Set ואז בעמודת Field Name הזינו Page. בעמודה השנייה הזינו את השם של ה Variable שיצרנו זה עתה – Clean Path.

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

 

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

תגובות

Please Post Your Comments & Reviews

האימייל לא יוצג באתר. שדות החובה מסומנים *