Erfasste Ereignisse
Ein Seitenaufruf zeigt, welche Seite geöffnet wurde. Er sagt nicht, ob der Leser das Snippet kopiert, den Assistenten gefragt, über die Einleitung hinaus gescrollt oder zu Ihrer Registrierungsseite gewechselt hat. Auf dieser Seite finden Sie die vollständige Liste dessen, was sonst noch erfasst wird, Feld für Feld, damit Sie vor dem Erstellen eines Ziels oder Trichters feststellen können, ob das, was Sie messen möchten, bereits erfasst wird.
Das erhalten Sie#
Sechsunddreißig benannte docs.*-Ereignisse in sieben Kategorien, die auf jeder
Dokumentationsseite ohne Konfiguration und ohne Tag-Manager aufgezeichnet werden. Jedes davon ist eine Zeile, nach der Sie in Feeds filtern, ein Ziel
zuordnen, im Analyseüberblick einordnen oder pro
Besucher über MCP auslesen können.
Die Aufzeichnung wird nicht auf das Guthaben Ihres Projekts angerechnet, und an der Liste ändert sich durch Ihren Tarif nichts.
Der Katalog#
Jedes Ereignis enthält den vollständigen Namen Ihres Projekts (owner/repo). Die Spalte Ebenfalls enthalten gibt an, was zusätzlich dazu enthalten ist. Ereignisse, die als Beacon markiert sind, werden von navigator.sendBeacon ausgeliefert, sobald der Leser die Seite verlässt; der Rest wird über den gewöhnlichen Logging-Transport gesendet, der zwei Sekunden lang bündelt.
KI-Assistent#
| Ereignis | Wird ausgelöst, wenn | Enthält außerdem |
|---|---|---|
docs.ai_open |
Der Leser das Assistentenpanel öffnet | conversation_id |
docs.ai_query |
Eine Frage gesendet wird | question, answer, conversation_id, turn |
docs.ai_like / docs.ai_dislike |
Eine Antwort mit einer Daumenbewertung versehen wird | path, conversation_id, question |
docs.ai_copy |
Eine Antwort kopiert wird | conversation_id |
docs.ai_navigate |
Ein von der Antwort zitierter Link angeklickt wird | query, path, conversation_id, source (badge oder sources) — Beacon |
docs.ai_outbound |
Ein Link in der Antwort den Leser von Ihrer Website wegführt | href, host, conversation_id, question — Beacon |
docs.ai_conversation |
Einmal pro Unterhaltung, wenn die erste erfolgreiche Antwort betitelt wird | topic, intent, competitor, question, answer_completeness, gap_type |
docs.ask_ai_outline |
„KI fragen“ in der Seitenübersicht gedrückt wird | — |
docs.ai_navigate und docs.ai_outbound sind bewusst zwei Ereignisse und nicht eines.
Das erste besagt, dass der Leser der Antwort genug vertraut hat, um die von ihr zitierte Seite zu öffnen;
das zweite besagt, dass der Assistent ihn an Ihre App, Ihr Repository oder ganz woanders weitergeleitet hat — eine kommerzielle Frage, keine Frage des Verständnisses.
Suche#
| Ereignis | Wird ausgelöst, wenn | Enthält außerdem |
|---|---|---|
docs.search_open |
Das Suchfeld auf der Seite geöffnet wird | — |
docs.search_navigate |
Ein Suchergebnis angeklickt wird | query, path |
docs.search_no_result |
Eine Abfrage keine Ergebnisse liefert | query |
Lesen und Engagement#
| Ereignis | Wird ausgelöst, wenn | Enthält außerdem |
|---|---|---|
docs.pageview |
Eine Seite ausgeliefert wird | path, lang, trafficType, referrer, userAgent, source sowie das Land/die Region/die Stadt/die Koordinaten, die der Edge ermittelt hat |
docs.read_time |
Der Leser eine Seite verlässt | path, seconds — Beacon |
docs.heading_view |
Eine Überschrift in den sichtbaren Bereich gescrollt wird | path, heading (als #anchor) — Beacon |
docs.scroll_to_top |
Das „Nach oben“-Steuerelement verwendet wird | — |
docs.widget_toggle |
Ein Inhalts-Widget geöffnet oder geschlossen wird | widget, enabled |
docs.theme_toggle |
Zwischen Hell- und Dunkelmodus gewechselt wird | theme |
docs.language_switch |
Die Sprachauswahl verwendet wird | from, to |
docs.pageview ist das einzige Ereignis, das der Browser nicht sendet. Es wird
serverseitig geschrieben und existiert daher auch für Leser mit deaktiviertem JavaScript — weshalb
ein Besuch, der ausschließlich aus Seitenaufrufen besteht, als Crawler behandelt wird. Auf Seiten,
die aus dem Cache ausgeliefert werden, wird der Seitenaufruf stattdessen vom Browser als Beacon gesendet.
Der Ingest-Endpunkt ergänzt dieselbe IP-Adresse und Geografie, sodass beide Pfade dieselbe Zeile
erzeugen.
seconds wird unverarbeitet ausgegeben und auf 300 Sekunden gekürzt, bevor ein Bericht die Summe bildet.
Diese Kürzung und der Grund dafür werden unter Lesezeit erläutert.
Inhaltsaktionen#
| Ereignis | Ausgelöst, wenn | Zusätzlich enthalten |
|---|---|---|
docs.copy_code |
Ein Codeblock wird kopiert | — |
docs.copy_page |
Die gesamte Seite wird kopiert | — |
docs.copy_markdown |
Die Seite wird als Markdown kopiert | — |
docs.copy_dropdown |
Das Kopiermenü wird verwendet | action |
docs.edit_on_github |
„Auf GitHub bearbeiten“ wird angeklickt | path |
Navigation#
| Ereignis | Wird ausgelöst, wenn | Enthält außerdem |
|---|---|---|
docs.sidebar_nav |
Ein Eintrag in der Seitenleiste angeklickt wird | path |
docs.heading_nav |
Ein Eintrag in der Gliederung der Seite angeklickt wird | heading, path |
docs.page_nav |
Zurück/Weiter verwendet wird | direction (prev oder next), path |
docs.internal_link |
Ein seiteninterner Link zu einer anderen Ihrer Seiten angeklickt wird | href |
docs.heading_nav und docs.heading_view verwenden absichtlich dasselbe #anchor-Format, damit ein Abschnitt dasselbe aggregiert, unabhängig davon, ob Leser direkt zu ihm gesprungen oder zu ihm gescrollt haben.
Ausgänge und Quellen#
| Ereignis | Wird ausgelöst, wenn | Enthält außerdem |
|---|---|---|
docs.outbound_link |
Ein Link Ihre Dokumentation verlässt | href, host, path — Beacon |
docs.header_link |
Auf einen Link im Header Ihrer Website geklickt wird | label, href |
docs.utm |
Ein Besuch mit Kampagnen-Tags eintrifft | die utm_*-Parameter wie angegeben |
docs.page_exit |
Der Leser die Website verlässt oder sie neu lädt | path — Beacon |
docs.claim_banner_seen |
Das Banner zum Veröffentlichen/Übernehmen angezeigt wird | claim_token |
docs.claim_click |
Auf das Banner zum Veröffentlichen/Übernehmen geklickt wird | claim_token — Beacon |
docs.page_exit wird nur bei einem tatsächlichen Verlassen oder Neuladen ausgelöst. Die Navigation innerhalb der Website
erzeugt kein solches Ereignis. Dadurch ist das letzte docs.page_exit eines Besuchs die Seite, von der der Leser die Website tatsächlich verlassen hat.
Feedback#
| Ereignis | Ausgelöst, wenn | Enthält außerdem |
|---|---|---|
docs.page_feedback_up |
Eine Seite als hilfreich bewertet wird | path, Land |
docs.page_feedback_down |
Eine Seite als nicht hilfreich bewertet wird | path, Land |
Die Richtung steht im Namen des Ereignisses, nicht in einem vote-Feld: Das Schema des Ereignisspeichers besteht aus einer festen Menge von Feldnamen, und ein nicht erkanntes Feld wird vollständig abgelehnt, statt verworfen zu werden. Stimmen werden über eine Serverroute erfasst, sodass ein Webhook bei ihnen ausgelöst werden kann; wenn diese Anfrage fehlschlägt, erfasst der Browser dasselbe Ereignis direkt, sodass die Anzahl erhalten bleibt.
Automatisch oder von einer Funktion abhängig#
In Docsbook gibt es nirgendwo einen Tracking-Schalter und kein enabled-Flag bei irgendeinem
Ereignis. Jedes oben aufgeführte Ereignis wird ausgegeben, sobald das Element, das es erzeugt, vorhanden ist.
Dadurch teilt sich die Liste in zwei Teile:
| Immer | Erst, wenn die Funktion verwendet wird |
|---|---|
| Seitenaufrufe, Lesedauer, Überschriftenansichten, Abgänge, Kopiervorgänge, interne und externe Links, Navigation über die Seitenleiste sowie Zurück/Weiter-Navigation, Suche, Design, Nach-oben-scrollen | Jedes docs.ai_*-Ereignis (benötigt den leserorientierten Assistenten, der eine kostenpflichtige Funktion ist – siehe Preise), docs.language_switch (benötigt eine zweite Sprache), docs.edit_on_github (benötigt ein verknüpftes Repository), docs.utm (benötigt Links, die Sie selbst markiert haben), docs.widget_toggle (benötigt ein Widget auf der Seite), das Feedback-Paar (benötigt das Abstimmungs-Widget), die beiden docs.claim_*-Ereignisse (nur auf einer nicht beanspruchten Website) |
Ein „leeres“ Ereignis in Ihren Berichten kann daher auf zwei Arten interpretiert werden, und sie sind unterschiedlich: Niemand hat es ausgeführt, oder noch nichts kann es ausführen.
Wie es übermittelt wird#
Normale Ereignisse werden über einen Transport gesendet, der zwei Sekunden lang bündelt und
über fetch postet. Das ist für einen Klick, der die Seite offen lässt, in Ordnung, und
bei einem Klick, der dies nicht tut, geht alles verloren – weshalb die mit dem Verlassen
verbundenen Ereignisse einen zweiten Weg nehmen:
- Komponenten registrieren einen Exit-Collector. Bei
pagehidewird jeder Collector in ein einziges Beacon geleert, auf 100 Ereignisse begrenzt und an einen Same-Origin-Endpunkt gesendet. - Unter iOS löst
visibilitychange → hiddendenselben Flush aus, dapagehidedort unzuverlässig ist. - Collector geben nur das zurück, was sie noch nicht gesendet haben. Dadurch wird ein iOS-Flush gefolgt von einem tatsächlichen Verlassen nicht doppelt gezählt, und eine aus dem Back-/Forward-Cache wiederhergestellte Seite kann erneut einen Flush ausführen.
Ansichten von Überschriften werden mit einem IntersectionObserver bei einem Schwellenwert von 0 und
einem -15% unteren Rand erfasst, und die Beobachtung jeder Überschrift wird aufgehoben, sobald sie
gesehen wurde: Eine Überschrift wird einmal pro Seitenaufruf gezählt, und zwar erst, nachdem sie den unteren Rand
des Ansichtsfensters passiert hat, nicht bereits in dem Moment, in dem sie kurz hineinschaut.
Warum dies der richtige Weg ist#
| Regel | Warum es im ausführenden Browser funktioniert | Quelle |
|---|---|---|
Ereignisse beim Verlassen werden per Beacon gesendet, niemals über ein entprelltes fetch |
Beacon-Anfragen werden „garantiert vor dem Entladen der Seite initiiert und dürfen vollständig ausgeführt werden, ohne blockierende Anfragen zu erfordern“ | W3C Beacon API |
| Das Verlassen nicht blockieren, um das Ereignis zu übermitteln | Die Alternativen, gegen die die Beacon-Spezifikation verfasst wurde — „blockierende Anfragen über synchrone XMLHttpRequests ausführen, No-Op-Warteschleifen einfügen“ — „hindern den User-Agent daran, zeitkritische Vorgänge auszuführen … und beeinträchtigen die Benutzererfahrung“ | W3C Beacon API |
Auf pagehide lauschen und zusätzlich auf eine Sichtbarkeitsänderung |
unload „ist weiterhin unzuverlässig, daher sollte es nur verwendet werden, wenn es unbedingt notwendig ist“; pagehide „wird in allen Fällen ausgelöst, in denen das unload-Ereignis ausgelöst wird“, und zusätzlich beim Eintritt in den Back-/Forward-Cache |
web.dev: bfcache |
Überschriftenansichten mit IntersectionObserver erkennen, nicht mit einem Scroll-Handler |
Die Positionsberechnung per DOM-Abfrage „verursacht bekanntermaßen (aufwendige) Neuberechnungen von Stilen und Layouts“, und Websites, die „Scroll-Handler missbrauchen“, verursachen „Ruckeln beim Scrollen“; die asynchrone Übermittlung „macht kostspielige DOM- und Stilabfragen sowie kontinuierliches Polling überflüssig“ | W3C Intersection Observer |
Eine Überschrift zählen, sobald sie den Falz überschritten hat, mit rootMargin |
rootMargin wendet „Offsets … effektiv an, indem es die Box vergrößert oder verkleinert, die zur Berechnung von Überschneidungen verwendet wird“ — die ehrliche Art zu sagen „tatsächlich erreicht“ statt „technisch überlappt“ |
W3C Intersection Observer |
| Eine Seite, die auch im verborgenen Zustand weiterzählt, misst das Falsche | Die Page Visibility API existiert, weil „Webentwickler Webseiten so gestaltet haben, als wären sie immer sichtbar“ | W3C Page Visibility Level 2 |
Ereignisse eines Besuchers auslesen#
Zwei MCP-Tools rekonstruieren den Pfad eines anonymen Besuchers von Anfang bis Ende, und beide sind
Lesevorgänge: get_top_visitors listet die aktivsten Besucher über einen Zeitraum auf,
get_visitor_activity gibt die Ereignisse eines Besuchers in der richtigen Reihenfolge zurück.
get_top_visitors(period: "7d", limit: 25)
→ [{ visitor_id: "a1b2…", pageview_count: 14, first_seen, last_seen, country }, …]
get_visitor_activity(visitor_id: "a1b2…", period: "7d")
→ { first_seen, last_seen, country, language, pageview_count,
events: [
{ event: "docs.pageview", at, path: "guides/quick-start" },
{ event: "docs.page_feedback_down", at, path: "guides/quick-start" },
{ event: "docs.search_no_result", at, query: "rotate api key" },
… ] }visitor_id ist ein gesalzener Hash der IP-Adresse des Lesers, der auf Ihr Projekt beschränkt ist; rohe
IP-Adressen werden niemals zurückgegeben. Weitere Informationen finden Sie unter
Funktionsweise der Messung.
Grenzen und offene Fragen#
- Kein Webhook kann bei einem
docs.*-Ereignis ausgelöst werden. Diese Ereignisse befinden sich im Ereignisdatenlager, und nichts löst sie aus. Sie können in Feeds gefiltert und in einer Liste gespeichert werden. Dort werden sie alsnot_sentangezeigt, weil sie genau das sind. Das Erstellen von Warnungen zum Verhalten der Leser erfolgt über die abgeleiteten Webhook-Ereignisse — Traffic-Rückgang, beliebte Suche, Suche ohne Ergebnis — und nicht über diesen Katalog. Siehe Webhooks. - Ereignisse werden pro Ereignis gezählt, nicht pro Besuch. Wenn ein Leser fünf Snippets kopiert, sind das fünf
docs.copy_code-Zeilen. Alles, was pro Besuch gezählt werden muss — Absprung, Konversion, ein Ziel — wird durch die Rekonstruktion des Besuchs abgeleitet und nicht durch das Aufsummieren dieser Liste. - Ein Leser mit deaktiviertem JavaScript trägt nur
docs.pageviewbei. Jedes andere oben aufgeführte Ereignis benötigt ein laufendes Skript, worauf sich der Filter für den Verhaltens-Crawler genau stützt. - Die Felder
questionundanswerenthalten alles, was der Leser eingegeben hat. Rohdaten von Ereignissen werden durch einen Redaktor geleitet, der jedes Feld maskiert, dessen Schlüssel oder Wert wie ein Token, Schlüssel, JWT oder Autorisierungsheader aussieht. Wenn ein Leser jedoch persönliche Informationen in Ihren Assistenten eingibt, hat er sie in Ihren Ereignisspeicher eingegeben. Die Aufbewahrungsfrist beträgt 30 Tage. - Offene Frage: Der Katalog ist maßgeblich, aber nicht vollständig für den Stream. Nachprüfbar ist, dass diese 36 Namen diejenigen sind, die jede Oberfläche — das Panel, Feeds, die Zielvalidierung, MCP — aus einer gemeinsamen Liste liest, sodass ein Ziel nur für einen darin enthaltenen Namen definiert werden kann. Nicht enthalten sind einige zusätzliche
docs.*-Namen, die vom Teaser-Ablauf für nicht beanspruchte Websites ausgegeben werden und nicht in dieser Liste stehen. Das bedeutet, dass sie den Speicher erreichen und in der Benutzeroberfläche unsichtbar sind. Betrachten Sie die 36 als vollständige Menge der Ereignisse, auf die Sie reagieren können, nicht als vollständiges Verzeichnis jeder Zeichenfolge im Stream.
Verwandte Inhalte#
- Funktionsweise der Messung — Besucheridentität, Bot-Filterung, Aufbewahrung und Datenschutz für alles auf dieser Seite
- Analytics-Übersicht — die Karten und Kennzahlen, in die diese Ereignisse einfließen
- Ziele und Trichter — das Festlegen eines Ergebnisses für einen dieser Ereignisnamen
- Lesezeit —
docs.read_timeals Bericht - Webhooks — die Ereignisse, die Sie benachrichtigen können