תארו לעצמכם: הגדרתם את Webvisor, אבל הפעלות לא מוקלטות. קונסולת הדפדפן מלאה בשגיאות CSP. נשמע מוכר? במשך יותר מ-10 שנים, ביצענו יותר מ-500 ביקורות אתרי Bitrix ומצאנו בעיות Webvisor בכל אתר שלישי. נראה לכם כיצד להגדיר כראוי את Webvisor על 1C-Bitrix כך שהקלטת הפעלות תעבוד ביציבות וללא אובדן נתונים. הצוות שלנו צבר ניסיון על מאות פרויקטים—מחנויות מקוונות קטנות ועד קטלוגים גדולים עם מיליוני פריטים.
מדוע Webvisor לעתים קרובות לא עובד על Bitrix?
Webvisor לא יעבוד על אתר HTTPS עם כותרות CSP שגויות—הקלטת הפעלות עוברת דרך iframe של Yandex, והדפדפן חוסם אותה אם Content-Security-Policy לא מורשה ב-frame-ancestors. הסיבה הנפוצה השנייה: תג Metrica מוכנס דרך Google Tag Manager, GTM נטען בצורה אסינכרונית, ו-Webvisor מאותחל לאחר שהמשתמש כבר ביצע את הפעולות הראשונות שלו—תחילת ההפעלה אובדת. שלישית—ניווט AJAX: ללא קריאה מפורשת ל-ym('hit') לאחר כל מעבר, Webvisor מקליט רק את העמוד הראשון. לפי הסטטיסטיקות שלנו, 70% מהאתרים עם ניווט AJAX מאבדים עד 40% מההפעלות בגלל שגיאה זו.
כיצד למקם כראוי את תג Metrica?
Yandex דורש למקם את התג גבוה ככל האפשר ב-<head>. ב-Bitrix, השיטה הסטנדרטית היא הכנסה דרך אירוע OnBeforeProlog ב-init.php או ישירות בקובץ prolog /bitrix/templates/ШАБЛОН/header.php.
ב-/bitrix/php_interface/init.php:
AddEventHandler('main', 'OnBeforeProlog', function() { ob_start(); ?> <!-- Яндекс.Метрика --> <script> (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; var z = m[i],d=e.createElement(t),n=e.getElementsByTagName(t)[0]; d.async=1;d.src=r;d.id='metrika-'; n.parentNode.insertBefore(d,n); z(i,'init', { id: XXXXXXXX, webvisor: true, clickmap: true, trackLinks: true }); })(window, document, 'script', 'https://cdn.jsdelivr.net/npm/yandex-metrika@latest/metrika.js', 'ym'); </script> <!-- /Яндекс.Метрика --> <?php $html = ob_get_clean(); $GLOBALS['APPLICATION']->AddHeadString($html, true); }); לחלופין, השתמשו ברכיב AddEventHandler('main', 'OnBeforeProlog', function() { ob_start(); ?> <!-- Яндекс.Метрика --> <script> (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; var z = m[i],d=e.createElement(t),n=e.getElementsByTagName(t)[0]; d.async=1;d.src=r;d.id='metrika-'; n.parentNode.insertBefore(d,n); z(i,'init', { id: XXXXXXXX, webvisor: true, clickmap: true, trackLinks: true }); })(window, document, 'script', 'https://cdn.jsdelivr.net/npm/yandex-metrika@latest/metrika.js', 'ym'); </script> <!-- /Яндекс.Метрика --> <?php $html = ob_get_clean(); $GLOBALS['APPLICATION']->AddHeadString($html, true); }); הסטנדרטי—הוא במודול bitrix:metrika ומותקן מה-Marketplace. עם זאת, הגישה שלנו דרך fileman אמינה יותר: היא מבטיחה טעינה לפני כל סקריפט אחר. הטבלה שלהלן משווה בין שתי השיטות.
| פרמטר | דרך init.php (הגישה שלנו) | דרך רכיב bitrix:metrika |
|---|---|---|
| בקרת טעינה | מלאה—קוד מוכנס לפני ob_start | תלוי בתבנית, עלול להיטען אחרי jQuery |
| תאימות CSP | מוגדר ידנית ב-init.php | דורש שינוי רכיב |
| תמיכת AJAX | נדרש handler נוסף | נדרש handler נוסף |
| המלצה | לפרויקטים עם תבניות מותאמות אישית | להתקנות טיפוסיות |
אילו הגדרות CSP נדרשות עבור Webvisor?
Webvisor מקליט את המסך דרך OnBeforeProlog בדומיין <iframe title="Embedded content">. אם לשרת (nginx או דרך כותרות PHP) יש CSP מחמיר, ההקלטה לא תתחיל—הקונסולה תראה שגיאה webvisor.com.
סט מינימלי של הוראות עבור Webvisor כדי שיפעל:
Content-Security-Policy: frame-src 'self' https://webvisor.com; script-src 'self' 'unsafe-inline' https://mc.yandex.ru https://cdn.jsdelivr.net; img-src 'self' data: https://mc.yandex.ru; ב-Bitrix, ניתן להגדיר כותרות ב-Refused to frame ... because an ancestor violates the following Content Security Policy directive או ב-Content-Security-Policy: frame-src 'self' https://webvisor.com; script-src 'self' 'unsafe-inline' https://mc.yandex.ru https://cdn.jsdelivr.net; img-src 'self' data: https://mc.yandex.ru; דרך /bitrix/.htaccess—אבל רק לפני פלט ה-HTML הראשון. אם אתם משתמשים ב-init.php ב-prolog, זו לא בעיה. קראו עוד על הוראות CSP ב-MDN.
מה לעשות אם Webvisor לא רואה מעברי AJAX?
רוב התבניות המודרניות של Bitrix משתמשות בניווט AJAX (BX.ajax, רכיב header()). בעת מעבר ללא טעינת עמוד מחדש, Webvisor לא מקליט את שינוי ה-URL—כל הביקור מופיע כעמוד יחיד בהקלטת ההפעלה.
פתרון: קראו ל-ob_start() לאחר כל מעבר AJAX. ב-Bitrix, יש אירוע bitrix:main.ajaxlinks—התחברו אליו:
BX.addCustomEvent('onAjaxSuccess', function(event) { if (typeof ym !== 'undefined') { ym(XXXXXXXX, 'hit', window.location.href); } }); ללא זה, נתוני Webvisor יהיו שגויים: כל מעברי הקטלוג יוקלטו כביקור יחיד בעמוד הכניסה. הניסיון שלנו מראה שבעיה זו מתרחשת ב-70% מהאתרים עם ניווט AJAX.
פעם הגדרנו את Webvisor לחנות מקוונת עם קטלוג של 100,000 מוצרים. הבעיה הייתה שמעברי AJAX לא הפעילו את ym(XXXXXXXX, 'hit', window.location.href), ו-Webvisor הראה רק עמוד אחד לכל הפעלה. לאחר יישום ה-handler, ההקלטה תפסה עד 15 עמודים לכל ביקור—ונתנה תמונה מלאה של התנהגות המשתמש.
כיצד לוודא ש-Webvisor עובד?
לאחר ההגדרה, בדקו את סעיף 'ניטור' ב-Webvisor. אם הפעלות מוקלטות אבל הווידאו שחור, הבעיה היא תוכן מעורב (משאבי HTTP באתר HTTPS). אם לא מופיעות הפעלות כלל, הסתכלו בכרטיסיית Network ב-DevTools על בקשות ל-BX.addCustomEvent('onAjaxSuccess', ...): סטטוס 200 אומר שהמונה עובד אבל הנתונים עדיין לא עובדו (עיכוב של עד 20 דקות להפעלות חדשות).
מה כלול בהגדרת Webvisor במפתח מלא
אנו מציעים הגדרה מקיפה הכוללת:
| שלב | פעולה | תוצאה |
|---|---|---|
| 1. ביקורת | בדיקת תג Metrica הנוכחי, CSP, ניווט AJAX | דוח עם שגיאות והמלצות |
| 2. יישום | התקנת מונה ב-init.php, הגדרת CSP, handler AJAX | Webvisor עובד עם הקלטה נכונה |
| 3. בדיקות | אימות בניטור, הקלטת הפעלת בדיקה | אישור תקינות |
| 4. תיעוד | תיאור העבודה שבוצעה, קונפיגורציות, הוראות תמיכה | הערה ארכיטקטונית |
אנו מבטיחים שאחרי העבודה שלנו, Webvisor יקליט 100% מההפעלות (למעט חסימות דפדפן). הודות ל-10+ שנות ניסיון ומאות פרויקטים מיושמים, אנו מכירים את כל המלכודות. אם אתם נתקלים בבעיות, קבלו ייעוץ חינם. צרו קשר כדי להעריך את לוח הזמנים של הפרויקט שלכם. הזמינו הגדרת Webvisor במפתח מלא—אנו נתקן בעיות הקלטת הפעלות תוך 2-3 ימים.







