Sporing
Sporings af salg er forbindelsen mellem det, Clerk viser besøgende, og de ordrer de afgiver. Uden dette kan Clerk ikke lære af reelle køb, personalisere anbefalinger eller vise præcise omsætningsdata i dashboardet.
Denne artikel forklarer, hvordan sporing fungerer på API-niveau, hvordan du sætter det op, og hvordan du fejlsøger, når ordrer ikke registreres korrekt.
Sådan fungerer det #
Hver registreret ordre i Clerk går igennem en kæde af tre forbundne led.
Visitor ID #
Når en besøgende ankommer til webshoppen, genererer din server et anonymt session-ID og inkluderer det i hver API-kald under den pågældende session. Det gør, at Clerk kan forbinde en besøgendes adfærd — hvilke produkter de har set og klikket på — med den ordre, de ender med at afgive.
I et Clerk.js-setup genereres og håndteres visitor ID automatisk. I et direkte API-setup er du selv ansvarlig for at oprette det, gemme det (f.eks. i en session-variabel) og sende det videre ved alle kald.
Labels #
Hvert API-kald, der returnerer resultater — søgematcher, anbefalinger, emailresultater — skal inkludere en labels-parameter. Det er et array, der indeholder mindst én beskrivende streng, som ["Homepage - Trending"] eller ["Search - Predictive"], som identificerer hvilket element, der viste de pågældende produkter.
Når en besøgende klikker på et produkt og senere gennemfører en ordre, bruger Clerk labelen fra klikket til at spore salget tilbage til det element, der drev det. Dette er grundlaget for omsætningstilskrivning i analysen.
Labels, der mangler, er identiske for alle elementer eller er for generiske, gør det umuligt for Clerk at skelne, hvilket element der påvirkede et salg. Dette er en af de mest almindelige grunde til, at tilskrivning ser forkert ud eller helt mangler.
Sale Call #
Når den besøgende gennemfører et køb, binder et POST-kald til log/sale ordren til visitor ID’et. Clerk kan nu forbinde hele kæden: denne besøgende fik vist produkter af element X (label), klikkede et, og gennemførte et køb.
For at denne kæde fungerer, skal hvert klik på et produkt vist af Clerk også registreres via log/click. I et Clerk.js-setup sker dette automatisk. I et API-setup skal du selv kalde log/click hver gang en besøgende klikker på et Clerk-produkt — se
API-guiden for detaljer.
Denne kæde — label → klik → salg — driver både personalisering og omsætningsanalyse i my.clerk.io.
Hvad Clerk gemmer #
Hvert sporet salg indeholder:
- En unik sale ID
- Produkt-ID’er, antal og enhedspriser
- Visiting ID (linker salget til sessionen)
- Kunde-email og kunde-ID — valgfrit, giver mulighed for personalisering på tværs af sessioner
Opsætning #
Placér salgs-sporingskaldet på ordrebekræftelsessiden, som indlæses én gang efter gennemført køb. Placér det ikke på kurvsiden eller andre steder i checkout-flowet.
API #
Lav et POST-kald til log/sale fra din server, når en ordre er gennemført. Send samme visitor ID, som blev brugt gennem hele sessionen.
curl -X POST \
-H 'Content-Type: application/json' \
-d '{
"key": "YOUR_PUBLIC_API_KEY",
"sale": 567,
"products": [
{"id": 12793, "price": 99.95, "quantity": 2},
{"id": 1546, "price": 14.00, "quantity": 1}
],
"email": "luke@skywalker.com",
"customer": 1234,
"visitor": "abc123"
}' \
https://api.clerk.io/v2/log/sale
price er altid enhedsprisen for et enkelt produkt. Clerk ganger selv op med quantity internt, når omsætningen beregnes. Send ikke linjetotalen.
Se API-guiden for fuld gennemgang af, hvordan du genererer og fastholder visitor ID på tværs af en session.
Clerk.js #
Clerk.js håndterer visitor ID automatisk og foretager log/sale-kaldet for dig. Tilføj dette snippet til din ordrebekræftelsesside og udskift pladsholderne med dine platform-variable:
<span
class="clerk"
data-api="log/sale"
data-sale="ORDER_ID"
data-email="CUSTOMER_EMAIL"
data-customer="CUSTOMER_ID"
data-products='[{"id": 12, "quantity": 1, "price": 99.95}, {"id": 54, "quantity": 2, "price": 9.50}]'>
</span>
Clerk.js registrerer snippen ved indlæsning og sender salgsdata til API’et, ved brug af det samme visitor ID, der er blevet sporet gennem sessionen.
Verificering af funktion #
Tjek disse tre steder efter at have afgivet en testordre.
Developers > Logs — Eventuelle fejl fra sporingskaldet vises her i realtid. Dette er det hurtigste sted at opdage et forkert konfigureret kald.
Data > Orders — Bekræftede sporede ordrer vises her. Klik på en ordre for at se, hvilke produkter der er blevet sporet, og om Clerk kan identificere dem. Hvis et produkt viser en pladsholderbillede, matcher produkt-ID’et i salgskaldet ikke noget produkt i dit katalog.
Data > Visitors — Søg efter et visitor ID for at gennemgå hele dennes session: hvilke produkter blev set, hvilke Clerk-elementer blev klikket på, og hvilke ordrer der blev gennemført. I et Clerk.js-setup kan du tvinge et bestemt visitor ID under test ved at tilføje ?clerk_visitor=VISITOR_ID til enhver side-URL — Clerk.js vil bruge det ID for sessionen, hvilket gør det let at følge et fuldt testforløb fra ende til anden.
Health dashboardet viser en statusindikator for salgs-sporing. En rød status betyder, at der ikke er modtaget sporede ordrer for nylig.
Fejlfinding #
Følg disse trin, hvis salg ikke spores korrekt.
Tjek logs #
Gå til Developers > Logs og se efter fejl fra log/sale-endpointet. Dette gælder både for API og Clerk.js — ethvert afvist kald vises her straks med en fejlbesked, der forklarer fejlen.
For Clerk.js-setups: Kør også Clerk("debug") i browserens konsol før testordren lægges. Det aktiverer fejlsøgningstilstand, så Clerk.js logger detaljerede oplysninger om alle sporingskald — herunder det visitor ID, der bruges, de labels der sættes på resultatkald, og eventuelle fejl. Se efter poster der starter med [Clerk] i konsoludskriften.
Kontroller API-svar #
log/sale-endpointet returnerer altid et svar. Et succesfuldt ser således ud:
{"status": "ok"}
Et fejlslagent svar har en fejlbeskrivelse, for eksempel:
{"status": "error", "error": "Missing required argument: sale"}
Læs fejlbeskeden — den peger som regel direkte på problemet.
API-setup: Log det rå HTTP-svar fra log/sale-kaldet i din serverkode. Hvis du ikke allerede gør dette, test da kaldet direkte med en kendt god payload:
curl -X POST \
-H 'Content-Type: application/json' \
-d '{
"key": "YOUR_PUBLIC_API_KEY",
"sale": 999,
"products": [{"id": 12793, "price": 99.95, "quantity": 1}],
"visitor": "test-visitor-1"
}' \
https://api.clerk.io/v2/log/sale
Hvis dette lykkes, men produktionskald ikke gør, så sammenlign payloads nøje — forskellen afslører fejlen.
Clerk.js-setup: Åbn browserens DevTools, gå til Network-fanen, og filtrer efter clerk. Lav en testordre og find et request der starter med sale?key=.... Klik på det og gennemgå svaret der.
Kontroller request-parametre #
Hvis ordrer ikke spores eller ikke attribueres korrekt, så tjek nedenstående for hele din opsætning:
API key — Bekræft at key matcher Public API Key fundet i Developers > API Keys. Et forkert key giver straks en autentificeringsfejl.
Visitor ID — Tjek at visitor er til stede og den samme værdi, der blev brugt i tidligere resultatkald i sessionen. Hvis du genererer et nyt ID ved hvert kald eller gemmer det et sted, der bliver slettet inden checkout, vil ID’et i salgskaldet ikke matche det, der blev brugt ved klik.
Labels — Bekræft at alle kald, der tidligere returnerede resultater, havde et labels-array med unik label for hvert element. Hvis labels mangler eller er ens på tværs af elementer, registrerer Clerk salget, men kan ikke attribuere det til et bestemt element.
Produkt-ID’er — Tjek at ID’er i products-arrayet matcher ID’er, som Clerk kender i dit katalog. Søg efter et af ID’erne i Data > Products for at kontrollere. Hvis du ikke kan finde det, sender du sandsynligvis variant-ID’er eller SKU’er snarere end parent-produkt-ID’er.
Sale ID — Bekræft at sale-værdien er unik for hver ordre og ikke genbruges. Clerk ignorerer stiltiende dublerede sale ID’er.
Intet kald bliver lavet #
API-setup: Kaldet bliver ikke udført fra din server. Tjek din order completion-handler — sikr dig, at den faktisk aktiveres efter et gennemført køb, og at ingen undtagelser forhindrer sporingskaldet. Læg midlertidig logging omkring log/sale-kaldet for at se, om det eksekverer.
Clerk.js-setup: Clerk.js-biblioteket kører ikke på bekræftelsessiden. Åbn browserens konsol og skriv Clerk. Hvis du får følgende fejl, er biblioteket ikke indlæst:
Uncaught ReferenceError: Clerk is not defined
Bekræft at Clerk.js-sporingsscriptet er til stede i skabelonen for bekræftelsessiden, og at det ikke blokeres af andre scripts eller et cookie-samtykkeværktøj.
Ingen Clerk-effekt #
Hvis salgskaldet lykkes, men ingen ordrer vises som Clerk-påvirket i analyser, har Clerk registreret ordren, men kunne ikke forbinde den til en session eller tilskrive den til et element.
log/click bliver ikke kaldt — Den mest almindelige årsag. Clerk kan ikke tilskrive et salg til et element, medmindre et klik blev logget før købet. I et Clerk.js-setup sker kliksporing automatisk — bekræft at biblioteket er indlæst på de sider, hvor Clerk-resultater vises. I et API-setup, kontroller at din kode kalder log/click hver gang en besøgende klikker på et Clerk-produkt, og at kaldet faktisk når API’et (tjek dine serverlogs eller svaret).
Manglende eller ugyldige labels — Tjek at alle opkald, der returnerer resultater, og alle log/click-kald har et gyldigt labels-array. Hvis labels mangler, er tomme eller kun indeholder whitespace, kan Clerk ikke afgøre, hvilket element den besøgende interagerede med, og salget bliver ikke attribueret.
API-setup: Bekræft, at visitor ID i log/sale-kaldet præcis matcher det, der blev sendt i log/click, da den besøgende klikkede på produktet. Selv en lille forskel — andet format, ekstra tegn eller gen-genereret ID — bryder forbindelsen.
Clerk.js-setup: Visitor ID’er håndteres automatisk, men kæden kan brydes, hvis sporingsscriptet mangler på én eller flere sider i checkout-flowet. Kontroller, at Clerk.js indlæses på alle sider fra produktside til bekræftelsesside.
Almindelige fejl #
Dette er de hyppigste årsager til at sporing af salg fejler eller attributtering ikke fungerer korrekt.
Ugyldig produktsyntaks #
Produkt-ID’er skal sendes med samme datatype, som bruges i dit datafeed. Hvis du bruger heltal der, skal det også være heltal i salgskaldet — ikke strenge. Hvis du sender "id": "123" hvor Clerk forventer "id": 123, vil kaldet fejle.
Værdien products skal også være gyldigt JSON. Escapede eller dobbelt-encodede strenge som "products": "[{\"id\":\"123\"}]" vil ikke blive læst korrekt.
Manglende argumenter #
Argumenterne key, sale og products er alle påkrævede. Mangler en af dem, returneres en fejl. Arrayet products skal indeholde mindst ét element.
Clerk.js ikke indlæst #
Hvis Clerk.js-biblioteket mangler på bekræftelsessiden, eller blokeres fra at køre, laves intet salgskald. To typiske årsager:
- Sporingsscriptet er ikke inkluderet i bekræftelsesside-skabelonen.
- Et cookie-samtykkeværktøj (såsom iubenda i automatisk blokeringstilstand) blokerer
cdn.clerk.ioellerapi.clerk.io. Tillad begge domæner, så sporing ikke tabes, hvis besøgende afviser ikke-nødvendige cookies.
Forkerte produkt-ID’er #
Spor parent produkt-ID’et, ikke variant-ID’et. Hvis en besøgende køber en rød, størrelse M t-shirt, skal du spore parent-ID’et, ikke ID’et på den specifikke variant. Det samme ID skal bruges både i klik-sporing og i salgskald. Mismatchede ID’er ødelægger attributtering, selv hvis begge kald lykkes.
Visitor ID ændres #
I et API-setup skal visitor ID være det samme fra første sidevisning til salgskaldet. Hvis du genererer et nyt ved hver indlæsning, vil klik og salg blive forbundet til forskellige sessioner, og Clerk kan ikke koble dem sammen.
I Clerk.js håndteres dette automatisk, men kan brydes, hvis sporingsscriptet mangler fra en eller flere sider i checkout-flowet.
Enhedspris mismatch #
price i products-arrayet skal være enhedsprisen for ét produkt. Clerk ganger det med quantity for at beregne omsætningen. Sender du en forud-multipliseret linjetotal, får du for høje omsætningstal i analysen.
Genbrugte Sale ID’er #
Clerk gemmer kun det første kald for et givet sale ID. Hvis ordrebekræftelsessiden kan genindlæses eller besøges igen, fyres trackingkaldet igen med samme sale ID. Det andet kald ignoreres stiltiende.
Brug et server-flag eller en sessionsmarkør til at sikre, at sporing kun udføres én gang pr. ordre.
Manglende besøgsdata #
Hvis hverken visitor eller email er inkluderet i salgskaldet, registrerer Clerk ordren men kan ikke binde den til en session eller kundekonto. Ordren vises i Data > Orders, men vil aldrig stå som Clerk-påvirket i analysen.
Inkludér altid parameteren visitor. At tilføje email og customer, når det er muligt, forbedrer også personalisering på tværs af kommende sessioner for kunden.
Deaktivering af besøgs-sporing #
For at stoppe sporing for en specifik besøgende — fx hvis denne har afvist al sporing via cookie-banner — send "visitor": null i alle API-kald for den session. Clerk behandler kaldet normalt, men logger ingen handlinger på en besøgsprofil.
I et Clerk.js-setup sætter du det i config’en:
Clerk('config', {
key: 'YOUR_API_KEY',
visitor: null
});
Salg bliver stadig logget, når besøgs-sporing er slået fra. Clerk modtager ordredata og inkluderer dem i analysen, men uden nogen session-kontekst — ingen klik-historik, ingen sete produkter, ingen element-attributtering. Clerk ved kun, hvad der blev købt, ikke hvordan den besøgende kom derhen.
Denne side er oversat af en hjælpsom AI, og der kan derfor være sproglige fejl. Tak for forståelsen.