Docs
Rechercher dans la documentation...⌘K

Fastly

La diffusion en temps réel des journaux de Fastly peut envoyer les journaux de requêtes de votre service à Ahrefs via HTTPS. Vous ajoutez un point de terminaison de journalisation à votre service Fastly depuis le panneau de contrôle Fastly ; Ahrefs n’a jamais besoin d’accéder à votre compte Fastly.

Prérequis

  • Un service CDN Fastly desservant le domaine de votre projet Ahrefs. Tous les forfaits Fastly conviennent, y compris la version gratuite.
  • Autorisation de modifier la configuration de ce service et d’activer une nouvelle version.

Étape 1 — Obtenir votre clé d’accès

  1. Dans Ahrefs, accédez à Paramètres du projet → Bot Analytics pour votre projet.
  2. Sélectionnez Fastly.
  3. Copiez l’URL, le nom d’en-tête personnalisé et la valeur d’en-tête personnalisée. La valeur de l’en-tête est votre clé d’accès : elle identifie votre projet, traitez-la donc comme un mot de passe.

Tout le reste dont vous avez besoin se trouve sur cette page.

Étape 2 — Ajouter le point de terminaison de journalisation

Dans le panneau de contrôle Fastly, ouvrez votre service, cliquez sur Modifier la configuration et clonez la version active. Dans le menu de gauche, choisissez Journalisation, puis HTTPS et Créer un point de terminaison.

Champs du point de terminaison

ChampValeur
NomAhrefs Bot Analytics
PlacementVersion du format par défaut
Format des journauxLe format des journaux ci-dessous, en remplacement du format par défaut
URLhttps://analytics.ahrefs.com/api/fastly/logs
Nombre maximal de journaux, Nombre maximal d’octetsLaissez vide
Type de contenuapplication/json
Nom de l’en-tête personnaliséX-Ahrefs-Web-Analytics-Property
Valeur de l’en-tête personnaliséLa clé d’accès de l’étape 1
MéthodePOST
Format de l’entrée de journal JSONDélimité par des sauts de ligne. Un tableau JSON fonctionne aussi.
CompressionGzip (recommandé) ou aucune. Zstd et Snappy ne sont pas acceptés.
Champs TLSLaissez vide

Dans Options avancées, définissez Sélectionner un format de ligne de journal sur Vide. Cliquez sur Créer, puis sur Activer pour activer la nouvelle version. Fastly commence à diffuser immédiatement.

warning

Le format de ligne de journal doit être Vide. Le format par défaut, Classique, ajoute un en-tête syslog au début de chaque ligne, et Ahrefs rejette ces lots.

info

Lorsque vous enregistrez le point de terminaison, Fastly vérifie que l’hôte de destination accepte les journaux provenant des services Fastly. Ahrefs répond à cette vérification pour tout le monde, vous n’avez donc rien à configurer de votre côté.

Format des journaux

Fastly renseigne les espaces réservés %{...}V pour chaque requête. C’est vous qui décidez quoi partager : le format minimal suffit pour que Bot Analytics fonctionne, le format recommandé donne de meilleurs résultats. Les clés inconnues sont ignorées, vous pouvez donc conserver les champs supplémentaires que vous journalisez déjà.

Minimal. Visites de bots avec l’heure, la page et le nom du bot :

{
  "timestamp": %{time.start.msec}V,
  "host": "%{if(req.http.Fastly-Orig-Host, req.http.Fastly-Orig-Host, req.http.Host)}V",
  "url": "%{json.escape(req.url)}V",
  "request_user_agent": "%{json.escape(req.http.User-Agent)}V"
}

Recommandé. Ajoute l’IP du visiteur pour les données de localisation, le statut et les détails de réponse affichés avec chaque visite, la vérification Web Bot Auth, ainsi que le marqueur edge qui supprime les doublons lorsque votre service utilise un shield :

{
  "timestamp": %{time.start.msec}V,
  "client_ip": "%{req.http.Fastly-Client-IP}V",
  "host": "%{if(req.http.Fastly-Orig-Host, req.http.Fastly-Orig-Host, req.http.Host)}V",
  "scheme": "%{req.protocol}V",
  "url": "%{json.escape(req.url)}V",
  "request_method": "%{json.escape(req.method)}V",
  "request_referer": "%{json.escape(req.http.Referer)}V",
  "request_user_agent": "%{json.escape(req.http.User-Agent)}V",
  "response_state": "%{json.escape(fastly_info.state)}V",
  "response_status": %{resp.status}V,
  "response_body_size": %{resp.body_bytes_written}V,
  "response_content_type": "%{json.escape(resp.http.Content-Type)}V",
  "fastly_server": "%{json.escape(server.identity)}V",
  "fastly_is_edge": %{if(fastly.ff.visits_this_service == 0, "true", "false")}V,
  "request_id": "%{json.escape(req.xid)}V",
  "signature": "%{json.escape(req.http.Signature)}V",
  "signature_input": "%{json.escape(req.http.Signature-Input)}V",
  "signature_agent": "%{json.escape(req.http.Signature-Agent)}V"
}

Combinez les deux comme vous le souhaitez : les quatre clés minimales sont obligatoires ; toutes les autres clés peuvent être omises, vides ou égales à (null). Conservez fastly_is_edge lorsque votre service utilise un shield, sinon chaque miss est compté deux fois. Les clés sans guillemets (timestamp, response_status, response_body_size, fastly_is_edge) doivent toujours avoir une valeur ; sinon, la ligne n’est pas du JSON valide.

info

Les services Fastly Compute écrivent le même JSON depuis le code, un objet par ligne, avec les paramètres du point de terminaison de l’étape 2.

Étape 3 — Vérifier

Fastly transmet les journaux par petits lots, généralement dans la minute suivant les requêtes. Les visites de bots apparaissent ensuite dans le rapport Bot Analytics quelques minutes plus tard. Les requêtes provenant des navigateurs sont également envoyées ; Ahrefs écarte tout ce qui n’est pas un bot.

Dépannage

Fastly n’affiche pas les erreurs de livraison pour les points de terminaison HTTPS dans le panneau de contrôle. Vérifiez donc les paramètres à l’aide du tableau ci-dessus si rien n’arrive. Ahrefs répond à chaque lot par l’une de ces réponses :

RéponseCause
401 missing authentication headerLe nom de l’en-tête personnalisé est mal orthographié ou vide.
403 invalid authenticationLa valeur de l’en-tête personnalisé ne correspond à aucun projet Ahrefs. Copiez-la à nouveau depuis l’étape 1.
400 record 0: …Le format des lignes de journaux est Classique au lieu de Vide, la compression n’est ni au format Gzip ni désactivée, ou le format des journaux n’est pas du JSON valide.
400 record N: Missing record field …Délimité par des retours à la ligne : le format des journaux ne contient pas l’une des clés requises.
400 invalid body: not a JSON array of log records: …Tableau JSON : le format des lignes de journaux est Classique au lieu de Vide, il manque une clé requise au format des journaux, ou celui-ci n’est pas du JSON valide.
400 body is not valid gzipLa compression est définie sur Gzip dans Fastly, mais le corps n’a pas pu être décompressé.