Sie kaufen den Traffic, der Verkauf passiert auf einer Domain, die Sie nicht anfassen können. Ein Affiliate-Angebot, eine Produktseite auf einem Marktplatz, der Checkout eines Partners, jedes Programm, bei dem die „Danke“-Seite der Plattform gehört. Ein Pixel können Sie dort nicht platzieren, und die Werbeplattform optimiert blind: das Netzwerk-Dashboard zeigt Dutzende Conversions, das Werbekonto registriert eine Handvoll, und der Algorithmus steuert auf Klicks zu, denn Klicks sind alles, was er sehen kann.
Die Frage taucht in PPC- und Affiliate-Communities Jahr für Jahr auf, gestellt zu Meta-Traffic auf Marktplätze, zu ClickBank-Angeboten, zu White-Label-Programmen, und die öffentlichen Antworten haben sich in einem Jahrzehnt nicht bewegt. Sie kommen in zwei Sorten: „auf deren Seite können Sie nichts implementieren“, was stimmt, und „kaufen Sie einen Tracker“, was bei dreistelligen Monatsbeträgen anfängt. Mindestens ein Fragender gab auf und setzte öffentlich ein Kopfgeld von €100 auf jede funktionierende Idee. Niemand hat kassiert.
Der Ausweg, bei dem stattdessen alle landen: Klicks auf den ausgehenden Link als Ersatz-Conversions zählen. Das verrottet, denn ein Klick ist kein Verkauf, und Bots klicken mit — die €100 waren tatsächlich dafür ausgelobt, Bots aus genau dieser Ersatzmetrik herauszufiltern. Geld auf das Symptom, weil die Kur nirgends aufgeschrieben war.
Die Antwort „auf deren Seite nichts“ ist korrekt, und sie ist trotzdem nicht das Ende. Alles, was Sie brauchen, kann auf Ihrer Seite leben, an dem einen Ort, den jeder Klick noch passiert: einem Redirect-Hop, der Ihnen gehört. Dieses Muster baut dieser Artikel — mit den Kosten, den Bruchstellen und dem, was die Werbeplattformen erlauben, geprüft gegen ihre Live-Dokumentation am 27. Juli 2026.
Die Schleife: click_id raus, Postback rein
Die Mechanik ist in Affiliate-Netzwerken seit einem Jahrzehnt Standard. Was in all diesen Threads fehlt, ist jemand, der die Schleife von Anfang bis Ende hinlegt.
- Der Klick verlässt Ihre Seite über einen Redirect, den Sie hosten:
/go. Der Hop erzeugt eineclick_id, speichert sie neben allem, was Sie über den Klick wissen — diegclidaus der Anzeige, die Quelle, den Zeitstempel — und schickt eine302auf den Netzwerk-Link, mit derclick_idim Subid-Parameter des Netzwerks. - Das Netzwerk trägt Ihre Subid bis zum Verkauf durch. Wenn die Conversion auf deren Seite passiert, feuert deren System einen Postback: eine Server-zu-Server-Anfrage an eine URL, die Sie registriert haben, mit der Subid zurück, meist mit einem Auszahlungsbetrag.
- Ihr Postback-Endpunkt schlägt die
click_idnach, und die Conversion ist mit genau dem Klick, der Kampagne und dem Creative verbunden, die sie erzeugt haben — auf Ihrer Infrastruktur, aus Server-Logs, ohne Pixel irgendwo.
Beachten Sie, wovon das alles nicht abhängt. Kein JavaScript auf der Conversion-Seite, denn dort haben Sie keines. Keine Cookies, die irgendetwas überleben müssen, denn der Verbindungsschlüssel reist in URLs und Server-Aufrufen. Kein Consent-Banner im Pfad, denn im Browser des Besuchers läuft nichts außer dem Redirect selbst. Der Hop ist per Konstruktion serverseitig, und genau deshalb sehen Adblocker ihn nie: der Klick ist eine Anfrage an Ihren eigenen Host, bevor der Browser irgendwohin geht.
Warum der Hop nicht die finale URL Ihrer Anzeige sein darf
Die verlockende Abkürzung: die Anzeige direkt auf /go zeigen lassen und die Landingpage
sparen. Bei Google Ads ist diese Abkürzung doppelt verschlossen, und genau zu wissen wie,
erspart Ihnen einen Policy-Verstoß.
Erstens tragen Tracking-Templates den Nutzer nicht mehr. Parallel Tracking ist für Search, Shopping, Display, Video und Performance Max verpflichtend, und Googles Beschreibung ist eindeutig:
Parallel tracking sends customers directly from your ad to your final URL while click measurement happens in the background (without sending them to the tracking URLs first).
Die Template-URL wird weiter angefragt — als Hintergrund-Ping aus dem Browser —, ein Hop im Tracking-Template kann den Klick also zählen. Aber er kann den Besucher nicht routen, seine Landung nicht umschreiben und dem Netzwerk keine Subid auf dem Besuch mitgeben, der tatsächlich konvertiert.
Zweitens ist der Hop als finale URL ein gelisteter Policy-Verstoß. Googles Destination-Anforderungen nennen es wörtlich: „Redirects from the final URL that take the user to a different domain“ ist ein Destination Mismatch. Das ist die Regel, wegen der Affiliate-Konten fürs Direct Linking gesperrt werden.
Die policy-konforme Form bei Google Ads ist also eine Brücke: die finale URL ist eine
echte Seite auf Ihrer Domain, und der Hop ist der ausgehende Link auf dieser Seite.
Sorgen Sie dafür, dass die Seite ihre eigene Query an den Hop-Link durchreicht — die
gclid kommt dank Auto-Tagging auf der Landingpage-URL an, und
ein Redirect, der sie verschluckt, beendet die
Zuordnung, bevor sie beginnt. Meta kennt kein Parallel Tracking, aber dieselbe
Brückenform ist die, bei der Community-Antworten auch für Meta-Traffic zusammenlaufen:
eine eigene Seite, das eigene Pixel darauf, Subids ausgehend.
Die Schleife zurück in die Werbeplattform zu schließen ist der Schritt, den alle
auslassen. Bei Google Ads hat er einen offiziellen Namen: Offline-Conversion-Import. Die
gclid haben Sie beim Hop neben der click_id gespeichert; wenn der Postback landet,
laden Sie die Conversion mit diesem Schlüssel hoch. Google hält eine gclid dafür 90
Tage vor, Auto-Tagging ist die einzige Voraussetzung, und das Feature ist aktuell, nicht
Legacy. Die Kampagne hört auf, auf Klicks zu optimieren, und beginnt, auf die Verkäufe zu
optimieren, die Ihre Postbacks bestätigen.
Den Hop auf Cloudflares Free-Plan bauen
Eine Redirect-Regel kann diesen Job nicht machen, und es lohnt sich, präzise zu sagen
warum. Single Redirects sind eine terminierende Aktion in der ersten Request-Phase —
nichts dahinter sieht den Klick je, und die
Regel selbst kann nirgendwohin schreiben. Die Ausdruckssprache kann nicht einmal eine ID
prägen: uuidv4() existiert, aber die Dokumentation beschränkt es auf
Rewrite-Ausdrücke von Transform Rules. Unter
jeder Art, auf Cloudflare weiterzuleiten,
ist das einzige Primitiv, das prägen, speichern und Postbacks beantworten kann, ein
Worker.
Der ganze Hop ist ein Worker mit zwei Routen und einer D1-Tabelle:
export default {
async fetch(req, env) {
const url = new URL(req.url);
if (url.pathname === '/go') {
const id = crypto.randomUUID();
await env.DB.prepare(
'INSERT INTO clicks (id, gclid, src, ts) VALUES (?1, ?2, ?3, ?4)',
)
.bind(id, url.searchParams.get('gclid') ?? '', url.searchParams.get('src') ?? '', Date.now())
.run();
const target = new URL(env.OFFER_URL);
target.searchParams.set('subid', id);
return Response.redirect(target.href, 302);
}
if (url.pathname === '/postback') {
if (url.searchParams.get('key') !== env.POSTBACK_KEY) {
return new Response(null, { status: 403 });
}
await env.DB.prepare(
'UPDATE clicks SET payout = ?2, converted = ?3 WHERE id = ?1',
)
.bind(url.searchParams.get('subid'), url.searchParams.get('payout') ?? '', Date.now())
.run();
return new Response('ok');
}
return new Response(null, { status: 404 });
},
};
Die Free-Plan-Quoten passen dafür bequem, alle live geprüft am 27. Juli 2026: Workers
erlaubt 100.000 Anfragen am Tag, D1 schreibt 100.000 Zeilen am Tag und liest fünf
Millionen — ein Klick und ein Postback sind je eine Zeile. Die eine Speicherentscheidung,
die stimmen muss: das hier ist eine Nachschlage-Last, keine Zähl-Last, weshalb die
Tabelle D1 ist und nicht Workers KV — KV-Schreibvorgänge sind auf Free bei 1.000 am Tag
gedeckelt, ein Limit, das schon Leute in die Irre geführt hat.
Die Postback-URL beim Netzwerk zu registrieren ist ein Formularfeld auf deren Seite: Ihre
/postback-Adresse mit dem key und deren Subid-Makro darin.
Wo es bricht
Der Hop ist die verlässliche Hälfte der Schleife. Die andere Hälfte gehört dem Netzwerk, und wenn die Verbindung scheitert, scheitert sie auf eine von fünf wiederkehrenden Arten — diese Liste ist aus einem Jahrzehnt Affiliate-Forumsthreads destilliert, die fragen, warum der Postback nie kam:
| Fehler | Wie es aussieht | Prüfung |
|---|---|---|
| Token-Name passt nicht | Netzwerk erwartet {clickid}, Sie schickten {click_id} |
Deren Makro-Liste, Zeichen für Zeichen |
| Reservierte Subids | sub1 nutzt das Netzwerk selbst |
Fragen, welcher Slot durchgereicht wird |
| Angebot streift Subids ab | Klicks kommen an, Subid-Spalte bleibt leer | Testlink, dann deren Reporting prüfen |
| Postback zu spät registriert | Conversions davor sind unwiederbringlich weg | Registrieren vor dem ersten bezahlten Klick |
| Nie von Hand getestet | Alles „konfiguriert“, nichts verifiziert | Postback-URL im Browser mit Fake-Subid aufrufen |
Die letzte Zeile erwischt die, die alles andere richtig gemacht haben. Eine Postback-URL, die Sie nie manuell gefeuert haben, ist eine Vermutung, kein Setup: rufen Sie sie einmal selbst auf und sehen Sie der Zeile beim Aktualisieren zu, bevor Geld fließt.
Zwei strukturelle Grenzen gehören auch benannt. Wenn das Programm weder Postback noch
Subid-Reporting anbietet, kann kein Hop die Schleife herbeizaubern — die Verbindung
braucht deren Hälfte, und Ihr Ausweg ist, deren Dashboard gegen Ihr Klick-Log nach Zeit
und Creative abzugleichen, genau das manuelle Zuordnen, bei dem diese Community-Threads
am Ende landen. Und das Offline-Conversion-Fenster ist real: ein Verkauf, der später als 90 Tage
nach dem Klick bestätigt wird, lässt sich nicht mehr gegen seine gclid importieren, was
bei Produkten mit langen Freigabezyklen zählt.
Wann der Worker reicht, und wann nicht mehr
Für ein Angebot und eine Traffic-Quelle schließt der Worker oben die €100-Frage
tatsächlich: jeder Klick mit seiner gclid geloggt, jede Conversion serverseitig
verbunden, die Werbeplattform mit echten Verkäufen gefüttert statt mit Proxy-Klicks.
Betreiben Sie ihn und zahlen Sie nicht für Zuordnung, die sich an einem Nachmittag bauen
lässt.
Das Muster hört auf, ein Nachmittag zu sein, wenn es sich vervielfacht. Zehn Angebote
heißen zehn Ziel-URLs und zehn Postback-Registrierungen; drei Traffic-Quellen heißen, der
Hop muss nach Quelle verzweigen; ein totes Angebot heißt, die Links von gestern umleiten,
ohne die Subids von gestern zu brechen. An dem Punkt ist der Hop kein Skript mehr,
sondern eine Routing-Schicht mit einer Datenbank dahinter — also das, was
301.st bereits ist: Streams, die jeden Klick nach Regeln routen,
click_id auf jedem Hop geprägt und geloggt, Postbacks empfangen und zugeordnet als
Standardpfad, nicht als Ihr Wochenendprojekt. Für eine einzelne Kampagne: behalten Sie
den Worker. Es ist ehrliche Arbeit, und sie gehört Ihnen.