02 · Cum măsurăm · Task #71
Cum măsurăm rezultatele campaniilor paid
Răspunsurile la cele 6 întrebări din task, cu starea reală verificată live în PostHog. Regula de bază rămâne cea din strategie: decizia se ia pe datele noastre, nu pe cele ale Google — dar Google trebuie hrănit cu conversii ca să poată optimiza.
Alexandra · 14 iulie 2026 · Surse: PostHog live (proiect Bono + Start), Strategia de măsurare (28 iun), Teste Google Ads, Analiza concurenței, minuta Google Ads Solo–Bono (9 iul), docurile de atribuire Desire, Jira BN-1329 și BN-1565
TL;DR
Odată implementate BN-1329 „Salvare Leads + Sursă în BD" (T1–T5) și BN-1565 (raportul zilnic), vom avea exact ce ne trebuie pentru paid: fiecare lead salvat în baza Desire cu atribuirea completă — canal, campanie, keyword și click ID, first-touch + last-touch + parcursul de sesiuni —, toate lead-urile în PostHog 1:1 cu baza (evenimentul pleacă din server), raport zilnic ponderat direct din bază și conversii trimise înapoi în Google prin click ID, ca target CPA să aibă din ce învăța. În jurul acestui sistem mai sunt de făcut: UTM-uri după convenție pe fiecare campanie, LP-urile /lp/, gtag + importul offline și raportul săptămânal de decizie. Referința „azi": sursa pe canal se vede deja, dar atribuirea pe campanie nu ajunge pe lead, evenimentul pleacă din browser (~17% pierdute) și sursa nu e în bază — exact golurile pe care le închide BN-1329.
desire.bono.ro și (2) direct pe bono.ro/infiintare-srl — respectiv pe echivalentul noindex /lp/infiintare-srl pentru trafic plătit. Indiferent unde e completat, lead-ul ajunge în aceeași bază — deci măsurarea și atribuirea trebuie să funcționeze identic pe ambele căi.
1 · Current reality PostHog — și, mai important, ce vom avea
Pe scurt, azi: sursa pe canal per lead se vede (pe ea se bazează raportul zilnic), UTM-urile se capturează pe vizite, insight-urile D1/D2 există. Ce nu avem încă: atribuirea pe campanie/keyword pe lead, evenimentul de lead trimis din server și sursa salvată în baza Desire. Toate trei vin cu BN-1329 + BN-1565 — așa că mai jos e sistemul țintă, iar starea de azi rămâne doar ca referință.
Sistemul țintă — fluxul de măsurare cap-coadă (după BN-1329 + BN-1565)
Click pe reclamă → aterizare cu „adresa" completă.
URL-ul poartă cele 6 UTM-uri (utm_campaign unic per test, cu canalul ca prefix — ex. gads-…; {keyword} în utm_term; utm_id={campaignid} ca backup stabil la redenumiri) + click ID-ul pus automat de Google (gclid/gbraid/wbraid). Destinația: /lp/ noindex sau pagina organică cu formular.
Sursa se capturează la prima intrare și se cară până la formular.
First-touch set-once + last-touch actualizat la fiecare vizită. Parametrii merg pe linkul bono→desire (funcționează pentru toți userii, fără consimțământ) + cookie first-party .bono.ro pentru first-touch între vizite (cu consimțământ). Sursa nu poate fi niciodată un domeniu intern.
La submit — oriunde e formularul — lead-ul se salvează în baza Desire cu atribuirea completă.
E-mail + telefon + seturile first_*/last_* (source, channel, utm, click ID-uri, referrer, landing page) + parcursul de sesiuni + lista ponderată {sursă, pondere} gata calculată de server. Nicio coloană NULL — worst case „direct".
Serverul trimite desire_lead_created în PostHog — 1:1 cu baza.
Toate lead-urile ajung în PostHog (dispare pierderea de ~17% din browser), idempotent la retry, cu aceleași câmpuri de atribuire ca în bază; identify + $set_once păstrează istoricul de navigare pre-lead pe aceeași persoană.
Rapoartele ies direct din date, fără reconstrucție.
Zilnic (BN-1565): lead-uri pe surse și campanii, atribuire ponderată, ziua = ora României. Săptămânal: tabelul de decizie cost/lead per utm_campaign (secțiunea 6). Per test: documentul de concluzie.
Google primește conversiile înapoi și optimizează.
gtag la lansare + import offline pe click ID-urile salvate în bază — target CPA învață întâi pe lead-uri, apoi pe clienți plătitori (secțiunea 4).
Azi → după implementare
| Capabilitate | Azi (verificat live 14 iul) | După BN-1329 + BN-1565 |
|---|---|---|
| Sursă per lead (canal) | Se vede, dar prin reconstrucție din session entry — fragilă (în mai a căzut la ~30%), 15% pierdută pe salturile interne bono↔desire | Salvată în baza Desire la submit — nicio valoare NULL, niciodată domeniu intern |
| Atribuire campanie / keyword (paid) | Nu ajunge pe lead — 0 din 218 lead-uri (45 zile) au UTM pe eveniment | Pe fiecare lead: first + last + parcursul complet de sesiuni, cu utm_campaign/term și click ID-uri |
| Completitudine lead-uri în PostHog | ~83% — evenimentul pleacă din browser (100% $lib=web) | 100% — eveniment din server, idempotent, număr identic cu baza pe orice zi |
| Istoric pre-lead (navigare) | Legat pentru ~88% din lead-uri | Legat prin identify + $set_once; sursa corectă garantată chiar și cu ad-block / refuz cookie |
| Raport zilnic pe surse | Pe reconstrucția din PostHog | Din baza Desire (BN-1565): atribuire ponderată gata calculată, zi = Europe/Bucharest peste tot |
| Optimizare Google (target CPA) | Fără semnal de conversie — Google licitează orb | gtag + conversii offline pe click ID, inclusiv conversii de calitate (client plătitor, nu doar lead) |
Referința „azi", verificată live în PostHog (proiect Bono + Start, 14 iul 2026): 218 desire_lead_created în 45 zile (google.com 47%, direct 20%, intern nerezolvat 15%); 1 204 pageview-uri cu UTM și 50 cu gclid în 30 zile — captura pe vizite funcționează, inclusiv pe campaniile gads-srl-search-evergreen și S_SRL_General; insight-urile D1/D2 și alertele de freshness există; /lp/ e în CMS cu trafic de test (taskurile #121 și #438 în curs).
2 · Ce se poate măsura (campanie, ad set, keyword…)
Fiecare nivel al unei campanii are „adresa" lui în UTM. Convenția e deja definită în strategia de măsurare — asta e harta completă a ce putem vedea la noi vs ce rămâne doar la Google.
| Nivel | Cum îl măsurăm noi (PostHog) | Exemplu | Limite |
|---|---|---|---|
| Campanie | utm_campaign — ID-ul nostru unic per test | gads-search-exact-infiintare-srl | — |
| Ad / creativă (ad set, asset group) | utm_content | ad-v1-pret, asset-group-v1 | Pe PMax, Google alege mixul de asset-uri — vezi grupul, nu combinația exactă |
| Keyword (doar Search) | utm_term — cu inserția {keyword} Google pune automat cuvântul licitat | infiintare+srl+pret | Primești keyword-ul licitat, nu căutarea reală a userului (aia e doar în Search Terms, în Google Ads) |
| Audiență (Display/PMax/YouTube) | utm_term refolosit pentru audiență | aud-remarketing-site | — |
| Ad group / match type / device | ValueTrack în același Final URL suffix, după utm_id: adgroup={adgroupid}&matchtype={matchtype}&device={device} — ajung în query string, salvate per lead în raw_query (BN-1329) | matchtype=e (exact), b (broad), p (phrase) | Parametri custom, nu UTM standard — se extrag din raw_query la analiză |
| Click individual | gclid — ID-ul unic al clickului, pus automat de Google | gclid=Cj0KCQ… | Cheia pentru a trimite conversii înapoi în Google (secțiunea 4) |
| Conversie | Evenimente PostHog filtrate pe utm_campaign: desire_lead_created (formularul din ambele locuri — desire și bono.ro//lp/; pagina completării = pagepath), cta_clicked, vizite /lp/ | lead-uri per campanie, CR per campanie | Funcționează abia când lead-ul „moștenește" UTM-ul (azi nu — vezi secțiunea 1) |
Ce NU vedem la noi (rămâne doar în Google Ads)
- Cheltuiala — se aduce manual săptămânal (sau automat: PostHog are sursă de date warehouse „Google Ads" care sincronizează spend-ul — de evaluat la setup).
- Impresii, CTR, impression share, ad rank — metrici pre-click; utile pentru diagnoza campaniei (Solo pe astea optimizează), dar nu pentru verdictul de cost/lead.
- Search terms reale — doar în Google Ads; de acolo muți termenii câștigători pe exact/phrase match.
Formula de bază
Conversii per utm_campaign din PostHog ÷ cheltuială per campanie din Google Ads = cost/lead real. Google ne dă numărătorul lui (îl folosim doar pentru ranking relativ între teste), PostHog ne dă numărătorul de încredere.
3 · Test cu o campanie reală — cum se salvează UTM-ul?
Ce știm din testele deja făcute, plus protocolul de verificare cap-coadă pentru următoarea campanie.
Ce știm deja
- Testul din iunie (o campanie cu UTM, una fără) a arătat că sursa și parametrii se salvează în ambele cazuri pe pageview — Google adaugă oricum
gclid, iar PostHog îl prinde. Insight-urile de verificare există („Google Ads paid clicks — UTM check", „Slug-uri utm_campaign"). - Confirmare live azi: pageview-uri cu
utm_campaign=gads-srl-search-evergreen(29),S_SRL_General(21) și 50 de pageview-uri cugclidîn ultimele 30 zile. - Unde se rupe: UTM-ul trăiește pe pageview și pe sesiune, dar nu ajunge pe evenimentul de lead (0/218). Formularul apare în două locuri, iar cele două căi au dificultăți diferite: (a) formularul chiar pe pagina de aterizare (bono.ro/infiintare-srl sau /lp/) — cazul simplu: UTM-ul e pe URL în momentul submit-ului, trebuie doar citit și salvat; (b) traseul către desire.bono.ro — cazul greu: saltul de subdomeniu pierde sursa dacă nu e cărată explicit. BN-1329 le acoperă pe ambele: valorile se pun în câmpuri ascunse și pleacă la submit din formular, nu din URL.
Protocolul de test pentru următoarea campanie reală
Construiește URL-ul final cu UTM complet
După convenție: bono.ro/lp/infiintare-srl?utm_source=google&utm_medium=cpc&utm_campaign=gads-search-…&utm_id={campaignid}&utm_content=…&utm_term={keyword}. Adaugă și un gclid=TEST123 fals pentru testul manual.
Simulează userul în incognito — pe ambele căi de conversie
Calea A (principală pentru paid): click pe URL → completezi formularul direct pe pagina de aterizare (/lp/ sau bono.ro/infiintare-srl), cu email + telefon de test. Calea B: click pe URL → navighezi 2–3 pagini → treci pe desire.bono.ro → completezi acolo. Ambele trebuie să producă lead cu aceeași atribuire.
Verifică în PostHog (3 locuri)
(a) pageview-ul are toate cele 6 UTM + gclid; (b) sesiunea are $session_entry_utm_*; (c) evenimentul desire_lead_created al persoanei tale de test — aici azi va fi gol: exact ce trebuie să repare T1/T2.
Verifică în baza Desire
După BN-1329/T1: seturile first_* și last_* (source, channel, utm, click ID-uri, referrer, landing page) completate pe lead, plus lista de sesiuni din parcurs. Acceptance din ticket: Google → bono → desire → submit ⇒ first_source ȘI last_source = google/organic; sursa nu are voie să fie niciodată un domeniu intern; un lead cu consimțământ și ≥2 sesiuni are ≥2 intrări în listă.
Repetă scenariile rele
Cookie refuzat, ad-block pornit, intrare direct pe desire — după BN-1329 toate trebuie să producă un lead cu sursă ne-nulă (fără consimțământ: first_* = last_*, copia vizitei de conversie) și eveniment în PostHog cu $lib=posthog-node.
Abia apoi pornește bugetul
Regula din strategie: nu dăm bani pe reclame până nu trece testul manual.
4 · Legătura PostHog ↔ Google — cum află Google rezultatele ca să optimizeze?
Două direcții separate, care nu trebuie confundate: noi măsurăm ca să decidem; Google primește conversii ca să optimizeze (Smart Bidding / target CPA licitează orb fără semnal de conversie).
| Mecanism | Cum funcționează | Pro / Contra | Verdict |
|---|---|---|---|
| A. Tag Google Ads (gtag) pe site | Snippet-ul Google măsoară conversia direct în browser, pe evenimentul de lead | Standard, rapid de pus; dar suferă de aceleași pierderi ca browserul (ad-block, consimțământ) și dublează măsurarea | pornim cu el la lansare |
| B. Import de conversii offline pe click ID din baza noastră | BN-1329/T1 salvează click ID-urile (gclid, gbraid, wbraid + fbclid, msclkid, ttclid, li_fat_id) din orice vizită din parcurs — explicit „pentru offline conversions în Google Ads". Încărcăm conversiile în Google Ads (API sau manual), Google leagă conversia de click și învață | Cel mai robust și aliniat cu „sursa de adevăr = baza noastră"; permite și conversii de calitate (client plătitor, nu doar lead) — evită capcana semnalată la Solo (Google optimizează pe cine se înscrie, nu pe cine devine client) | ținta pe termen mediu |
| C. Destinația PostHog „Google Ads Conversions" (CDP) | PostHog trimite automat evenimentele de conversie cu gclid către o conversion action din Google Ads | Automatizează varianta B fără cod propriu; dar e marcată experimentală, fără suport oficial, cere Enhanced Conversions + acces API | de testat |
| D. GA4 | Google Analytics legat de Google Ads poate importa conversii | Solo îl folosește ca arbitru secundar; la noi ar adăuga un al treilea sistem de măsură fără să rezolve nimic ce nu rezolvă A+B | nu acum |
Recomandare: la lansarea campaniilor punem gtag pe evenimentul de lead (varianta A) ca Google să poată optimiza imediat, și construim în paralel importul offline pe click ID (varianta B, după BN-1329) — care devine sursa „de calitate" pe care o hrănim cu conversii reale, inclusiv plăți. Bonus din BN-1329/T2: evenimentul server-side poartă atribuirea cu aceleași nume de câmpuri ca în bază (first_*/last_* + lista ponderată), deci raportarea din PostHog se potrivește 1:1 cu baza. Discrepanțele dintre Google Ads și datele noastre sunt normale, dar trebuie să rămână mici — le urmărim explicit în raport (secțiunea 6). Consimțământul alimentează și Google Consent Mode v2 (ticket separat, notat în BN-1329/T3).
5 · Ce fac alții? Cum măsoară Solo?
Din minuta „Google Ads Solo–Bono" (9 iulie 2026) + analiza concurenței (iunie 2026).
Cum măsoară Solo
- Optimizează pe datele din Google Ads — acolo văd conversiile pe campanie. Compară cu GA4 și cu un dashboard intern construit pe ListenLayer. Regula lor: discrepanțele Google ↔ Analytics sunt normale, dar trebuie să rămână mici.
- Au încercat PostHog și l-au găsit greu: „are potențial, dar e complex și cere multe setări"; setup-ul automat nu le acoperă nevoile; au problemă cu user ID diferit între platforme. (Noi am trecut deja prin setările astea — e un avantaj câștigat.)
- Definiții: lead = cont creat (email + parolă); conversie = a trecut de payment. Costuri: ~150 Lei/lead, ~300 Lei/client; Google Ads aduce 13–19% din totalul canalelor; lead→client ~50–56%.
- Structură: Search evergreen pe intenții (înființare, contabilitate, tool-uri, calculatoare) + PMax; spend mutat de la 20/80 spre 50/50 pentru că Search prinde mai bine high-intent-ul. Broad match ca plasă largă → termenii care convertesc se mută pe phrase/exact. 2 ads per ad group, keywords la nivel de ad group.
- Nu folosesc pagini noindex — paginile lor dedicate (medici, IT, CAEN) sunt indexate. Testele fine le fac abia după ce structura de bază e stabilă.
- Atenționare de la ei, direct relevantă pentru Desire: Google învață pe semnalul setat ca obiectiv. Dacă fluxul se oprește la înscrierea pe listă, Google optimizează pe profilul celor care se înscriu — nu neapărat al celor care devin clienți.
Restul pieței (pe scurt — detalii în Ce fac alții)
- Keez — benchmark-ul nostru: pagini
lp-noindex dedicate reclamelor, formular de lead, promovează și înființarea și contabilitatea (~200 reclame). - StartCo — zeci de variante pe aceeași pagină; cel mai bun activ paid = calculatorul (~200 reclame Google + ~140 Meta).
- Solo — cel mai agresiv (~400 reclame), volum pe PFA și calculatoare, reclame pe persona.
- Concluzia transversală: nimeni nu câștigă din CPC mai mic (toți ~3–5 Lei); diferența o fac landing page-ul, volumul de creative și testarea la scară.
6 · Cum arată un raport de campanie? (start with the end in mind)
Trei niveluri de raportare, de la puls zilnic la verdict de test. Primul există deja ca mockup („Raport zilnic Desire — mockup", în folderul Metrici Bono) și devine generabil automat imediat după T1.
Nivel 1 — Raportul zilnic de lead-uri (BN-1565, există ca mockup)
„Lead-uri noi pe lista de așteptare Desire": lead-uri ieri / MTD / medie zilnică, defalcate pe surse — inclusiv campaniile Google Ads separat, cu cuvintele cheie. E ticketul BN-1565 (raport zilnic pe e-mail), blocat de BN-1329. Sursa fiecărui lead se citește din baza Desire, cu regula de atribuire decisă pe 10 iulie: weighted average pe sesiunile din parcurs, cu excluderea sesiunilor Direct (mai puțin cazul în care Direct e prima sesiune) — ex.: Google Ads → Direct ⇒ Google Ads 100%; Direct → Google Organic ⇒ 50/50. Serverul salvează lista {sursă, pondere} gata calculată la submit, iar raportul doar însumează ponderile — fără logică de atribuire în raport. „Ziua" = 00:00–24:00 Europe/Bucharest, identică în bază, PostHog și raport (BN-1329/T4).
Nivel 2 — Raportul săptămânal de campanie (tabelul de decizie)
| Campanie (utm_campaign) | Spend | Click-uri (Google) | Vizite LP (PostHog) | Lead-uri (PostHog) | CR | Cost/lead (PostHog) | Cost/lead (Google) | Δ | Decizie |
|---|---|---|---|---|---|---|---|---|---|
gads-search-broad-tcpa-srl | 700 Lei | 210 | 195 | 21 | 10,8% | 33 Lei | 29 Lei | +14% | scalează |
gads-pmax-srl-assets-v1 | 700 Lei | 610 | 540 | 9 | 1,7% | 78 Lei | 21 Lei | +270% | stop — conversiile Google nu se confirmă |
gads-search-exact-srl-pret | 350 Lei | 80 | 74 | 8 | 10,8% | 44 Lei | 41 Lei | +7% | continuă — sub 100 vizite, prelungim |
Rânduri ilustrative. Coloana Δ (discrepanța Google vs PostHog) e verificarea de sănătate: mică = tracking ok; mare = exact cazul PMax de mai sus, nu scala înainte să înțelegi de ce.
- Regulile de decizie (din strategie): winner clar la cost/lead de 2 ori+ mai bun → mutăm bugetul; 0 conversii sau cost de 5 ori+ → stop; sub 100 vizite/campanie → prelungim; CPA peste 50 Lei 5 zile consecutive → oprim/revenim la buget.
- Referința istorică: baseline validat 32–40 Lei/lead pe Search (Broad+tCPA = 32,58 Lei, media contului 37,6 Lei pe 663 conversii).
- Sursa datelor: lead-uri + CR din PostHog (insight-ul D2 „Campaign performance — sesiuni × lead-uri per UTM" există deja); spend din Google Ads, manual sau prin sursa data-warehouse.
Nivel 2b — Drill-down în campanie: keywords, ad-uri, ad groups
Tabelul săptămânal rămâne la nivel de campanie tocmai pentru că fiecare test are utm_campaign propriu — coloana „Campanie" spune direct ce am testat, nu e nevoie de o listă separată de teste. Detaliile se deschid în interiorul campaniei, din aceleași date:
- Keyword — breakdown pe
utm_term(doar Search, prin inserția{keyword}): care cuvânt licitat aduce lead-uri și la ce cost. - Ad / creativă — breakdown pe
utm_content: care variantă de text/asset convertește. - Ad group și match type — nu au parametru UTM standard, dar Google le expune prin ValueTrack: le adăugăm în același Final URL suffix, după
utm_id—adgroup={adgroupid}&matchtype={matchtype}&device={device}. Ajung în query string, iar BN-1329 salveazăraw_querype fiecare lead — deci le putem analiza per lead, fără setup suplimentar. - Căutările reale (search terms) rămân doar în Google Ads — de acolo muți termenii câștigători pe exact/phrase și scoți negativele (practica standard, confirmată și de Solo).
Simulare — cum „se deschide" o campanie, pas cu pas
Pornim de la rândul câștigător din tabelul săptămânal și coborâm în el. Mecanica e mereu aceeași: fixezi filtrul utm_campaign și schimbi breakdown-ul — trei click-uri în PostHog pentru orice nivel.
| Campanie (utm_campaign) | Spend | Vizite LP | Lead-uri | CR | Cost/lead |
|---|---|---|---|---|---|
gads-search-broad-tcpa-srl ▼ (o deschidem mai jos) | 700 Lei | 195 | 21 | 10,8% | 33 Lei |
1 · Deschidere pe keyword — în PostHog: Trends → desire_lead_created → filtru utm_campaign = gads-search-broad-tcpa-srl → breakdown utm_term (vizitele: același filtru pe $pageview):
| Keyword (utm_term) | Spend (Google) | Vizite LP | Lead-uri | CR | Cost/lead |
|---|---|---|---|---|---|
infiintare+srl | 380 Lei | 118 | 12 | 10,2% | 32 Lei |
deschidere+firma | 210 Lei | 52 | 6 | 11,5% | 35 Lei |
infiintare+firma+online | 110 Lei | 25 | 3 | 12,0% | 37 Lei |
2 · Deschidere pe ad / creativă — același filtru, breakdown utm_content:
| Ad (utm_content) | Vizite LP | Lead-uri | CR | Ce înseamnă |
|---|---|---|---|---|
ad-v1-pret (mesaj pe preț) | 108 | 13 | 12,0% | mesajul pe preț convertește mai bine → candidat de păstrat |
ad-v2-rapid (mesaj pe viteză) | 87 | 8 | 9,2% | mai slab → de rescris sau de înlocuit la următoarea iterație |
3 · Deschidere pe ad group / match type / device — din parametrii ValueTrack (adgroup, matchtype, device), azi extras din $current_url pe vizite, iar după BN-1329 direct din raw_query salvat pe fiecare lead:
| Ad group | Device | Vizite LP | Lead-uri | CR |
|---|---|---|---|---|
ag-infiintare-srl | mobile | 89 | 8 | 9,0% |
ag-infiintare-srl | desktop | 54 | 8 | 14,8% |
ag-costuri-firma | mobile + desktop | 52 | 5 | 9,6% |
Citirea: desktop convertește aproape dublu față de mobile pe același ad group → ipoteză de verificat pe LP mobil (viteză? formular?) înainte să ajustăm bid-urile pe device.
4 · Ultimul nivel — lead-urile individuale — după BN-1329, fiecare lead din bază are atribuirea completă; în PostHog, persoana lead-ului are session recording-ul și tot parcursul:
| Lead | Keyword | Ad | Prima pagină | Parcurs |
|---|---|---|---|---|
| lead_a3f… | infiintare+srl | ad-v1-pret | /lp/infiintare-srl | 1 sesiune — a completat direct pe LP |
| lead_b81… | deschidere+firma | ad-v2-rapid | /lp/infiintare-srl | 2 sesiuni — a revenit a doua zi din Direct (ponderare: Google Ads 100%) |
Cifrele sunt ilustrative, consecvente cu rândul de campanie de mai sus (195 vizite, 21 lead-uri). Spend-ul per keyword vine din Google Ads (acolo se vede cheltuiala pe fiecare nivel); vizitele și lead-urile vin din PostHog — respectiv, după BN-1329, direct din baza Desire.
Nivel 3 — Raportul per test · demo: Broad match vs Exact match
La finalul fiecărui test (minim 14 zile, o singură variabilă, buget egal) scriem documentul de concluzie. Așa ar arăta, cu cifre ilustrative, pentru testul din strategie:
| Setup-ul testului | |
|---|---|
| Întrebarea | Broad match aduce lead-uri mai ieftine decât exact match pe „înființare SRL", sau doar click-uri irelevante? |
| Variabila unică | Match type. Tot restul identic: aceeași pagină (/lp/infiintare-srl), același text de ad, același buget, aceeași perioadă. |
| Variante | A: utm_campaign=gads-search-broad-infiintare-srl · B: utm_campaign=gads-search-exact-infiintare-srl |
| Perioadă / buget | 14 zile · 700 Lei / variantă · KPI principal: cost/lead din PostHog · prag de oprire: CPA peste 50 Lei 5 zile consecutive |
| Variantă | Spend | Click-uri (Google) | Vizite LP (PostHog) | Lead-uri (PostHog) | CR | Cost/lead (PostHog) | Cost/lead (Google) | Δ |
|---|---|---|---|---|---|---|---|---|
| A · Broad match | 700 Lei | 218 | 201 | 21 | 10,4% | 33 Lei | 30 Lei | +10% |
| B · Exact match | 700 Lei | 138 | 129 | 16 | 12,4% | 44 Lei | 41 Lei | +7% |
Drill-down keywords (varianta A, breakdown pe utm_term în PostHog):
| Keyword licitat (utm_term) | Vizite LP | Lead-uri | CR | Cost/lead |
|---|---|---|---|---|
infiintare+srl | 132 | 15 | 11,4% | 31 Lei |
deschidere+firma | 46 | 4 | 8,7% | 39 Lei |
infiintare+firma+online | 23 | 2 | 8,7% | 51 Lei |
Plus, din Google Ads → Search terms (doar acolo se văd căutările reale pe care le-a prins broad-ul): „cât costă să îți faci firmă" a adus 2 lead-uri la ~25 Lei → se adaugă ca exact match; „înființare ONG" a consumat click-uri fără niciun lead → negative keyword.
Modelul de tabel — de copiat la fiecare test nou
Același format ca demo-ul de mai sus, gol. Se completează o dată la setup (primul tabel) și o dată la verdict (restul).
| Setup — se completează înainte de pornire | |
|---|---|
| Test # | numele testului · data start – data stop (minim 14 zile) |
| Întrebarea | ce vrem să aflăm, într-o propoziție |
| Variabila unică | singurul lucru care diferă între variante — tot restul identic (pagină, buget, perioadă) |
| Variante | A: utm_campaign=… · B: utm_campaign=… |
| Buget | … Lei / variantă — egal între variante |
| KPI principal | Cost/lead din PostHog · prag de oprire: CPA peste 50 Lei 5 zile consecutive |
| Variantă | Spend | Click-uri (Google) | Vizite LP (PostHog) | Lead-uri (PostHog) | CR | Cost/lead (PostHog) | Cost/lead (Google) | Δ |
|---|---|---|---|---|---|---|---|---|
| A · … | … | … | … | … | … | … | … | … |
| B · … | … | … | … | … | … | … | … | … |
Formule: CR = lead-uri ÷ vizite LP · Cost/lead (PostHog) = spend ÷ lead-uri PostHog · Δ = diferența cost/lead PostHog vs Google (mică = tracking sănătos; mare = investighează înainte de decizie). Sursa: lead-uri + vizite din PostHog per utm_campaign; spend + click-uri din Google Ads.
| Drill-down (opțional) — keyword / ad / ad group | Vizite LP | Lead-uri | CR | Cost/lead |
|---|---|---|---|---|
utm_term=… | … | … | … | … |
utm_content=… | … | … | … | … |
| Verdict — se completează la final | |
|---|---|
| Câștigător + de ce | varianta X, cost/lead … vs … (−…%) |
| Din search terms | termeni de mutat pe exact/phrase · termeni de pus la negative |
| Decizie | scalează / continuă / stop — după regulile de decizie (câștig de 2 ori+ → buget; 0 conversii sau cost de 5 ori+ → stop; sub 100 vizite → prelungim) |
| Următorul test | ce testăm mai departe, pornind de la câștigător |
Modelul documentului per test rămâne „Teste Google Ads — Rezultate" — fiecare test își adaugă acolo rândul lui, ca istoricul să rămână într-un singur loc.
Ce lipsește ca totul să funcționeze — plan de acțiune
În ordinea dependențelor. Primele două sunt condiția ca orice campanie pornită să producă date de încredere.
BN-1329 — „Salvare Leads + Sursă în BD" (T1–T5) — în curs de implementare.
Ticketul consolidat care repară tot lanțul: T1 — atribuire first-touch + last-touch + parcursul complet de sesiuni, cu toate click ID-urile, salvate în bază la submit; UTM cărat pe linkul bono→desire (principal, fără consimțământ) + cookie .bono.ro set-once (supliment); sursa niciodată domeniu intern. T2 — desire_lead_created doar din server ($insert_id idempotent, IP-ul real al userului), cu identify pe client + $set_once din server ca istoricul pre-lead să rămână legat (azi ~88%). T3 — anonymous mode curat + opt-out real. T4 — ziua = Europe/Bucharest peste tot. T5 — sursa afișată în Desire. PR parțial pentru T2 există deja (proxy-ul de IP).
UTM pe toate campaniile noi, după convenție + inserția {keyword}.
Fiecare test primește utm_campaign unic la setup. Checklist-ul de verificare manuală (secțiunea 3) înainte de buget. Tagging-ul pe linkuri trebuie menținut și pentru AI (ChatGPT/Perplexity nu trimit referrer — altfel apar ca „direct").
Semnal de conversie către Google: gtag la lansare, apoi import offline pe click ID.
Fără asta, target CPA n-are din ce învăța. Click ID-urile vin din BN-1329; de decis între importul propriu și destinația PostHog (experimentală) — de discutat și cu Mircea (Solo), care s-a oferit să explice setup-ul lor. Legat: Google Consent Mode v2 (ticket separat).
Teo + IT · după BN-1329Paginile /lp/ noindex, cap-coadă.
Task #121 (realizare LP-uri) + #438 (header/footer simplificat) în curs. Verificare noindex (site: + Search Console, nu blocate în robots.txt) + măsurare completă înainte de trafic plătit. Structura recomandată: Structura LP.
Alexandra (conținut) + IT (pagini) · în cursRaportul de campanie.
Nivelul 2 (săptămânal) se poate construi de azi pe insight-urile D2 existente + spend manual. Nivelul 1 (zilnic pe e-mail, după mockup) = BN-1565 — blocat de BN-1329; raportul doar însumează ponderile precalculate de server.
Alexandra · mockup gata · Jira BN-1565Surse: verificare live PostHog 14 iul 2026 (proiect Bono + Start) · Jira BN-1329 „Salvare Leads + Sursă în BD" (T1–T5) și BN-1565 „Raport zilnic pe e-mail" · „Strategie Măsurare Campanii Google Ads" (28 iun) · „Teste Google Ads — Rezultate" (iun) · „Analiza Concurenței — Google & Meta Ads" (iun) · minuta „Google Ads Solo–Bono" (9 iul, Drive) · „Atribuirea lead-urilor desire — problemă, soluție, status" (8 iun) · „Raport zilnic Desire — mockup" · docs PostHog (destinația Google Ads Conversions) · task #71 · Campanii Paid.