Přejít k obsahu
GetProfit
Demo

← Všechny materiály

Enhanced Conversions for Leads — nastavení přes Google Tag Manager

Když se obchod neuzavírá na webu, ale v CRM za 2 týdny, běžné Enhanced Conversions nepomůžou. Krok za krokem nastavení EC for Leads přes GTM s importem offline konverzí.

Proč je to vůbec potřeba

Typická situace pro B2B a lead gen:

  • Člověk klikne na reklamu v Google → nechá na webu poptávku „chci propočet“
  • 4 dny mu obchodník volá, připravuje nabídku, posílá cenovou nabídku
  • Za 2 týdny klient podepisuje smlouvu — buď v kanceláři, nebo v CRM, ale ne na webu

Google Ads vidí jen první krok — odeslání formuláře. Smart Bidding se optimalizuje na „poptávku“ jako na konečný cíl. Jenže levná poptávka ≠ uzavřený obchod. Algoritmus se učí přinášet hodně levných leadů, ze kterých se uzavře řekněme každý 8. A tobě to připadá, že se reklama stala efektivní, i když peníze bereš jen z každého osmého.

Dřív se tenhle problém řešil přes Offline Conversion Import (OCI) — z CRM jsi vyexportoval seznam uzavřených obchodů s GCLID a nahrál ho do Google Ads. Jenže GCLID se často ztrácí: Safari ITP maže cookies, blokátory ořezávají parametry, UTM se při přesměrováních trhá. Match rate klesal na 40–50 %.

Enhanced Conversions for Leads tenhle přístup nahrazuje. Rozdíl je takový: místo nestabilního GCLID posíláš do Google hashovaný e-mail nebo telefon ve chvíli vyplnění formuláře. Později, až se obchod uzavře, vyexportuješ z CRM closed deals se stejným e-mailem. Google spáruje dva body a obnoví řetězec „klik → poptávka → uzavřený obchod“.

EC for Web vs EC for Leads — neplést

Jsou to dvě různé věci. Před nastavením se ujisti, že potřebuješ právě variantu Leads.

EC for WebEC for Leads
Konverze proběhne na webu (nákup v e-shopu)Konverze proběhne offline (uzavření v CRM, hovor, podpis smlouvy)
Doplňuje stávající tag Google Ads Conversion Tracking — přidává user data ke stejné událostiSamostatný tag Google Ads User-Provided Data Event + pozdější import offline konverzí
Funguje hned po nastaveníFunguje jen když pravidelně exportuješ closed deals
E-commerceB2B, lead gen, high ticket, kurzy, zdravotnictví, stavebnictví

Pokud máš e-commerce — jdi do předchozího článku o EC for Web. Tenhle je pro lead generation s dlouhým cyklem.

Kdy použít právě EC for Leads

  • Lead magnet → nurturing → uzavření v CRM
  • B2B, kde od poptávky ke smlouvě uplyne 1–8 týdnů
  • Agent-based sales: klient nechá poptávku, obchod uzavírá obchodník
  • High ticket: kurz, zdravotní služba, stavební služba, auto

V praxi to dává:

  • Smart Bidding se optimalizuje na uzavřené obchody, ne na poptávky → míň „odpadních“ leadů
  • +15–30 % přesnost atribuce — protože párování jde přes e-mail/telefon, ne přes GCLID
  • Průhledné LTV trychtýře — vidíš od kliku k penězům, ne k odeslání formuláře

Co musíš mít před začátkem

  • ✅ Google Ads účet s konverzí typu Lead (ne Purchase, ne Website Action — právě Lead)
  • ✅ Google Tag Manager na webu
  • ✅ CRM nebo tabulku, kam se zapisují uzavřené obchody s e-mailem klienta (tohle je kritické — bez toho EC for Leads nedává smysl)
  • ✅ Na thank-you stránce (nebo hned po odeslání formuláře) leží v dataLayer data klienta — e-mail povinně, telefon ideálně
  • ✅ Přijaté Customer Data Terms v Google Ads — obvykle to dělá majitel účtu, ne agentura

Kolik to zabere času

Samotné nastavení v GTM — 30–40 minut. Plus zvlášť je potřeba nastavit import offline konverzí z CRM — to je dalších 1–2 hodiny (Google Ads Data Manager nebo Zapier). První data v Diagnostics uvidíš za 24–72 hodin poté, co přes web projde ≥20 konverzí.


Jak to funguje — schéma na 1 minutu

  1. Uživatel klikne na reklamu → Conversion Linker v GTM uloží GCLID do first-party cookie
  2. Uživatel vyplní formulář → na thank-you stránku se pushne dataLayer s e-mailem/telefonem
  3. Tag Google Ads User-Provided Data Event se spustí → zahashuje e-mail lokálně a pošle ho do Google spolu s GCLID
  4. Google hash dočasně uloží na své straně a čeká na signál o uzavřeném obchodu
  5. Obchodník 1–8 týdnů pracuje s leadem, obchod se uzavře v CRM
  6. Ty vyexportuješ z CRM closed deals s poli: email, conversion_name, conversion_time, conversion_value
  7. Nahraješ je do Google Ads přes Data Manager / Zapier / API
  8. Google spáruje: „Aha, tenhle e-mail před týdnem klikl na reklamu a nechal poptávku“ → přiřadí konverzi k původnímu kliku

Krok 1. Přijmout Customer Data Terms v Google Ads

1. Jdi do Goals (ne do Conversions!)

Jdeš do Google Ads → ikona „klíč“ (Tools and settings) → sekce MeasurementGoals.

Je to jiná sekce než Conversions. Goals je právě to místo, kde se EC for Leads aktivuje.

2. Zapni Enhanced Conversions for Leads

V Goals najdi blok Enhanced conversions for leads. Přepni toggle na ON.

3. Vyber metodu Google Tag Manager

Objeví se výběr metody implementace. Tři varianty:

  • Google Tag (gtag.js) — pokud nemáš GTM
  • Google Tag Manager — naše varianta
  • Google Ads API — server-side, není tématem tohohle článku

4. Přečti si a přijmi Customer Data Terms

Google ukáže text policy. Přečteš → zaškrtneš „I agree to the Customer Data Terms“Save. Status se má změnit na Accepted.

Co tím potvrzuješ: máš zákonný důvod předávat data uživatele (consent ve formuláři nebo legitimate interest) a v zásadách ochrany osobních údajů je napsáno, že data mohou být předávána do Google v hashované podobě.

⚠️ Když Terms nejdou přijmout

„If you aren’t able to view terms, it’s because your account conversions are tracked by a manager account“ — znamená to, že konverze jsou řízené z MCC. V takovém případě je potřeba Terms přijmout z rodičovského MCC účtu, ne z dceřiného. Jdi do MCC → Goals → Accept Terms. Tohle často musí udělat právě majitel byznysu, agentura bez přístupu to nezvládne.


Krok 2. Conversion Linker v GTM

Conversion Linker detekuje GCLID v URL a ukládá ho do first-party cookie domény. Bez něj Google nedokáže přiřadit hash e-mailu ke konkrétnímu kliku na reklamu.

Pokud už máš nasazený Google Ads Conversion Tracking — Conversion Linker tam nejspíš už je. Zkontroluj to v Tags. Pokud tam není — vytvoř ho:

1. Vytvoř Conversion Linker tag

  • GTM → Tags → New
  • Tag Type: Conversion Linker
  • Trigger: All Pages
  • Název: Conversion Linker
  • Save

Krok 3. Zkontroluj dataLayer po odeslání formuláře

Než začneš lézt do nastavení tagu — ujisti se, že se po odeslání formuláře data klienta reálně pushnou do dataLayer. Pokud tam nejsou — dál není co dělat.

1. Otevři svůj web v Chrome DevTools

Jdi na stránku s poptávkovým formulářem. F12 (nebo Cmd+Option+I na Macu) → záložka Console.

2. Vyplň testovací poptávku

Svým reálným e-mailem a telefonem (později se dá z CRM smazat). Zmáčkneš Submit.

3. Podívej se na dataLayer

Do Console napiš: window.dataLayer → Enter. Najdi v odpovědi objekt s událostí po odeslání. Žádoucí formát:

{
  event: "lead_submit",
  user_data: {
    email_address: "[email protected]",
    phone_number: "+380501234567",
    address: {
      first_name: "Ivan",
      last_name: "Petrenko",
      postal_code: "01001",
      country: "UA"
    }
  }
}

Názvy polí můžeš mít jiné — to je v pořádku. Hlavní je, aby e-mail byl povinně, telefon ideálně. Zapamatuj si přesné klíče — budeš je potřebovat v Kroku 5.

⚠️ Když v dataLayer data nejsou

Znamená to, že vývojář push neudělal. Dej mu tenhle úryvek — je potřeba ho vložit do handleru úspěšného odeslání formuláře (nebo na thank-you stránku):

window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
  event: "lead_submit",
  user_data: {
    email_address: "{{email_from_form}}",
    phone_number: "{{phone_from_form}}",  // formát E.164: +380...
    address: {
      first_name: "{{first_name}}",
      last_name: "{{last_name}}",
      postal_code: "{{postal_code}}",
      country: "UA"
    }
  }
});

Důležité: posílej data v plain textu, bez hashování. Google si je zahashuje sám v prohlížeči před odesláním.


Krok 4. Výběr způsobu sběru dat

Google dává tři varianty sběru user data. Tady je srovnání:

MetodaNáročnostKdy ji volit
AutomaticMinimálníJednoduché formuláře. Ale telefon se nesbírá automaticky — jen e-mail a adresa
Manual (CSS Selectors)StředníKdyž potřebuješ telefon, ale nemáš vývojáře na dataLayer. Musíš znát CSS selektory polí formuláře
Code (Data Layer)Vysoká (potřebuješ vývojáře)Doporučeno — nejstabilnější varianta, maximální Match rate

Dál ukazuju Code (Data Layer) — právě tuhle variantu Google doporučuje pro maximální přesnost. Když se CSS selektory při redesignech mění, Manual se „rozbije potichu“ a ty si toho nevšimneš. Data Layer je stabilní, pokud ho vývojář udělal.


Krok 5. Vytvoř Data Layer Variables

V GTM: VariablesUser-Defined VariablesNew.

1. Proměnná pro e-mail

  • Name: DLV - user email
  • Variable Type: Data Layer Variable
  • Data Layer Variable Name: user_data.email_address (nebo tvůj klíč)
  • Save

2. Zopakuj pro všechna pole

Vytvoříš stejné proměnné pro:

  • DLV - user phoneuser_data.phone_number
  • DLV - first nameuser_data.address.first_name
  • DLV - last nameuser_data.address.last_name
  • DLV - postal codeuser_data.address.postal_code
  • DLV - countryuser_data.address.country

Čím víc polí posíláš — tím vyšší Match rate u Google. Minimum = e-mail. Ideál = e-mail + telefon + adresa.


Krok 6. Vytvoř Trigger pro událost lead_submit

1. Custom Event Trigger

  • GTM → TriggersNew
  • Trigger Type: Custom Event
  • Event Name: lead_submit — přesně jako v tvém dataLayer pushi
  • This trigger fires on: All Custom Events
  • Name: CE - lead_submit
  • Save

Krok 7. Vytvoř User-Provided Data Variable

1. Nová proměnná typu User-Provided Data

  • Variables → New → Variable Type: User-Provided Data
  • Type: Code

2. Naváž pole na DLV proměnné

  • Email: {{DLV - user email}}
  • Phone Number: {{DLV - user phone}}
  • First Name: {{DLV - first name}}
  • Last Name: {{DLV - last name}}
  • Postal Code: {{DLV - postal code}}
  • Country: {{DLV - country}}

Pojmenuj proměnnou UPD - Lead User Data → Save.

Když jsou data zahashovaná už na straně webu

Pokud z nějakého důvodu vývojář hashuje data dřív, než se dostanou do dataLayer (stává se v paranoidních setupech), je potřeba:

  • Používat Hex-encoded SHA256 (ne Base64)
  • Prefixovat pole: sha256_email_address, sha256_phone_number, sha256_first_name a tak dál
  • postal_code a countrynehashovat, nechat plain text

V 99 % případů tohle dělat nemusíš — ať hashuje Google. Jednodušší a stabilnější.


Krok 8. Google Ads User-Provided Data Event Tag

⚠️ Tohle NENÍ tag Google Ads Conversion Tracking

EC for Leads používá samostatný typ tagu — Google Ads User-Provided Data Event. Neplést se stávajícím Conversion Tracking tagem, který už máš. Ten funguje zvlášť a není potřeba na něj sahat.

1. Vytvoř tag

  • GTM → Tags → New
  • Tag Type: Google Ads User-Provided Data Event
  • Conversion ID: tvoje Google Ads Customer ID ve formátu AW-1234567890 (bere se z adresy účtu — odstraníš pomlčky)
  • User-Provided Data: {{UPD - Lead User Data}}

2. Naváž trigger

Triggering: CE - lead_submit (vytvořený v Kroku 6).

Název: GAds - EC for Leads → Save.


Krok 9. Preview + Publish

1. Preview

Zmáčkni Preview nahoře vpravo. Otevře se Tag Assistant. Zadej URL svého webu → Connect.

2. Projdi trychtýř s odesláním formuláře

V otevřeném okně Tag Assistantu jdi na stránku s formulářem, vyplň ho, zmáčkni Submit. V Tag Assistantu se objeví událost lead_submit.

3. Zkontroluj, že se tag spustil

  • Otevři událost lead_submit v Tag Assistantu
  • Sekce Tags Fired → má tam být GAds - EC for Leads
  • Klikni na něj → záložka Properties
  • Zkontroluj User-Provided Data: e-mail, telefon a zbylá pole nesmí být prázdná

V Preview se data zobrazují v plain textu — to je normální. Hashování probíhá později, za běhu, před odesláním do Google.

4. Když je tag v Tags Not Fired

Znamená to, že trigger CE - lead_submit nesedí. Zkontroluj:

  • Event name v dataLayer a v Custom Event Triggeru jsou naprosto stejné (na velikosti písmen záleží)
  • Custom Event Trigger je nastavený na All Custom Events, ne na nějaký filtr
  • U tagu je Triggering = CE - lead_submit, ne náhodné All Pages

5. Publish

Když všechno funguje — vrať se do GTM → Submit → popiš verzi („EC for Leads setup“) → Publish. EC začíná fungovat na produkci.


Krok 10. Verifikace přes Network requests

Hlavní rychlá kontrola je, že data reálně letí do Google. Preview ukazuje lokální obrázek, kdežto Network ukazuje reálné HTTP požadavky.

1. Otevři DevTools → Network

Jdi na stránku s formulářem (v běžném režimu, ne v Preview). F12 → záložka Network. Zaškrtni Preserve log.

2. Vyčisti logy a vyplň formulář

Zmáčkni „koš“ v Network, ať to vyčistíš. Vyplň formulář → Submit.

3. Najdi požadavek na google.com/pagead/form-data/

Vyfiltruj Network podle form-data nebo pagead. Má tam být požadavek na adresu https://google.com/pagead/form-data/....

V Query String Parameters (nebo Payload) hledej parametry:

  • em= — hash e-mailu
  • pn= — hash telefonu
  • fn=, ln=, pc=, co= — ostatní pole

Pokud vidíš u těchto parametrů neprázdné hodnoty — data reálně letí do Google ✅. Pokud požadavek je, ale parametry jsou prázdné — user_data se někde trhá (vrať se do GTM a zkontroluj DLV proměnné).


Krok 11. Import offline konverzí (kritický krok)

⚠️ Bez tohohle kroku EC for Leads nefunguje

Celý smysl EC for Leads je v tom, aby se odeslání formuláře (které je v GTM) propojilo s uzavřeným obchodem (který je v CRM). Pokud posíláš user data do Google, ale nikdy neexportuješ closed deals — Google se o uzavřených obchodech nikdy nedozví a atribuce se neaktualizuje.

Jsou tři způsoby importu:

Varianta A. Google Ads Data Manager (doporučeno)

  1. Google Ads → Tools → Data ManagerConnect product
  2. Vybíráš zdroj: Google Sheets / BigQuery / Salesforce / HubSpot / SFTP / Cloud Storage / HTTP
  3. Nastavuješ rozvrh (denně / každou hodinu)
  4. Mapuješ pole: email → User-Provided → Email, value → Conversion Value, timestamp → Conversion Time, currency → Currency
  5. Save → Test import

Formát CSV (pro Google Sheets / SFTP):

email,conversion_name,conversion_time,conversion_value,conversion_currency
[email protected],Lead Closed,2026-04-24 14:30:00+00:00,5000,UAH
[email protected],Lead Closed,2026-04-24 15:12:00+00:00,12000,UAH

Varianta B. Zapier

Pokud CRM nemá nativní integraci s Data Managerem — vem Zapier. Trigger — „New Closed Deal in CRM“, Action — „Google Ads: Upload Offline Conversion“. Namapuješ pole, spustíš. Funguje okamžitě.

Varianta C. Google Ads API

Pokud máš vývojáře a chceš plnou kontrolu — přes ConversionUploadService + UserIdentifier. Složitější, ale flexibilnější. Doporučuju jen tehdy, když ostatní dvě varianty z nějakého důvodu nesedí.

Frekvence importu — denně automaticky. Google přijímá data za posledních 90 dní. Takže to můžeš spustit a navždy zapomenout.


Krok 12. Kontrola v Google Ads Diagnostics

Za 24–72 hodin po publikaci (a když přes formulář prošlo ≥20 poptávek):

  1. Google Ads → Tools → Conversions → klik na svou Lead konverzi
  2. Záložka Diagnostics
  3. Sekce Enhanced conversions for leads
MetrikaCo znamenáCíl
Data received% konverzí, se kterými přišla user data z webu> 70 %
Match rate% konverzí, kde Google dokázal spárovat e-mail s účtem Google> 50 %
StatusRecording / Not recordingRecording

Pokud Status = Not recording po 72 hodinách — tag se vůbec nespouští nebo je dataLayer prázdný. Vrať se do Preview.

Pokud Data received nízké (< 50 %) — EC není napojené na všech konverzních bodech (možná máš víc formulářů — každý musí pushnout user_data).

Pokud Data received vysoké, Match rate nízké — problém je ve formátu dat (viz níž).


Časté problémy

ProblémPříčinaJak to spravit
Status = Not recordingTag se nespouštíGTM Preview → zkontroluj trigger Custom Event = lead_submit
Match rate = 0 %Data jsou předhashovaná na webu, ale GTM je považuje za plain text (nebo naopak)Buď posílej plain text (doporučeno), nebo přidej k polím prefix sha256_
Match rate nízký (< 30 %)Špatný formát telefonuFormát E.164: +380501234567 — plus, bez mezer, závorek, pomlček
E-mail se nepárujeMezery, velká písmenaPřed pushem do dataLayer: email.toLowerCase().trim()
„Terms are not accepted“Účet je pod MCCPřijmi Customer Data Terms z rodičovského MCC účtu
Conversions se neimportujíE-mail v CRM se liší od e-mailu na webu (s mezerou, jinou doménou)Před uploadem — normalizuj: lowercase + trim. Zkontroluj, jestli CRM nepřidává sufixy typu +sales
EC mlčí, ale Consent Mode = deniedUživatel odmítl cookiesBy design. EC neposílá data bez consentu. Zkontroluj % granted mezi svými uživateli.
Smart bidding nemění chováníMálo dat (< 30 uzavřených obchodů/měsíc)EC for Leads potřebuje objem. U malých účtů se efekt projeví za 2–3 měsíce

Co dál — po 2–3 týdnech

  • Match rate se stabilizuje na 50–80 %. Google začíná vidět celý obrázek od kliku k uzavřenému obchodu.
  • Smart Bidding se překalibruje — algoritmus si všimne, že část „leadů“ se reálně stává prodeji a část ne. Začne tahat provoz podobný těm prvním.
  • Můžeš přepnout strategii na Maximize Conversion Value s prioritou na konverzi „Lead Closed“ (a ne prostě „Lead Submit“). Teď už Google data na to má.
  • Conversion Value Rules — pokud máš MQL → SQL → Closed s různými pravděpodobnostmi, dá se jim přiřadit různá váha. Například Closed Deal = ×10 proti MQL = ×1.

Dál je zrcadlo tohohle na Facebook CAPI: posíláš hashovaný e-mail do Facebooku po odeslání formuláře a uzavřené obchody přes Conversions API Offline Events. Logika je stejná.

✅ Krátký checklist

  • Google Ads → Goals → Enhanced conversions for leads = ON, metoda GTM
  • Customer Data Terms přijaté (ze správného účtu, pokud MCC)
  • Conversion Linker tag v GTM + trigger All Pages
  • Po odeslání formuláře — v dataLayer je user_data.email_address (plain text)
  • DLV proměnné vytvořené pro email, phone, first_name, last_name, postal_code, country
  • Custom Event Trigger CE - lead_submit vytvořený
  • User-Provided Data Variable (Code type) vytvořená a navázaná na DLV
  • Google Ads User-Provided Data Event tag vytvořený se správným Conversion ID
  • Preview verified — tag se spouští, user_data není prázdné
  • Network verified — em=, pn= letí na google.com/pagead/form-data/
  • GTM kontejner je publikovaný
  • Nastavený pravidelný import closed deals z CRM přes Data Manager / Zapier
  • Za 24–72 hodin — Diagnostics: Status = Recording, Data received > 70 %, Match rate > 50 %