Wo das Tracking-Script die Click-ID eines Besuchers ablegt, alle Wege, sie auszulesen – die JavaScript-API window.lj, der Browser-Speicher, ein Hidden Field, das clickId-Cookie auf deinem Server und der URL-Parameter lj_click_id – und wie du sie kombinierst, damit dein eigenes Buchungssystem, Formular oder Backend bei jedem Event eine click_id mitsendet.
Wenn du Events selbst sendest – aus einem eigenen Buchungssystem, einem selbst gebauten
Formular oder deinem Backend –, verbindet die click_id jedes Event mit genau der Kampagne, dem
Ad-Set und der Anzeige. Diese Seite zeigt, wo das Tracking-Script die Click-ID ablegt, alle Wege,
sie auszulesen, und wie du diese Wege kombinierst, damit du die ID auch dann hast, wenn einer
davon ausfällt.
Kurz gesagt
Lies die Click-ID im Browser beim Absenden des Formulars mit window.lj.getClickId() aus
und greife ersatzweise auf den Browser-Speicher und die URL zurück.
Ergänze ein verstecktes Feld lj_click_id im Formular als zweiten Weg und lies auf deinem
Server das Cookie clickId als dritten.
Speichere die ID an der Buchung bzw. am Kontakt und sende sie mit jedem Event – zusammen
mit email und phone.
Kommt ein Besucher mit lj_click_id in der URL an (jeder getrackte Link trägt ihn), speichert
das Tracking-Script diese ID. Ein Besucher ohne sie bekommt vom Script eine neue Click-ID. Auf
jeder Seite, auf der das Script gelaufen ist, hat der Besucher also eine Click-ID – und sie liegt
an mehreren Stellen gleichzeitig:
Wo
Name
Wie lange
Wer sie lesen kann
URL-Parameter
lj_click_id
Bis das Script sie gespeichert hat – dann wird er aus der Adresszeile entfernt
JavaScript beim selben Seitenaufruf
localStorage
clickId
Bis der Besucher die Website-Daten löscht
JavaScript auf demselben Host
Cookie
clickId
60 Tage
JavaScript auf demselben Host und dein Server
sessionStorage
clickId
Bis der Tab geschlossen wird
JavaScript im selben Tab
Der Speicher gilt nicht über Domains – auch nicht über Subdomains
All das gehört zum exakten Host, auf dem das Script lief. www.deinebrand.de und
buchung.deinebrand.de können gegenseitig weder Speicher noch Cookie lesen. Zwischen Hosts
muss die Click-ID in der URL als lj_click_id reisen – siehe Über Domains, Subdomains und
iframes hinweg.
Lies sie beim Absenden, nicht beim Laden der Seite
Nach dem Laden meldet das Script den Besuch an LeadJourney. Die Antwort kann eine korrigierte
Click-ID enthalten – das Script ersetzt dann jede gespeicherte Kopie und jedes befüllte Hidden
Field. Liest du die ID im Moment des Absendens, bekommst du immer den endgültigen Wert.
window.lj gibt es erst, nachdem das Script geladen ist. Stoppt ein Ad-Blocker oder ein
Consent-Tool das Script oder ist es auf der Seite nicht installiert, ist window.ljundefined – deshalb greift das empfohlene Setup auf die
anderen Wege zurück.
Du kannst die gespeicherten Werte direkt auslesen. Das funktioniert auch dann, wenn das Script
beim aktuellen Seitenaufruf blockiert ist – solange es bei einem früheren Besuch auf demselben
Host gelaufen ist:
Füge deinem Formular ein verstecktes Feld hinzu – ganz ohne JavaScript. Das Script befüllt es
automatisch mit der Click-ID:
<input type="hidden" name="lj_click_id" />
Das Script erkennt die Namen lj_click_id, lj_clickid, click_id und clickid (auch mit
angehängtem _ und als form_fields[lj_click_id] für Elementor) sowie Felder, deren
aria-label einer dieser Namen ist. Felder, die nach dem Laden dazukommen – ein späterer
Schritt eines mehrstufigen Formulars, ein Widget, das spät rendert –, werden befüllt, sobald sie
erscheinen. Setzt dein eigener Code den Wert zurück, rufe window.lj.mountClickId() auf, um ihn
erneut zu befüllen.
Zwei Grenzen des Hidden Fields
Befüllt wird nur das erste passende Feld auf der Seite. Hast du mehrere Formulare auf
einer Seite, setze den Wert beim Absenden selbst (siehe Schritt 2
unten).
Das Script setzt den Wert direkt, ohne input-Event. React, Vue und andere kontrollierte
Formulare sehen ihn daher nicht in ihrem State – lies die ID dort beim Absenden mit
getClickId() aus.
Der Browser sendet das Cookie clickId bei jedem Request an denselben Host, auf dem das
Script läuft. Schickt dein Buchungsformular an diesen Host, kann dein Server die ID ohne
JavaScript auslesen:
// mit der Middleware cookie-parserconst clickId = req.cookies.clickId ?? null;
$clickId = $_COOKIE['clickId'] ?? null;
click_id = request.cookies.get("clickId")
Das Cookie gilt nur für den exakten Host. Ein Request von www.deinebrand.de an
api.deinebrand.de trägt es nicht mit.
Auf einer Seite ohne Tracking-Script kommt die Click-ID als ?lj_click_id=… an – zum
Beispiel, wenn ein Besucher von deiner Website zu einem Buchungssystem auf einem anderen Host
klickt. Sie steht nur in der URL dieser ersten Seite, also lies sie einmal beim Laden aus und hebe
sie auf:
// Nur auf Seiten OHNE Tracking-Script – einmal beim Laden der Seite ausführenconst fromUrl = new URLSearchParams(window.location.search).get("lj_click_id");if (fromUrl) { try { localStorage.setItem("clickId", fromUrl); } catch {}}
Speicherst du sie unter clickId, findet der Helper unten sie genauso wie auf Seiten mit Script.
Auf Seiten mit Script verlässt du dich nicht auf die URL: Das Script entfernt lj_click_id
aus der Adresszeile, sobald es die ID gespeichert hat.
Kein einzelner Weg funktioniert überall – Scripts werden blockiert, Formulare liegen auf anderen
Subdomains, React-Formulare ignorieren Hidden Fields, und zwischen Buchung und nächstem Event
liegen oft Tage. Kombiniere die Wege so, dass jeder die Lücken der anderen schließt.
Binde diesen Helper auf den Seiten mit deinem Buchungsformular ein. Er versucht zuerst die API des
Scripts, dann die gespeicherten Werte, dann die URL:
// Gibt die LeadJourney-Click-ID des Besuchers zurück, oder null, wenn es keine gibt.async function getClickId() { try { const id = await window.lj?.getClickId(); if (id) return id; } catch {} const fallbacks = [ () => localStorage.getItem("clickId"), () => decodeURIComponent(document.cookie.match(/(?:^|; )clickId=([^;]*)/)?.[1] ?? ""), () => sessionStorage.getItem("clickId"), () => new URLSearchParams(window.location.search).get("lj_click_id"), ]; for (const read of fallbacks) { try { const id = read(); if (id) return id; } catch {} } return null;}
Rufe den Helper beim Absenden auf und schicke das Ergebnis an dein Backend. Behalte zusätzlich das
Hidden Field lj_click_id im Formular – schlägt dein JavaScript fehl, trägt das Feld die ID
trotzdem.
Speichere die Click-ID in dem Moment am Datensatz, in dem die Buchung entsteht – zum Beispiel in
einer Spalte lj_click_id an der Buchung und am Kontakt. Spätere Meilensteine (der Termin hat
stattgefunden, der Deal ist gewonnen) passieren in deinem System, oft Tage später und ohne
Browser. Sie lesen die gespeicherte ID zurück, statt sie erneut zu suchen.
Halte nie ein Event zurück, nur weil die Click-ID fehlt
Konnte keine Click-ID gefunden werden, sende das Event trotzdem. LeadJourney matcht auch über
E-Mail und Telefon – die Buchung wird also trotzdem erfasst und kann zugeordnet werden.
Weil der Speicher zu einem Host gehört, muss die Click-ID in der URL reisen, sobald dein
Buchungssystem woanders läuft als die Seite, auf der der Besucher gelandet ist.
Das Buchungsformular liegt auf demselben Host wie der Rest deiner Seite (z. B.
deinebrand.de/buchung). Nichts weiter zu tun – Helper, Hidden Field und Cookie
funktionieren alle.
Das Buchungssystem läuft auf einer Subdomain (z. B. buchung.deinebrand.de). Schalte unter
Settings → TrackingLink decoration
ein: Das Script hängt dann lj_click_id an jeden Link, der auf deine Root-Domain oder eine ihrer
Subdomains zeigt.
Script auch auf der Subdomain installiert: Es übernimmt die ID aus der URL und speichert
sie dort – nutze den Helper wie gewohnt.
Kein Script auf der Subdomain: Lies die ID mit dem Snippet unter Aus der
URL aus.
Das Buchungssystem läuft auf einer anderen Domain (z. B. deinebuchung.de). Link decoration
lässt Links auf fremde Domains unverändert, also hängst du die Click-ID selbst an:
getClickId().then((clickId) => { if (!clickId) return; document.querySelectorAll('a[href^="https://deinebuchung.de"]').forEach((link) => { const url = new URL(link.href); url.searchParams.set("lj_click_id", clickId); link.href = url.toString(); });});
Auf der Buchungs-Domain liest du lj_click_id aus der URL (siehe Aus der URL)
– oder du installierst dort das Tracking-Script mit einer eigenen Tracking-Domain, dann übernimmt
es das für dich.
Das Buchungssystem ist als iframe eingebettet. Die eingebettete Seite hat ihren eigenen
Speicher, getrennt von deiner Website – übergib die Click-ID deshalb im src des iframes:
In der Buchungsseite liest du lj_click_id aus ihrer eigenen URL aus und schickst sie mit der
Buchung mit.
Du nutzt Calendly, Cal.com, HubSpot oder Typeform?
Bei unterstützten Tools reicht das Script die Click-ID bereits in deren Embeds weiter. Diese
Seite ist für dein eigenes Buchungssystem oder Formular – für die anderen siehe
Apps.
Der Request ist fehlgeschlagen (Netzwerk- oder Serverfehler).
Den Status bei jeder Einsendung mitschreiben
Füge deinem Formular <input type="hidden" name="lj_tracking_status" /> hinzu – das Script
befüllt es mit dem Status, und du siehst bei jeder Buchung, ob das Tracking funktioniert hat.