Die Frage ist älter als die meisten Werkzeuge, die dafür vorgeschlagen werden. Ein Feature-Request mit dem Titel “Page Rule statistics” wurde am 23. Mai 2017 in der Cloudflare Community eröffnet, von seinem Autor 2018 und 2019 erneut angestoßen und am 6. Juni 2025 geschlossen, ohne je umgesetzt worden zu sein. Dazwischen fragte jemand mit Kurzlinks für Printmaterial, ob es eine Möglichkeit gebe, zu erfahren, wie viele Aufrufe eine Weiterleitungsregel in einem bestimmten Zeitraum bekam — und erhielt überhaupt keine inhaltliche Antwort, bevor der Thread automatisch geschlossen wurde.
Der Rat, den es gibt, lautet, eine Seite vor die Weiterleitung zu setzen, damit JavaScript irgendwo laufen kann. Das ist kein Workaround. Das ist, die Weiterleitung abzuschalten.
Hier steht, warum nichts von dem, was Sie schon haben, den Klick sehen kann, und was ihn tatsächlich zählt.
Warum jedes Analytics-Werkzeug, das Sie besitzen, hier blind ist
Keine Lücke eines bestimmten Produkts. Eine strukturelle Tatsache darüber, was eine Weiterleitung ist.
Jedes verbreitete datenschutzfreundliche Analytics-Werkzeug — Cloudflare Web Analytics, Plausible, Umami, Counterscale — arbeitet gleich: ein kleines Skript auf der Seite meldet, dass die Seite aufgerufen wurde. Cloudflares eigene Installationsanweisung ist die klarste Formulierung des Problems:
Add the JS snippet to any of your website’s HTML pages before the ending body tag.
Eine 301-Antwort hat keine HTML-Seite. Sie hat kein Body-Tag. Es gibt nirgends einen Platz für den Beacon und nichts, was ihn ausführt — also wird die Besucherin am Ziel gezählt, sofern das Ziel Ihnen gehört, und gar nicht, wenn nicht.
Ein Cloudflare-Mitarbeiter sagte 2023 genau das, auf die Frage nach Web Analytics für eine Domain, die nur weiterleitet: Web Analytics erfasst die Metrik clientseitig, und wenn die Quelle statt einer Seite eine Weiterleitung zu einem Dritten zurückgibt, lässt sich das nicht verfolgen.
Plausible hat dieselbe Lücke, gemeldet im April 2022, beantwortet mit einem Roadmap-Versprechen und weiterhin offen.
Die Phasenreihenfolge, und damit die eigentliche Erklärung
Cloudflare veröffentlicht die Reihenfolge, in der seine Anfragephasen laufen, und wer sie liest, hat die Antwort vollständig.
Single Redirects laufen in http_request_dynamic_redirect, der ersten Phase auf
Anwendungsebene. Bulk Redirects laufen in http_request_redirect, der fünfzehnten. Snippets
laufen in http_request_snippets, der neunzehnten. Und die Rules-Dokumentation ist eindeutig,
was bei einem Treffer passiert:
For terminating actions (Block, Redirect, or one of the challenge actions), rule evaluation will stop and the action will be executed immediately.
Eine Weiterleitung, die greift, erzeugt die Antwort also genau dort. Alles Spätere in der Kette läuft nie — und dazu gehört die eine Stelle, an der Sie eine Logzeile hätten schreiben können. Selbst für Snippets zu bezahlen hilft nicht: sie sitzen vier Phasen hinter Bulk Redirects und sehen eine Anfrage nie, die längst weg ist.
Das ist der ganze Grund, warum das Problem keine Antwort in den Einstellungen hat. Was den Klick zählt, muss dasselbe sein, das die Weiterleitung ausliefert.
Was die eingebaute Antwort kostet
Cloudflare hat ein Produkt, das Ihnen rohe Anfrage-Logs gibt, und seine Verfügbarkeitstabelle ist kurz:
| Tarif | Logpush |
|---|---|
| Free | Nein |
| Pro | Nein |
| Business | Nein |
| Enterprise | Ja |
Das ist der ehrliche Grund, warum es diesen Artikel gibt. In jedem Tarif unterhalb von Enterprise ist das Log, das Sie wollen, etwas, das Sie selbst schreiben müssen.
Nicht KV, und das lohnt sich genau zu sagen
Der Vorschlag, den Sie in älteren Threads finden, lautet, jeden Klick in Workers KV zu schreiben, ein Schlüssel pro Klick oder ein Zählerschlüssel, und ihn per List wieder auszulesen. Beide Formen sind falsch, aus verschiedenen dokumentierten Gründen.
Der Free-Tarif erlaubt 1.000 Schreibvorgänge pro Tag. Eine Weiterleitung mit echtem Traffic verbraucht das vor dem Mittagessen und hört danach still auf aufzuzeichnen.
Grundsätzlicher: KV begrenzt Sie auf einen Schreibvorgang pro Sekunde auf denselben Schlüssel, in jedem Tarif. Ein einzelner Zählerschlüssel ist exakt das Zugriffsmuster, das KV ablehnen soll. Mehr zu zahlen ändert diese Zahl nicht.
Was funktioniert: ein Worker und Analytics Engine
Workers Analytics Engine ist genau für diese Datenform gebaut, und es ist im Free-Tarif enthalten:
| Free | |
|---|---|
| Geschriebene Datenpunkte | 100.000 pro Tag |
| Leseabfragen | 10.000 pro Tag |
| Aufbewahrung | drei Monate |
Verglichen mit KVs tausend Schreibvorgängen ist das hundertmal so viel Platz, und der Schreibpfad ist für ein Ereignis pro Anfrage ausgelegt statt für einen veränderlichen Zähler.
Ein Dataset binden:
# wrangler.toml
[[analytics_engine_datasets]]
binding = "CLICKS"
dataset = "redirect_clicks"
Dann den Worker die Weiterleitung ausliefern und sie im Vorbeigehen aufzeichnen lassen:
export default {
fetch(request, env) {
const url = new URL(request.url);
const target = "https://example.com/offer";
env.CLICKS.writeDataPoint({
indexes: [url.hostname],
blobs: [
url.pathname,
url.searchParams.get("gclid") ?? "",
request.headers.get("referer") ?? "",
request.cf?.country ?? "",
],
doubles: [1],
});
return Response.redirect(target, 301);
},
};
Vier Details in diesen zwanzig Zeilen zählen.
Den Schreibvorgang nicht awaiten. Cloudflares Hinweis ist ausdrücklich, dass
writeDataPoint nicht blockiert und sofort zurückkehrt, während die Runtime die Daten im
Hintergrund persistiert. Ihn zu awaiten würde einem Hop Latenz hinzufügen, dessen ganze Aufgabe
Schnelligkeit ist.
Der Index ist der Sampling-Schlüssel, und die Grenzen sind ein Index pro Aufruf, höchstens 96 Bytes. Legen Sie dort etwas mit geringer Kardinalität ab — den Hostnamen, die Kampagne — nicht die vollständige URL. In die Blobs gehört das Detail mit hoher Kardinalität: bis zu zwanzig davon, 16 KB insgesamt, mit 250 Datenpunkten pro Aufruf.
Lesen Sie die Klick-ID hier, am einzigen Hop, der sie garantiert sieht. Es ist derselbe Parameter, den ein falsch konfigurierter Bulk Redirect still löscht; wenn Ihr eigener Worker die Weiterleitung ist, entscheiden Sie, was überlebt, statt zwischen zwei Hälften eines Query-Strings zu wählen.
Response.redirect(target, 301) ist eine echte 301. Keine Zwischenseite, kein
Meta-Refresh, kein JavaScript. Suchmaschinen sehen eine dauerhafte Weiterleitung, und die
Besucherin sieht einen Hop.
Wieder auslesen
Analytics Engine hat eine SQL-API. Ein curl, ein Token mit Account Analytics Read:
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/analytics_engine/sql" \
--header "Authorization: Bearer $CF_API_TOKEN" \
--data "SELECT blob1 AS path,
SUM(_sample_interval) AS clicks
FROM redirect_clicks
WHERE timestamp >= NOW() - INTERVAL '7' DAY
GROUP BY path
ORDER BY clicks DESC"
SUM(_sample_interval) statt COUNT() ist keine Stilfrage. Bei Volumen werden die Daten
heruntergesampelt, und jede gespeicherte Zeile steht dann für mehrere echte:
_sample_intervalindicates what the sample rate is for this row (that is, how many rows of the original data are represented by this row)
Zählen Sie die Zeilen, melden Sie zu wenig, mit einem Faktor, der sich mit dem Traffic ändert. Summieren Sie das Intervall, stimmt die Zahl bei jedem Volumen.
Was Sie damit bekommen, und was nicht
Sie bekommen eine Zählung von Anfragen, mit den Dimensionen, die Sie geschrieben haben, auf einem Hop, der passiert, bevor der Browser irgendwohin geht. Nichts zum Einwilligen, nichts zum Blockieren, kein Cookie — denn der Klick ist eine Anfrage an Ihren eigenen Hostnamen und nicht ein Skript von jemand anderem.
Es ist keine Attribution. Jede Anfrage wird gezählt, auch Bots und Vorschau-Abrufe, und nichts davon verbindet einen Klick mit einer Conversion auf einer Seite, die Ihnen nicht gehört. Das ist ein schwierigeres Problem und ein anderer Artikel.
Und es ändert, was Ihre Weiterleitung ist. Eine Redirect Rule ist Konfiguration: kein Deployment, kein Code, niemand, der sie pflegen muss. Ein Worker ist Software, mit Rollback und jemandem, der ihn später verstehen muss. Für einen Link lohnt sich dieser Tausch meistens. Für die vollständige Liste der Weiterleitungsarten und ihrer Kosten lohnt sich der Vergleich, bevor Sie eine funktionierende Regel in Code überführen.
Wo das aufhört, zwanzig Zeilen zu sein
Eine Weiterleitung, ein Worker, ein Dataset: ein Nachmittag, und die Zahlen gehören Ihnen.
Die Form ändert sich, wenn die Weiterleitungen ein Portfolio sind. Jeder Link, der gezählt werden soll, braucht den Worker davor, jede Domain braucht die Route, und das Dataset braucht jemanden, der es planmäßig abfragt statt dann, wenn sich jemand wundert. An dem Punkt pflegen Sie ein kleines Analytics-Produkt als Nebenwirkung der Frage, wie viele Leute geklickt haben. Das ist die Arbeit, die 301.st standardmäßig erledigt. Für einen einzelnen Link ist der Worker oben die ganze Antwort, und er ist kostenlos.