Cloudflare Worker
Cloudflare Worker uruchamia przy każdym żądaniu skrypt, który wysyła dane do Ahrefs. Ta metoda działa w każdym planie Cloudflare, w tym Free. Żądania z przeglądarek też są wysyłane; Ahrefs odrzuca wszystko, co nie jest botem.
W przypadku każdego żądania worker wysyła URL, kod statusu, typ zawartości oraz — w przypadku przekierowań — nagłówek odpowiedzi Location, dzięki czemu Bot Analytics może pokazać, dokąd przekierowanie wysłało bota. Worker wdrożony przed dodaniem Location nadal wysyła stare dane, dopóki nie połączysz się ponownie lub nie wdrożysz go ponownie.
Wymagania wstępne
- Konto Cloudflare z domeną Twojej witryny dodaną jako strefa.
- Token API Cloudflare z następującymi uprawnieniami:
- Konto → Skrypty Worker → Edytuj
- Strefa → Trasy skryptów Worker → Edytuj
- Strefa → Strefa → Odczyt
- Strefa → DNS → Odczyt (opcjonalnie, umożliwia Ahrefsowi sprawdzenie, czy twoje rekordy DNS są obsługiwane przez proxy)
info
Worker działa tylko w przypadku żądań przechodzących przez Cloudflare. Rekordy DNS ustawione na Tylko DNS (szara chmurka) kierują odwiedzających bezpośrednio do twojego serwera źródłowego, więc Bot Analytics nie otrzymuje dla nich żadnych danych. Upewnij się, że rekordy twojej domeny są ustawione jako Obsługiwane przez proxy (pomarańczowa chmurka); zobacz status proxy.
Limit żądań Cloudflare Workers
warning
Worker uruchamia się przy każdym żądaniu do twojej witryny, więc każde żądanie wlicza się do limitu żądań Cloudflare Workers. Plan Free pozwala na 100 000 żądań dziennie, współdzielonych przez wszystkie workery na koncie. Witryna o dużym ruchu może szybko wyczerpać ten limit.
Ahrefs tworzy trasę z parametrem request_limit_fail_open ustawionym na true. Gdy limit zostanie wyczerpany, Cloudflare pomija workera i wyświetla Twoją witrynę jak zwykle. Bot Analytics nie otrzymuje żadnych danych do momentu zresetowania limitu. Zobacz limity Workers, aby sprawdzić limit dla każdego planu.
Jeśli Twoja witryna generuje więcej ruchu, niż pozwala limit, dokonaj aktualizacji do Workers Paid lub użyj Cloudflare Logpush w planie Enterprise.
Uzyskiwanie tokenu API Cloudflare
Upewnij się, że jesteś zalogowany(-a) do panelu Cloudflare Dashboard na właściwym koncie. Następnie przejdź na stronę https://dash.cloudflare.com/profile/api-tokens, znajdź i kliknij przycisk Utwórz token w prawym górnym rogu:
Teraz przejdź do procesu Create Custom Token:
Wypełnij poniższe informacje:
- Nazwa tokena API: ahrefs-bot-analytics
- Przyznaj następujące uprawnienia:
- Account / Workers Script / Edit — abyśmy mogli przesłać skrypt workera do śledzenia wizyt botów
- Zone / Workers Routes / Edit — abyśmy mogli przypisać skrypt workera do uruchamiania dla żądań
- Zone / Zone / Read — abyśmy mogli odnaleźć strefę do skonfigurowania
- Strefa / DNS / Odczyt (opcjonalnie), abyśmy mogli zweryfikować, czy dla Twoich rekordów DNS włączono proxy Cloudflare
- W polu Account Resources możesz ustawić Include / All Accounts; ewentualnie zawęź zakres do konta, na którym hostowana jest witryna.
- W polu Zone Resources możesz ustawić Include / All Zones; ewentualnie wybierz strefę odpowiadającą domenie Twojej witryny.
Wypełniony formularz powinien wyglądać tak:
Teraz kliknij przycisk Continue to summary; podsumowanie powinno wyglądać tak:
Teraz kliknij przycisk Create Token i skopiuj wygenerowany token do schowka, aby użyć go w kolejnych krokach.
Więcej informacji znajdziesz w dokumentacji Cloudflare: jak utworzyć token API.
Automatyczna konfiguracja
- W Ahrefs przejdź do Ustawienia Projektu → Bot Analytics.
- Wybierz Cloudflare Worker jako metodę.
- Wklej Token API Cloudflare i kliknij Połącz.
Ahrefs użyje Tokena, aby:
- Znaleźć strefę pasującą do domeny Twojego projektu.
- Sprawdzimy, czy dla Twoich rekordów DNS włączono proxy Cloudflare, i ostrzeżemy Cię, jeśli tak nie jest (wymaga opcjonalnego uprawnienia Strefa → DNS → Odczyt).
- Wdróż skrypt Worker w ramach analityki Ahrefs.
- Skonfiguruj trasę, aby uruchamiała się przy każdym żądaniu.
info
Twój token zostanie użyty tylko raz i nie będzie przechowywany.
Konfiguracja ręczna
Jeśli wolisz nie podawać tokenu API, możesz wdrożyć workera ręcznie za pomocą Cloudflare API.
Krok 1 — Uzyskaj Account ID, Zone ID i Token API
-
Przejdź do swojego Dashboard w Cloudflare i wybierz domenę swojej witryny.
-
Znajdź swoje
$ACCOUNT_IDi$ZONE_IDw Dashboard. -
Kliknij opcję „Uzyskaj swój token API” i utwórz nowy token z następującymi uprawnieniami:
- Konto → Skrypty Worker → Edytuj
- Strefa → Trasy skryptów Worker → Edytuj
- Strefa → Strefa → Odczyt
Szczegółowe instrukcje znajdziesz w sekcji Obtaining API token.
Krok 2 — Wdróż workera
Dokładne polecenia, wstępnie uzupełnione danymi Twojego projektu, znajdziesz w Ustawienia projektu → Bot Analytics → Skonfiguruj ręcznie.
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}'
Zastąp yourwebsite.com swoją domeną.
warning
WA_CF_DATA_KEY i wzorzec trasy są unikalne dla Twojego projektu. Aby mieć pewność, że wartości są poprawne, skopiuj dokładne polecenia ze strony Ustawienia projektu → Bot Analytics.
Krok 3 — Sprawdź połączenie
Po wdrożeniu workera i utworzeniu trasy wróć do Ustawienia projektu → Bot Analytics w Ahrefs i kliknij Sprawdź status, aby potwierdzić, że dane są odbierane. Jeśli nie pojawią się żadne dane, sprawdź, czy dla Twoich rekordów DNS włączono proxy.