Yandex.Metrica Integration: Goals, E-commerce, Webvisor
Incorrect integration of Yandex.Metrica means lost analytics control. Goals don't fire, e-commerce data isn't transmitted, and Webvisor records empty sessions. The root cause is often overlooked architecture: classic HTML sites require one approach, SPAs on React/Vue/Nuxt another, and server-side rendering (SSR) adds its own complexities. We have audited over 50 projects and identified typical errors: incorrect counter initialization, missing hit calls in SPAs, and dataLayer structure mismatches. According to our data, up to 30% of configured goals don't work due to these issues. Proper integration via dataLayer pushes order transmission accuracy to 95%—versus 50% with basic goal-less setup. We fix these issues at installation, saving you up to 25% of your ad budget through precise conversion data. Our certified team guarantees error-free setup with over 5 years of proven experience.
Comparison of integration approaches by architecture
| Architecture | Setup specifics | Risks |
|---|---|---|
| Classic HTML | Simple counter placement, URL goals | No dynamic events, low e-commerce accuracy (only 50%) |
| SPA (React/Vue) | Requires ym('hit'), JavaScript goals |
Missed virtual pageviews, broken Webvisor |
| SSR (Next/Nuxt) | Client-side counter init, hydration | Conflicts with server rendering, duplicate data |
JavaScript goals in SPAs are 2.5 times more accurate than URL goals because they catch any action, not just URL changes. This proven method improves conversion tracking reliability by up to 40% compared to basic setup.
Counter installation with correct parameters
The basic counter code:
<script type="text/javascript"> (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for(var j=0;j<document.scripts.length;j++){if(document.scripts[j].src===r){return;}} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(COUNTER_ID, "init", { clickmap: true, trackLinks: true, accurateTrackBounce: true, webvisor: true, ecommerce: "dataLayer" }); </script> <noscript><div><img src="https://mc.yandex.ru/watch/COUNTER_ID" style="position:absolute;left:-9999px" alt=""/></div></noscript> The webvisor: true parameter is mandatory for session recording. For SPAs, add ym(COUNTER_ID, 'hit', url) on every route change.
Why Webvisor doesn't record in SPAs?
In SPAs, Webvisor may fail due to missing page reloads. The fix is to explicitly call ym('hit') after each URL change. Example for Vue Router:
router.afterEach((to) => { ym(COUNTER_ID, 'hit', to.fullPath); }); For React Router, use useEffect with route subscription. Check the Metric Debugger to ensure each virtual pageview is captured.
E-commerce data transmission via dataLayer
For online stores, transmitting order data via dataLayer is critical:
window.dataLayer = window.dataLayer || []; window.dataLayer.push({ ecommerce: { purchase: { actionField: { id: orderId, revenue: total, coupon: couponCode }, products: orderItems.map(item => ({ id: item.productId, name: item.name, price: item.price, quantity: item.qty, brand: item.brand, category: item.category })) } } }); "The ecommerce object structure must strictly conform to Yandex.Metrica's specification" (official documentation). Ensure the structure is exact—otherwise data won't appear in reports. If errors occur, check the browser console for messages from Metrica.
5 steps for e-commerce setup in Yandex.Metrica
- Add the
window.dataLayerarray to the page. - Configure the counter with
ecommerce: "dataLayer"parameter. - On purchase, send the
ecommerce.purchaseevent. - Verify data in the Metric Debugger.
- Ensure no duplicate push calls.
Common e-commerce errors and solutions
| Error | Cause | Solution |
|---|---|---|
| Data not displayed | Wrong counter ID or call order | Check initialization, push after page load |
| Incorrect order total | actionField mismatch | Compare with Yandex.Metrica spec |
| Duplicate purchases | Multiple push calls | Add a flag to block resubmission |
| Missing products | Empty or non-array products | Verify products is an array of objects |
Verify e-commerce data correctness
Use the "Debugger" tool in Yandex.Metrica. It shows incoming events and structural errors. Compare the number of sent purchases with actual orders—if the discrepancy exceeds 5%, data is being lost.
Protecting sensitive data in Webvisor
Webvisor records all actions, including passwords and card numbers. Add the class ym-disable-keys or attribute data-ym-disable-keys to input fields:
<input type="password" class="ym-disable-keys" /> <input type="text" name="card_number" data-ym-disable-keys /> Also configure filters in the Metrica interface to exclude pages with personal data.
What's included in turnkey setup
- Counter installation with correct parameters
- Configuration of all goal types (URL, JS, CSS selector)
- E-commerce integration via dataLayer
- Webvisor connection and data filtering
- Testing in the Metric Debugger
- Documentation describing all events
Basic setup time: 1–2 business days. For SPAs or complex e-commerce: up to 5 days. Contact us for an audit of your current setup—we'll evaluate correctness and suggest improvements. Order a turnkey Metrica configuration to get precise conversion data.







