Cloudflare Logpush
Cloudflare Logpush envoie automatiquement les journaux des requêtes HTTP à Ahrefs. C’est la méthode recommandée pour les sites à fort trafic, mais elle nécessite un forfait Cloudflare Entreprise.
Prérequis
- Un forfait Cloudflare Entreprise sur la zone que vous souhaitez surveiller.
- Un jeton d'API Cloudflare avec les autorisations suivantes :
- Zone → Zone → Lire
- Zone → Logs → Edit
- Zone → DNS → Lecture (facultatif, permet à Ahrefs de vérifier que vos enregistrements DNS sont proxifiés)
- Pour la configuration manuelle uniquement :
jqinstallé localement, que les commandes de configuration utilisent pour lire et mettre à jour votre configuration Cloudflare.
info
Logpush n’enregistre que les requêtes qui transitent par Cloudflare. Les enregistrements DNS configurés sur DNS uniquement (nuage gris) envoient les visiteurs directement vers votre serveur d’origine ; Bot Analytics ne reçoit donc aucune donnée les concernant. Assurez-vous que les enregistrements de votre domaine sont définis sur Proxifié (nuage orange) ; consultez l’état du proxy.
Limites et coûts
La tâche Logpush envoie une ligne de log pour chaque requête vers votre domaine et ses sous-domaines. Les requêtes provenant des navigateurs sont également envoyées ; Ahrefs écarte tout ce qui n’est pas un bot.
warning
Cloudflare autorise au maximum 4 tâches Logpush par zone. Si votre zone en compte déjà 4, la configuration échoue jusqu’à ce que vous en supprimiez une.
Cloudflare mesure l’utilisation de Logpush en octets non compressés livrés. Consultez votre contrat Entreprise pour savoir comment cela est facturé et reportez-vous à Logpush pour plus de détails.
Obtention du jeton d’API Cloudflare
Assurez-vous d’être connecté au Dashboard Cloudflare avec le bon compte. Accédez ensuite à la page https://dash.cloudflare.com/profile/api-tokens, repérez et cliquez sur le bouton Create Token en haut à droite :
Passez maintenant au flux Créer un jeton personnalisé :
Renseignez les informations suivantes :
- Nom du jeton API : ahrefs-bot-analytics
- Accordez les autorisations suivantes :
- Zone / Journaux / Modifier afin que nous puissions configurer une tâche Logpush pour envoyer les journaux vers Ahrefs Bot Analytics
- Zone / Zone / Lire afin que nous puissions localiser la zone à configurer
- Zone / DNS / Lecture (facultatif) afin que nous puissions vérifier que vos enregistrements DNS transitent par le proxy de Cloudflare
- Les ressources de zone peuvent être définies sur Inclure / Toutes les zones ; sinon, sélectionnez la zone qui correspond au domaine de votre site web.
Cliquez maintenant sur le bouton Continuer vers le récapitulatif ; le récapitulatif devrait ressembler à ceci :
Cliquez maintenant sur le bouton Créer un jeton et copiez le jeton généré dans le presse-papiers pour l’utiliser lors des étapes suivantes.
Consultez la documentation Cloudflare sur la création d’un jeton API pour plus d’informations.
Configuration automatique
- Dans Ahrefs, allez dans Paramètres du projet → Bot Analytics.
- Sélectionnez Cloudflare Logpush comme méthode.
- Collez votre jeton d'API Cloudflare et cliquez sur Connecter.
Ahrefs utilisera votre jeton pour :
- Trouver la zone correspondant au domaine de votre projet.
- Vérifier que vos enregistrements DNS transitent par le proxy de Cloudflare et vous avertir si ce n’est pas le cas (nécessite l’autorisation facultative Zone → DNS → Lecture).
- Vérifier l’existence de tâches Logpush.
- Créer une nouvelle tâche qui envoie des journaux à Ahrefs.
- Ajoutez une règle de champ de journal personnalisé à la zone afin que les journaux incluent les en-têtes de requête de vérification du bot (
signature,signature-inputetsignature-agent) ainsi que l’en-tête de réponseLocation, qui indique vers où une redirection a envoyé le bot. La tâche demande les champsRequestHeadersetResponseHeaderspour les recevoir. Les règles existantes de votre zone sont conservées.
info
Une tâche créée avant l’ajout de l’en-tête Location ne l’envoie pas. Reconnectez-vous ou relancez la configuration manuelle afin de remplacer la tâche et la règle.
info
Votre jeton est utilisé une seule fois et n’est pas stocké.
Configuration manuelle
Si vous préférez ne pas fournir de jeton d’API, vous pouvez configurer la tâche Logpush manuellement à l’aide de l’API Cloudflare.
Étape 1 — Obtenez votre jeton API
-
Accédez à votre Dashboard Cloudflare et sélectionnez le domaine de votre site web.
-
Cliquez sur « Obtenir votre jeton API » et créez un jeton avec les autorisations suivantes :
- Zone → Zone → Lire
- Zone → Logs → Edit
Voir Obtention d'un jeton API pour obtenir des instructions détaillées.
info
Vous n’avez pas besoin de rechercher votre ID de zone. Les commandes trouvent la zone à partir de votre domaine à l’aide de l’autorisation Zone → Zone → Lecture.
Étape 2 — Créez la tâche Logpush
Renseignez votre jeton d’API dans le premier bloc, puis exécutez chaque bloc ci-dessous, un par un, dans votre terminal, en vérifiant que chacun se termine sans erreur. Ensemble, ils trouvent votre zone, créent la tâche Logpush et ajoutent la règle de champ de journal personnalisé décrite dans Configuration automatique. Vous pouvez trouver les commandes exactes, préremplies avec les détails de votre projet, dans Paramètres du projet → Bot Analytics → Configurer manuellement.
export CF_TOKEN="<your Cloudflare API token>"
BASE="https://api.cloudflare.com/client/v4"
Find the Cloudflare zone for yourwebsite.com
ZONE_ID=$(curl -s --fail-with-body "$BASE/zones?name=yourwebsite.com&status=active&match=all" \
-H "Authorization: Bearer $CF_TOKEN" | jq -r '.result[0].id // error("no active Cloudflare zone found for yourwebsite.com")')
echo "ZONE_ID=$ZONE_ID"
Remove the existing Logpush job if present
OLD_JOB_ID=$(curl -s --fail-with-body "$BASE/zones/$ZONE_ID/logpush/jobs" \
-H "Authorization: Bearer $CF_TOKEN" | jq -r '([(.result // [])[] | select(.name == "ahrefs-web-analytics-http-requests")])[0].id // ""')
echo "OLD_JOB_ID=$OLD_JOB_ID"
if [ -n "$OLD_JOB_ID" ]; then
curl -s --fail-with-body "$BASE/zones/$ZONE_ID/logpush/jobs/$OLD_JOB_ID" -X DELETE \
-H "Authorization: Bearer $CF_TOKEN"
fi
Create the Logpush job
curl -s --fail-with-body "$BASE/zones/$ZONE_ID/logpush/jobs" -X POST \
-H "Authorization: Bearer $CF_TOKEN" \
-H "Content-Type: application/json" \
--data-binary '{"name":"ahrefs-web-analytics-http-requests","destination_conf":"https://analytics.ahrefs.com/api/cf_logpush/http_requests?header_x-ahrefs-web-analytics-property=YOUR_PROPERTY_KEY","dataset":"http_requests","frequency":"high","filter":"{\"where\":{\"or\":[{\"key\":\"ClientRequestHost\",\"operator\":\"eq\",\"value\":\"yourwebsite.com\"},{\"key\":\"ClientRequestHost\",\"operator\":\"endsWith\",\"value\":\".yourwebsite.com\"}]}}","output_options":{"field_names":["ClientIP","ClientRequestMethod","ClientRequestHost","ClientRequestProtocol","ClientRequestScheme","ClientRequestURI","ClientRequestPath","ClientRequestUserAgent","ClientRequestReferer","EdgeStartTimestamp","EdgeEndTimestamp","EdgeResponseStatus","EdgeResponseBytes","EdgeResponseContentType","EdgeTimeToFirstByteMs","ClientCountry","ClientCity","ClientASN","ClientDeviceType","ClientRegionCode","BotScore","BotScoreSrc","BotTags","VerifiedBotCategory","RayID","RequestHeaders","ResponseHeaders"],"timestamp_format":"unixnano"},"enabled":true}'
Add the custom log fields rule
RULES=$(curl -s --fail-with-body "$BASE/zones/$ZONE_ID/rulesets/phases/http_log_custom_fields/entrypoint" \
-H "Authorization: Bearer $CF_TOKEN" | jq -c '.result.rules // []')
echo "RULES=$RULES"
BODY=$(jq -nc --argjson rules "$RULES" \
'{rules: ([$rules[] | select(.description != "ahrefs-web-analytics-web-bot-auth-signature")] + [{"action":"log_custom_field","expression":"true","description":"ahrefs-web-analytics-web-bot-auth-signature","action_parameters":{"request_fields":[{"name":"signature"},{"name":"signature-input"},{"name":"signature-agent"}],"response_fields":[{"name":"location"}]}}])}')
curl -s --fail-with-body "$BASE/zones/$ZONE_ID/rulesets/phases/http_log_custom_fields/entrypoint" -X PUT \
-H "Authorization: Bearer $CF_TOKEN" \
-H "Content-Type: application/json" \
--data-binary "$BODY"
info
Les champs BotScore, BotScoreSrc et BotTags ne sont disponibles qu’avec un abonnement à Cloudflare Bot Management. Bot Analytics fonctionne toutefois sans eux, mais les inclure améliore la classification des bots. Si votre zone ne dispose pas de Bot Management, supprimez ces trois champs de field_names avant de créer la tâche.
warning
L’URL destination_conf et la clé de propriété sont propres à votre projet. Copiez les commandes exactes depuis votre page Paramètres du projet → Bot Analytics pour vous assurer d'utiliser les bonnes valeurs.
Étape 3 — Vérifier la connexion
Après avoir créé la tâche, retournez dans Paramètres du projet → Bot Analytics dans Ahrefs et cliquez sur Vérifier l’état pour vérifier que les données sont bien reçues. Si aucune donnée n’arrive, vérifiez que vos enregistrements DNS sont proxifiés.