Aller au contenu

Autocapture et confidentialité

Avec autocapture: true (le défaut), le SDK enregistre les interactions de page sans aucune instrumentation : clics, soumissions de formulaire et pageviews dès la première minute. Le code est livré comme un chunk chargé à la demande — avec autocapture: false, il n’est même jamais téléchargé.

Chaque interaction capturée produit le même événement, $autocapture, décrit par ses propriétés :

  • $event_type : click | submit | change.
  • $elements : la chaîne DOM depuis la cible de l’interaction vers le haut (environ 10 niveaux). Par élément : tag, classes, attr_id, text, nth_child, et href pour les liens.

Un événement unique garde l’espace de noms des événements réduit : “a cliqué sur l’élément X” est un filtre sur $elements dans les requêtes, pas un nom d’événement à part.

  • $pageview est émis au chargement de la page.
  • Les navigations côté client l’émettent aussi : le SDK s’accroche à l’History API (pushState, replaceState, popstate), donc les single-page apps obtiennent un $pageview par changement de route, sans intégration avec le routeur.
  • $pageleave est émis sur pagehide.

Autocapturé ou non, chaque événement porte $current_url, $referrer, $session_id, $device_type, $screen_width, $screen_height, $lib, $lib_version, ainsi que $utm_source / $utm_medium / $utm_campaign / $utm_term / $utm_content extraits de l’URL.

Ce sont des garanties fermes, pas des réglages par défaut :

  • Les valeurs des champs de saisie ne sont jamais capturées. Une interaction change enregistre que quelque chose a changé — jamais quoi.
  • Les champs de mot de passe ne produisent même pas d’événement : un change sur input[type=password] est entièrement ignoré.
  • Le session replay est un système séparé, opt-in, avec ses propres défauts de confidentialité (plus stricts).

Dans votre markup — ajoutez data-kilden-no-capture à n’importe quel élément pour l’exclure avec tous ses descendants :

<div data-kilden-no-capture>
<!-- rien ici ne produit d'événements $autocapture,
et le session replay ne l'enregistrera pas non plus -->
</div>

Dans les options d’init — passez un objet au lieu de true :

kilden.init('YOUR_WRITE_KEY', {
autocapture: {
captureClicks: true, // true par défaut
captureSubmits: true, // true par défaut
captureChanges: false, // false par défaut
ignoreSelectors: ['.sensitive', '#admin-panel'],
maskAllText: false, // true remplace tout le texte de $elements par "*"
allowUrls: [/^https:\/\/app\.example\.com/], // restreint aux URL correspondantes
},
});

Dans le codebeforeSend (ou un plugin before) voit chaque événement $autocapture et peut le transformer ou le supprimer :

kilden.init('YOUR_WRITE_KEY', {
beforeSend(event) {
if (event.event === '$autocapture' && location.pathname.startsWith('/admin')) {
return null;
}
return event;
},
});

Les événements et propriétés commençant par $ sont réservés au système Kilden ($pageview, $autocapture, $identify, …). Envoyer votre propre événement préfixé par $ via track() journalise un avertissement en mode debug mais l’événement est quand même livré — le SDK ne casse jamais un client pour une convention. Liste complète dans Événements et propriétés.