Ghid Meta Ads · soluție de 10 minute
Nu mai lăsa Meta să-ți cheltuie bugetul pe boți
Dacă reclamele tale trimit pe site mulți vizitatori care pleacă în 0–2 secunde, o parte nu sunt oameni. Problema nu e doar că plătești click-urile lor. Pixelul îi numără drept vizite reale, iar algoritmul Meta începe să caute mai mulți vizitatori ca ei.
Problema: pixelul nu face diferența între om și bot
Semnele sunt cunoscute pentru oricine rulează reclame către un landing page:
- mult mai multe click-uri decât ar sugera vânzările;
- bounce rate de peste 80%;
- sesiuni de 0–2 secunde în Google Analytics.
O parte sunt click-uri accidentale. Multe însă sunt boți: crawlere care verifică pagina pentru conformitate, boții care revizuiesc reclamele și trafic de slabă calitate din Audience Network.
Pixelul Meta standard trimite evenimentul PageView în clipa în care se încarcă pagina. Un bot care deschide pagina și pleacă devine astfel un „Landing Page View” perfect valid. Dacă optimizezi campaniile pe vizualizări de landing page, sau chiar doar lași algoritmul să învețe din cine ajunge pe site, îl înveți să găsească mai mult din traficul greșit.
Soluția: PageView doar după un semn de om
Scriptul de mai jos încarcă pixelul normal, dar ține PageView în așteptare până când apare unul dintre semnalele pe care un bot leneș nu le dă:
- vizitatorul derulează pagina mai mult de ~80px;
- dă click, atinge ecranul sau apasă o tastă;
- mișcă mouse-ul natural (mai mult de 3 mișcări);
- stă 6 secunde pe pagină, cu tab-ul activ.
Paginile de mulțumire și de confirmare a comenzii sunt excepția: acolo PageView pleacă imediat, fără nicio verificare.
Codul
Scrie ID-ul pixelului (îl găsești în Events Manager, sub numele sursei de date) și copiază codul. Dacă nu-l completezi aici, înlocuiește YOUR_PIXEL_ID manual.
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>Instalarea, în 5 pași
- Copiază scriptul de mai sus, cu ID-ul pixelului tău.
- Scoate orice alt pixel Meta de pe site (plugin, integrare, cod vechi în temă). Dacă rămâne unul, el trimite PageView imediat și scriptul nu mai are efect.
- Pune în
INSTANT_PATHSadresele reale ale paginilor tale de mulțumire. Fă o comandă sau un lead de test și uită-te în bara de adrese. Pe WooCommerce în română e adesea ceva de genul/finalizare-comanda/comanda-primita, iar pe un formular de lead, de exemplu/multumim. - Adaugă scriptul în
<head>-ul site-ului (pașii pe platformă sunt mai jos). - Testează în Events Manager, ca în secțiunea de verificare.
Important în România și UE: consimțământul
Scriptul nu înlocuiește banner-ul de cookie. Pixelul Meta e un cookie de marketing, deci trebuie să ruleze doar după ce vizitatorul a acceptat categoria Marketing. Dacă folosești un plugin de consimțământ (Complianz, CookieYes, Cookiebot etc.), încadrează scriptul la Marketing. În Google Tag Manager, pune-i un trigger care ține cont de consimțământ. Cele două filtre se adună: întâi acordul, apoi semnul de om.
Pe ce platformă îl pui
WordPress și WooCommerce
Funcționează bine, cu două capcane:
- Pixeli dublați. PixelYourSite, pluginul oficial Meta sau setările temei pot trimite deja PageView. Dezactivează pixelul din ele înainte.
- Plugin-uri de cache și optimizare. WP Rocket, LiteSpeed Cache, Autoptimize pot amâna sau combina scripturile. Exclude scriptul din „delay JS” și din minificare.
Adaugă-l cu un plugin de tip header (de exemplu WPCode), nu direct în temă, ca să nu dispară la o actualizare.
Google Tag Manager
Creează o etichetă de tip Custom HTML, lipește scriptul și pune-i triggerul pe toate paginile (cu condiția de consimțământ, dacă o ai). Codul e scris în JavaScript clasic, deci rulează fără probleme în GTM. Oprește sau șterge eticheta Meta existentă, altfel ai două PageView-uri.
Shopify
Aici e cea mai slabă variantă:
- pus în
theme.liquid, merge pe paginile magazinului, dar nu și în checkout sau pe pagina de mulțumire; - ca pixel personalizat în Customer Events rulează într-un sandbox care nu vede scroll-ul și click-urile reale, deci poarta nu funcționează;
- dacă ai conectat canalul Facebook & Instagram, vei avea PageView-uri dublate.
Pentru majoritatea magazinelor Shopify, soluția mai bună e să optimizezi campaniile pe achiziții, nu pe vizualizări.
Webflow
Merge curat: Site Settings → Custom Code → Head Code (sau în setările unei singure pagini). Codul personalizat rulează doar pe site-ul publicat, așa că testezi pe domeniul live sau pe staging. Scoate pixelul Meta din integrările existente.
Cum verifici că merge
- Deschide Events Manager → sursa ta de date → Test Events.
- Introdu adresa site-ului și deschide pagina din fereastra de test.
- Nu atinge nimic: PageView nu trebuie să apară până nu derulezi, nu dai click sau nu trec cele 6 secunde.
- Derulează: PageView trebuie să apară o singură dată.
Extensia de Chrome Meta Pixel Helper te ajută să vezi rapid ce evenimente pleacă și dacă mai există un pixel dublat.
Întrebări frecvente
Strică urmărirea achizițiilor sau a lead-urilor?
Nu. Doar PageView e condiționat. Lead, Purchase, AddToCart și celelalte evenimente pleacă exact ca înainte.
Ce se întâmplă cu cifrele din Ads Manager?
Click-urile și CTR-ul rămân la fel. Vizualizările de landing page vor scădea, deci costul pe vizualizare va crește. E normal: numeri mai puțini boți. Notează data instalării, ca să compari corect înainte și după.
Blochează click-urile de la boți?
Nu. Poate vei plăti în continuare câteva click-uri proaste. Ideea e ca Meta să nu mai învețe din ele. E o ipoteză care a funcționat în practică, nu o garanție.
Ajută și la Conversions API?
Parțial. Scriptul condiționează doar PageView-ul din browser. Evenimentele PageView trimise de pe server prin Conversions API nu sunt afectate. Dacă le trimiți, ai nevoie de o logică similară și acolo.
Ce nu face scriptul
E un filtru, nu un zid. Boții sofisticați care simulează scroll sau click vor trece în continuare. Ținta e majoritatea leneșă: crawlere și trafic care încarcă pagina și pleacă. Folosește-l pe propria răspundere și urmărește performanța campaniilor în săptămânile de după instalare. Rezultatele diferă de la un cont la altul.
Vrei să ne uităm noi pe contul tău?
Verificăm cum e montat pixelul, ce evenimente pleacă și pe ce optimizează de fapt campaniile. Vorbești direct cu specialistul.