Cloudflare-Worker
Ein Cloudflare Worker führt bei jeder Anfrage ein Skript aus, das Daten an Ahrefs sendet. Diese Methode funktioniert mit jedem Cloudflare-Tarif, auch mit dem Free-Tarif. Requests von Browsern werden ebenfalls gesendet; Ahrefs verwirft alles, was kein Bot ist.
Für jede Anfrage sendet der Worker die URL, den Statuscode, den Inhaltstyp und bei Weiterleitungen den Location-Response-Header, damit Bot Analytics anzeigen kann, wohin eine Weiterleitung den Bot geschickt hat. Ein Worker, der bereitgestellt wurde, bevor Location hinzugefügt wurde, sendet weiterhin die alten Daten, bis du dich wieder verbindest oder ihn erneut bereitstellst.
Voraussetzungen
- Ein Cloudflare-Konto, in dem die Domain deiner Website als Zone hinzugefügt ist.
- Ein Cloudflare-API-Token mit den folgenden Berechtigungen:
- Konto → Workers-Skripte → Bearbeiten
- Zone → Workers-Routen → Bearbeiten
- Zone → Zone → Lesen
- Zone → DNS → Lesen (optional; ermöglicht Ahrefs zu prüfen, ob deine DNS-Einträge per Proxy laufen)
info
Der Worker wird nur bei Anfragen ausgeführt, die über Cloudflare laufen. DNS-Einträge mit der Einstellung Nur DNS (graue Wolke) leiten Besucher direkt an deinen Origin weiter, sodass Bot Analytics dafür keine Daten erhält. Stelle sicher, dass die Einträge für deine Domain auf Proxy aktiviert (orangefarbene Wolke) gesetzt sind; siehe Proxy-Status.
Anfragekontingent für Workers
warning
Der Worker wird bei jeder Anfrage an deine Website ausgeführt, daher zählt jede Anfrage zu deinem Anfragekontingent für Cloudflare Workers. Der Free-Tarif erlaubt 100.000 Anfragen pro Tag, die von allen Workers im Account gemeinsam genutzt werden. Eine Website mit hohem Traffic kann das Kontingent schnell aufbrauchen.
Ahrefs erstellt die Route, wobei request_limit_fail_open auf true gesetzt ist. Wenn das Kontingent ausgeschöpft ist, überspringt Cloudflare den Worker und stellt deine Website wie gewohnt bereit. Bot Analytics erhält keine Daten, bis das Kontingent zurückgesetzt wird. Siehe Workers-Limits für das Kontingent in den einzelnen Tarifen.
Wenn deine Website mehr Traffic erhält, als das Kontingent zulässt, führe ein Upgrade auf Workers Paid durch oder nutze Cloudflare Logpush in einem Enterprise-Tarif.
Cloudflare-API-Token abrufen
Stellen Sie sicher, dass Sie mit dem richtigen Konto im Cloudflare-Dashboard angemeldet sind. Navigieren Sie dann zur Seite https://dash.cloudflare.com/profile/api-tokens, suchen Sie oben rechts die Schaltfläche Token erstellen und klicken Sie darauf:
Fahre nun mit dem Ablauf Benutzerdefiniertes Token erstellen fort:
Fülle die folgenden Informationen aus:
- Name des API-Tokens: ahrefs-bot-analytics
- Erteile die folgenden Berechtigungen:
- Account / Workers Script / Edit, damit wir das Worker-Skript hochladen können, um Bot-Besuche zu erfassen
- Zone / Workers Routes / Edit, damit wir das Worker-Skript zuweisen können, damit es bei Anfragen ausgeführt wird
- Zone / Zone / Read, damit wir die zu konfigurierende Zone finden können
- Zone / DNS / Lesen (optional), damit wir überprüfen können, ob deine DNS-Einträge über Cloudflare geproxyt werden
- Account Resources können auf Include / All Accounts gesetzt werden; alternativ kannst du den Umfang auf den Account einschränken, der die Website hostet.
- Zone Resources können auf Include / All Zones gesetzt werden; alternativ wähle die Zone aus, die der Domain deiner Website entspricht.
Das ausgefüllte Formular sollte so aussehen:
Klicke nun auf die Schaltfläche Continue to summary; die Zusammenfassung sollte so aussehen:
Klicke nun auf die Schaltfläche Create Token und kopiere das generierte Token in die Zwischenablage, um es in den nächsten Schritten zu verwenden.
Weitere Informationen findest du in der Cloudflare-Dokumentation unter So erstellst du einen API-Token.
Automatische Einrichtung
- Gehe in Ahrefs zu Projekteinstellungen → Bot Analytics.
- Wähle Cloudflare Worker als Methode aus.
- Füge deinen Cloudflare-API-Token ein und klicke auf Verbinden.
Ahrefs verwendet deinen Token, um:
- Die Zone zu finden, die zur Domain deines Projekts passt.
- Überprüfen, ob deine DNS-Einträge über Cloudflare geproxyt werden, und dich warnen, falls dies nicht der Fall ist (benötigt die optionale Berechtigung Zone → DNS → Lesen).
- Den Ahrefs-Analytics-Worker bereitstellen.
- Richte eine Route ein, die bei allen Anfragen ausgeführt wird.
info
Dein Token wird einmalig verwendet und nicht gespeichert.
Manuelle Einrichtung
Wenn du lieber kein API-Token bereitstellen möchtest, kannst du den Worker manuell über die Cloudflare-API bereitstellen.
Schritt 1 — Account-ID, Zone-ID und API-Token abrufen
-
Gehe zu deinem Cloudflare-Dashboard und wähle die Domain deiner Website aus.
-
Finde deine
$ACCOUNT_IDund$ZONE_IDim Dashboard. -
Klicke auf „API-Token abrufen“ und erstelle einen neuen Token mit den folgenden Berechtigungen:
- Konto → Workers-Skripte → Bearbeiten
- Zone → Workers-Routen → Bearbeiten
- Zone → Zone → Lesen
Detaillierte Anweisungen findest du unter Obtaining API token.
Schritt 2 — Den Worker bereitstellen
Du findest die genauen Befehle, bereits mit den Details deines Projekts vorausgefüllt, unter Projekteinstellungen → Bot Analytics → Manuell einrichten.
Upload the Worker script
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/workers/scripts/ahrefs--bot-analytics--YOUR_SCRIPT_ID" \
-X PUT \
-H "Authorization: Bearer $CF_TOKEN" \
-H "Content-Type: application/javascript" \
--data-binary '
const WA_ENDPOINT = "https://analytics.ahrefs.com/api/cf_worker";
const WA_SCRIPT = "https://analytics.ahrefs.com/analytics.js";
const WA_CF_DATA_KEY = "YOUR_DATA_KEY";
const WA_DATA_KEY = "";
async function handleBotAnalytics(event, response) {
let request = event.request;
event.waitUntil(sendAnalytics(request, response));
return response;
}
async function sendAnalytics(request, response) {
try {
let referer = request.headers.get("referer") || "";
let userAgent = request.headers.get("user-agent") || "";
let ip = request.headers.get("cf-connecting-ip") || "";
let contentType = response.headers.get("content-type") || "";
let payload = {
n: "serverpageview",
u: request.url,
ip: ip,
ua: userAgent,
ct: contentType,
m: request.method,
s: response.status,
k: WA_CF_DATA_KEY,
r: referer,
}
let hs = {};
for (let name of ["signature", "signature-input", "signature-agent"]) {
let value = request.headers.get(name);
if (value) hs[name] = value;
}
if (Object.keys(hs).length > 0) payload.hs = hs;
let rhs = {};
for (let name of ["location"]) {
let value = response.headers.get(name);
if (value) rhs[name] = value;
}
if (Object.keys(rhs).length > 0) payload.rhs = rhs;
let analyticsResponse = await fetch(WA_ENDPOINT, {
method: "POST",
body: JSON.stringify(payload)
})
if (!analyticsResponse.ok) {
console.error("ahrefs bot analytics error:", analyticsResponse.status, analyticsResponse.statusText)
}
} catch (error) {
console.error("ahrefs bot analytics error:", error.message)
}
}
addEventListener("fetch", event => {
event.respondWith((async () => {
let response = await fetch(event.request);
response = await handleBotAnalytics(event, response);
return response;
})());
});
'
Create the route
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/workers/routes" \
-X POST \
-H "Authorization: Bearer $CF_TOKEN" \
-H "Content-Type: application/json" \
--data-binary '{"pattern":"*youwebsite.com/*","script":"ahrefs--bot-analytics--YOUR_SCRIPT_ID","request_limit_fail_open":true}'
Ersetze yourwebsite.com durch deine Domain.
warning
Der WA_CF_DATA_KEY und das Routenmuster sind für dein Projekt eindeutig. Kopiere die genauen Befehle von deiner Seite Projekteinstellungen → Bot Analytics, um sicherzustellen, dass die Werte korrekt sind.
Schritt 3 — Verbindung überprüfen
Nachdem du den Worker bereitgestellt und die Route erstellt hast, gehe in Ahrefs zurück zu Projekteinstellungen → Bot Analytics und klicke auf Status prüfen, um zu überprüfen, dass Daten empfangen werden. Wenn keine Daten eingehen, überprüfe, ob deine DNS-Einträge geproxyt werden.