Specialbygget webshop
Sæt sporingen op på en webshop, der er kodet til jer, fx i Laravel eller PHP – uden at kende feltnavne.
Har I en webshop, der er udviklet til jer – fx i Laravel, Symfony eller et andet framework – kræver sporingen to ting: et script på alle sider og en måde at melde salget på. Salget kan I ofte melde uden at røre kvitteringssiden, fordi jeres site allerede sender købet til Google Analytics. Ellers er det en enkelt linje HTML.
Før du starter
- Jeres hjemmeside skal være gemt i installationstrinnet under Program → Opsætning – scanningen og testlinket bruger den.
- Vælg Specialbygget webshop under Hvor sælger du?.
- Jeres butiks-id. Kodestumperne i Opsætning har det sat ind; her står
DIN_BUTIKi stedet.
Det beløb, provisionen regnes af
Provisionen regnes af varerne efter rabat, uden moms og fragt. Gebyrer er heller ikke med. Det er det beløb, salget skal meldes med – uanset hvilken vej I vælger nedenfor.
1. Scriptet på alle sider
Indsæt scriptet i <head> i jeres fælles layout, så det er med på alle sider – også kvitteringen. Det husker affiliate-klikket, når kunden lander, så et senere køb kan krediteres.
<script src="https://app.affilyflow.com/track.js" data-store="DIN_BUTIK" async></script>Scriptet har async, så det aldrig holder siden tilbage. Hvad det gemmer, og hvornår, står i track.js.
2. Start med "Scan jeres site"
Tryk Scan jeres site i salgstrinnet. Vi henter jeres forside og en produktside (højst tre sider, evt. via en kategoriside) og kigger efter to ting:
- Google Analytics 4-e-handel – hændelser som
view_item,add_to_cartellerbegin_checkoutmed varer, sendt gennemdataLayerellergtag. - Google Tag Manager eller et GA4-tag uden synlige købsdata.
Finder vi e-handelsdata, måler vi også, om beløbene i Google Analytics er med moms: vi sammenligner prisen i view_item med den pris, produktsiden selv viser. Kan det ikke måles, bruges jeres lands standardmoms.
Scanningen ser også efter et cookiebanner. Bruger sitet Cookiebot eller Cookie Information, sættes Cookiebanner til Vent på samtykke: scriptet får data-consent="required" og gemmer først klikket, når kunden har sagt ja til marketing. Indstillingen kan altid skiftes i Opsætning. Se Samtykke og cookies.
| Resultat | Det betyder |
|---|---|
| Fundet: jeres site sender købsdata til Google Analytics | Opsætning skifter til Automatisk fra Google Analytics. Se vej A. |
| Google Tag Manager fundet – men ingen købsdata at se | Ved jeres udvikler, at Tag Manager sender købet til GA4, kan I vælge vej A. Ellers vej B. |
| Ingen købsdata fra Google Analytics fundet | Brug linjen på kvitteringssiden – vej B. |
| Sitet afviste scanningen | Fx et bot-værn. Brug vej B, eller vælg vej A, hvis I ved, at sitet sender købet til GA4. |
Under Sådan meldes salget kan I altid skifte mellem Automatisk fra Google Analytics og Linje på kvitteringssiden.
Vej A: Automatisk fra Google Analytics
Sender jeres kvitteringsside allerede en GA4-hændelse purchase, kan scriptet læse købet selv. Der skal ingen kode på kvitteringssiden, og ingen behøver kende skabelonens feltnavne. Scriptet får blot data-sale="ga4":
<script src="https://app.affilyflow.com/track.js" data-store="DIN_BUTIK" data-sale="ga4" data-sale-vat="25" async></script>Kopier den præcise linje fra Opsætning – den har jeres indstillinger med:
data-sale-vat="25"står der, når beløbene i Google Analytics er med 25 % moms. Momsen trækkes fra. Er beløbene uden moms, står attributten der ikke.data-sale-shipping="incl"eller"excl"står der, når I har valgt Med fragt eller Uden fragt. Med Find selv gætter scriptet: ervaluestørre end varelinjerne, regnes fragten med og trækkes fra.
Scriptet læser hændelsen i begge former:
dataLayer.push({ event: 'purchase', ecommerce: { transaction_id: 'A-1008', value: 724.00, shipping: 49.00, currency: 'DKK', items: [ /* ... */ ] } });
// eller
gtag('event', 'purchase', { transaction_id: 'A-1008', value: 724.00, shipping: 49.00, currency: 'DKK', items: [ /* ... */ ] });Ordrenummeret er transaction_id, og beløbet er value – minus fragten, når den er med – divideret med momsen. Scriptet holder øje med dataLayer i 60 sekunder, så en hændelse, der kommer efter siden er indlæst, kommer også med.
Mere om vejen i Google Analytics.
Vej B: Linjen på kvitteringssiden
Sender sitet ikke købet til Google Analytics, sætter I en linje HTML et sted i <body> på kvitteringssiden – siden kunden ser efter et gennemført køb:
<div hidden data-affilyflow-order="DIN_ORDRE_ID" data-affilyflow-total="DIT_BELOEB"></div>Erstat DIN_ORDRE_ID med jeres variabel for ordrens nummer og DIT_BELOEB med beløbet for varerne efter rabat, uden moms og fragt. Der er ingen JavaScript at skrive: scriptet finder linjen og melder salget.
Sådan ser det ud i de mest almindelige skabelonsprog. Feltnavnene er eksempler – brug dem, jeres system har på kvitteringssiden:
<div hidden data-affilyflow-order="{{ $order->id }}" data-affilyflow-total="{{ $order->subtotal }}"></div><div hidden data-affilyflow-order="<?= $order->id ?>" data-affilyflow-total="<?= $order->subtotal ?>"></div><div hidden data-affilyflow-order="{{ order.id }}" data-affilyflow-total="{{ order.subtotal }}"></div><div hidden data-affilyflow-order="{{ order.id }}" data-affilyflow-total="{{ order.subtotal }}"></div><div hidden data-affilyflow-order="{$order.id}" data-affilyflow-total="{$order.subtotal}"></div>Det kan linjen også
| Attribut | Virkning |
|---|---|
data-affilyflow-vat="25" | Beløbet er med 25 % moms, som trækkes fra. |
data-affilyflow-currency="EUR" | Valutaen, når I ikke sælger i kroner. Standard er DKK. |
data-affilyflow-order="?orderId" | Læser ordrenummeret fra parameteren orderId i sidens adresse. |
data-affilyflow-total="#af-total" | Læser beløbet fra teksten i elementet med id'et af-total. |
Beløb som 1249.50 og 1.249,50 virker begge. Tegner jeres side kvitteringen efter indlæsning (fx Livewire eller React), finder scriptet linjen alligevel: det holder øje med siden i 60 sekunder, og når linjen er der, venter det op til 20 sekunder på, at ordrenummer og beløb er udfyldt. Hver linje meldes kun en gang.
Alle detaljer står i Salgslinjen.
Kender I ikke feltnavnene?
Det gør jeres kode. Under Lad jeres AI-kodeassistent sætte det op i Opsætning ligger en færdig prompt. Kopier den ind i Claude Code, Cursor, Copilot eller ChatGPT i jeres projekt – assistenten kan se koden, finde kvitteringssiden og de rigtige felter og indsætte linjen. Prompten ser sådan ud (med jeres adresse og butiks-id):
Sæt Affilyflow-affiliatesporing op i dette projekt (dinbutik.dk).
1. Indsæt dette script i <head> i det fælles layout, så det er med på alle sider:
<script src="https://app.affilyflow.com/track.js" data-store="DIN_BUTIK" async></script>
2. Find visningen, kunden ser efter et gennemført køb (ordrebekræftelsen/kvitteringen), og de variabler, der er tilgængelige der. Indsæt dette et sted i <body> på den side:
<div hidden data-affilyflow-order="ORDRENUMMER" data-affilyflow-total="BELØB"></div>
- ORDRENUMMER = ordrens nummer, som kunden ser det.
- BELØB = varernes beløb efter rabat, UDEN moms og UDEN fragt og gebyrer, med punktum som decimaltegn (fx 540.00). Findes kun et beløb med moms, så divider med 1.25 (25 % moms).
- Brug skabelonsprogets almindelige udskrivning (med escaping). Opfind ikke feltnavne – find dem i ordremodellen, controlleren eller visningen.
- Ændr ikke checkout eller andre filer end layoutet og kvitteringsvisningen.
3. Skriv til sidst, hvilke filer du ændrede, og hvilke variabler du brugte til ordrenummer og beløb.
Testen sker bagefter i Affilyflow: Opsætning → Åbn testlink → læg en testordre. Siden viser ordrenummer og beløb, der kom frem.Ved I selv, hvad felterne hedder, så åbn Ved I selv, hvad felterne hedder? og skriv variablerne for ordrenummer og beløb – linjen bygges med dem. Knapperne under felterne viser skrivemåden i Blade, PHP, Twig, Liquid og Smarty.
Er det en udvikler eller et bureau, der skal gøre det, så tryk Send til udvikler. Vi mailer guiden med scriptet, linjen, prompten og testtrinnet.
3. Test
- Tryk Åbn testlink under testtrinnet, og læg en testordre i den fane, der åbner – i samme browser.
- Bliv på Opsætning. Live-testen viser testklikket og derefter købet med ordrenummer og beløb. Den følger med i op til 10 minutter.
- Svar på spørgsmålet: Er beløbet varernes beløb efter rabat, uden moms og fragt, på din testordre? Svarer I nej, skriver I det rigtige beløb, og live-testen siger, hvad der er galt – fx at beløbet er med moms eller med fragt.
På vej A viser live-testen også udregningen, fx "724,00 kr. fra Google Analytics − 49,00 kr. fragt ÷ 1,25 = 540,00 kr." Er beløbet med moms eller fragt, kan I rette det med et klik (Træk momsen fra eller Træk fragten fra). Rettelsen gælder fra næste salg, uden at scriptet skal ændres – lav et nyt testkøb for at se det.
Et testkøb giver ingen provision eller gebyr og tæller ikke med i jeres tal. Annuller ordren bagefter i jeres shop.
Typiske fejl
Fejl fra linjen eller scriptet står i browserens konsol på kvitteringssiden:
| Konsollen skriver | Årsag |
|---|---|
data-affilyflow-order must be the order number | Ordrenummeret er tomt eller står stadig som pladsholder. |
data-affilyflow-total must be the amount (goods excl. VAT and shipping) | Beløbet er tomt eller 0. |
the purchase event has no amount | GA4-hændelsen purchase havde intet beløb. |
Kommer der slet intet salg, så tjek, at scriptet også ligger på kvitteringssiden, og at testkøbet er lavet i samme browser som testlinket. Mere i Test og fejlfinding.
Lead-programmer
Betaler programmet pr. lead i stedet for pr. køb, skal der ikke meldes et beløb. Skriv adressen på jeres tak-side under Automatisk lead-sporing i Opsætning, så får scriptet tak-sidens adresse med og tæller leads alene:
<script src="https://app.affilyflow.com/track.js" data-store="DIN_BUTIK" data-lead-url="/tak"></script>Her er scriptet uden async, fordi det skal nå at tælle leadet, før tak-siden eventuelt sender kunden videre. Lader I feltet stå tomt, viser Opsætning i stedet et lead-script til tak-siden.
Andre måder at melde salget
Linjen og Google Analytics-vejen dækker de fleste systemer. Den ældre JavaScript-funktion affilyflow.conversion() virker stadig – se track.js. Melder I salget fra jeres egen server, så brug konverterings-API'et.
Mangler du noget?
Skriv til os – vi svarer hurtigt, og siden bliver rettet.