Ghid Meta Ads · soluție de 10 minute

Nu mai lăsa Meta să-ți cheltuie bugetul pe boți

· 7 minute de citit · Cristi Radu

Opțional: scrie ID-ul pixelului și îl punem noi în cod. Nu trimitem nimic nicăieri, totul rămâne în browserul tău.

<!-- Human-Gated Meta Pixel (Contexta) -->
<script>
(function () {
  // 1. Pune aici ID-ul pixelului Meta (doar cifre)
  var PIXEL_ID = 'YOUR_PIXEL_ID';

  // 2. Paginile care trimit PageView imediat (mulțumire / confirmare comandă)
  var INSTANT_PATHS = ['/thank-you', '/order-confirmation'];

  // Siguranță: nu face nimic dacă nu ai pus ID-ul pixelului
  if (!/^\d+$/.test(PIXEL_ID)) {
    if (window.console) console.warn('Human-Gated Meta Pixel: adaugă ID-ul pixelului.');
    return;
  }

  // Încărcătorul standard al pixelului Meta
  !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
  n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
  t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}
  (window, document,'script','https://connect.facebook.net/en_US/fbevents.js');

  // Oprește evenimentele automate Meta înainte de verificare (trebuie să fie înainte de init)
  fbq('set', 'autoConfig', false, PIXEL_ID);
  fbq('init', PIXEL_ID);

  var fired = false;
  var moves = 0;
  var timer = null;
  var EVENTS = ['scroll', 'wheel', 'keydown', 'click', 'touchstart', 'mousemove'];
  var OPTS = { passive: true, capture: true };

  function firePixel() {
    if (fired) return;
    fired = true;
    fbq('track', 'PageView');
    cleanup();
  }

  function cleanup() {
    EVENTS.forEach(function (evt) {
      window.removeEventListener(evt, checkHuman, OPTS);
    });
    window.removeEventListener('focus', onFocus);
    if (timer) clearTimeout(timer);
  }

  // Paginile de mulțumire și confirmare: PageView imediat, fără verificare
  var path = window.location.pathname;
  for (var i = 0; i < INSTANT_PATHS.length; i++) {
    if (path.indexOf(INSTANT_PATHS[i]) === 0) {
      firePixel();
      return;
    }
  }

  function scrolledPast80(e) {
    var y = window.pageYOffset || document.documentElement.scrollTop || 0;
    if (y > 80) return true;
    // Site-uri care derulează într-un container, nu pagina întreagă
    var t = e.target;
    return !!(t && t.scrollTop > 80);
  }

  function checkHuman(e) {
    if (fired) return;
    if (e.type === 'scroll') {
      if (scrolledPast80(e)) firePixel();
    } else if (e.type === 'mousemove') {
      moves++;
      if (moves > 3) firePixel();
    } else {
      // wheel, keydown, click, touchstart
      firePixel();
    }
  }

  // Rezervă: cineva care citește liniștit, cu tab-ul activ, 6 secunde
  function startTimer() {
    if (timer) clearTimeout(timer);
    timer = setTimeout(function () {
      if (!fired && document.hasFocus && document.hasFocus()) firePixel();
    }, 6000);
  }

  function onFocus() {
    if (!fired) startTimer();
  }

  EVENTS.forEach(function (evt) {
    window.addEventListener(evt, checkHuman, OPTS);
  });
  window.addEventListener('focus', onFocus);
  startTimer();
})();
</script>