הגדרת Optimizely לבדיקות A/B באתר

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

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת Optimizely לבדיקות A/B באתר
בינוני
~2-3 ימים

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

שאלות נפוצות

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

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1201
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    619

Optimizely A/B בדיקות: היכן הניסוי נשבר

Optimizely A/B בדיקות נשברות לא בשלב ההשערה, אלא בשלב הגדרת הניסוי. כשל אופייני — חוסר סנכרון בין הווריאציות: חלק מהתעבורה מקבל וריאציה A בצד השרת, בעוד הסקריפט בצד הלקוח מספיק לרנדר את B לפני שההחלטה מיושמת. המשתמש רואה הבהוב של התוכן, המדד מתעד תרחיש שלא קיים, והמסקנות מהבדיקה מתגלות כלא תקפות.

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

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

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

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

מה נותנת הגדרה נכונה של ניסויים

מהירות השקת היפותזות

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

שיעור הבדיקות התקפות

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

התראות שווא

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

יכולת שחזור התוצאות

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

דרכי חיבור Optimizely: השוואת מצבים

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

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

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

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

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

אפשרות מתי מתאימה מגבלות
סניפט צד לקוח התחלה מהירה, תיקוני ממשק שיווקיים, בדיקות פשוטות תלוי בחוסמי פרסומות, ייתכן תוכן «מהבהב», חלק מהתנועה נופל מהמדגם
SDK בצד שרת תרחישים קריטיים להשהיה, פרסונליזציה, תנועה גבוהה דורש עבודת בקאנד, ניהול זיהוי ומטמון החלטות
תרשים היברידי נדרשים כיסוי שרת וגמישות לקוח בו-זמנית דיבאג מורכב יותר: שתי שכבות שיש לתאם ביניהן לפי אירועים

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

שלבי הטמעה והגדרה של A/B Testing

הטמעת A/B Testing אינה מתחילה ביצירת ניסוי, אלא בביקורת של מה שכבר נמדד באתר. אם המטרות באנליטיקה מוגדרות באופן פורמלי, והאירועים אינם משקפים את צעדי המשתמש בפועל, כל בדיקה תניב תוצאה מעוותת — וההחלטה תתקבל על סמך נתונים שגויים.

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

  1. ביקורת אנליטיקה. בודקים את תקינות המטרות, האירועים והסימון, משווים את הנתונים לפעולות המשתמש בפועל, מתעדים פערים.
  2. תכנון המערך. מנסחים השערה, בוחרים מדד עיקרי ומדדי בקרה, מחשבים את נפח התנועה הנדרש ואת משך הבדיקה.
  3. הגדרת אירועים ומטרות. מגדירים טריגרים, פלחי קהל, כללי הצגת וריאנטים — כך שכל וריאנט יקבל זרימה דומה.
  4. הרכבת הווריאנטים. מכינים את השינויים באתר ומחברים אותם לניסוי בלי להשפיע על מהירות הטעינה ועל התנהגות שאר העמודים.
  5. בדיקה לפני ההרצה. מריצים את הבדיקה בסביבת בדיקה: מוודאים שהאירועים מופעלים, שהווריאנטים מוקצים כראוי, ושהנתונים נכתבים לאנליטיקה.
  6. הרצה ובקרה. עוקבים אחר מהלך הניסוי, בודקים אחידות בהקצאה והיעדר אנומליות בנתונים.
  7. ניתוח ומסירת תיעוד. מתעדים את התוצאה, מתארים את ההגדרות, האירועים והכללים — כדי שהצוות יוכל להריץ בדיקות חדשות באופן עצמאי.

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

ארטיפקטים: קונפיגורציות, סכמות אירועים, נהלים

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

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

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

מקרה בוחן: כיצד צומצם שיעור הבדיקות הלא-תקפות פי שלושה

הפרויקט — חנות מקוונת עם זרם מתמשך של השערות: הצוות השיק 8-10 ניסויים בחודש, אך ההחלטות לגביהם בוטלו באופן קבוע. ניתוח הראה ש-40% מהבדיקות הניבו מובהקות כוזבת — אפקט שלא שוחזר בשבוע שלאחר מכן.

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

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

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

מה שינו בתהליך

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

תוצאה

שיעור הבדיקות עם מובהקות כוזבת ירד מ-40% ל-12%, וזמן השקת ההשערה התקצר מ-5 ל-2 ימים — רובו הוקדש להשוואה ידנית, שכיום אוטומטית. הצוות החל לעצור השערות חלשות לעתים קרובות יותר ולא לבזבז עליהן תנועה. אפקט נפרד — צפיות: החלטות מוצר נשענות על נתונים ניתנים לשחזור, ולא על צירוף מקרים מוצלח בדוח.

במה שונה ניסוי בצד השרת מניסוי בצד הלקוח?

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

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

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

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

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

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

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

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

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

שאלות טכניות נפוצות בנוגע להגדרת Optimizely

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

כיצד Optimizely פועל באפליקציות עמוד יחיד, שבהן אין רענון עמוד?

התרחיש הקלאסי של "סקריפט ב-head + הצגת וריאנט בעת הטעינה" אינו עובד ב-SPA: מעבר בין מסכים אינו מרענן את המסמך, והפעלת הניסוי אינה מתרחשת. הפתרון — הפעלה לפי אירועי ניתוב: מאזינים לשינוי ה-URL וקוראים להפעלה במפורש ברגע שהרכיב הרצוי מרונדר.

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

מה לעשות אם לחלק מהמשתמשים מותקן חוסם פרסומות?

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

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

כיצד להימנע מחפיפת בדיקות באותו עמוד?

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

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

בואו נדון במשימת ה-A/B testing שלכם

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

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

מה אתם מקבלים בסוף:

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

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