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.

Treffer

kein Treffer

Treffer

kein Treffer

Anfrage

Single Redirects
Phase 1

301 gesendet
Auswertung endet

Bulk Redirects
Phase 15

Snippets
Phase 19

Warum nichts weiter unten den Klick je zu sehen bekommt

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_interval indicates 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.