Gesamte Doku

Start

  1. 01Erste Schritte
  2. 02Installation
  3. 03Tracking

Funktionen

  1. 04Das Dashboard
  2. 05Ziele
  3. 06Kurzlinks
  4. 07KI-Quellen und Agenten
  5. 08E-Mail-Berichte
  6. 09Stündlicher Check
  7. 10Frag deine KI

Referenz

  1. 11Konfiguration
  2. 12HTTP-API

Plattformen

  1. 13Eigenständiger Server
  2. 14PHP
  3. 15WordPress
  4. 16Drupal
  5. 17Craft CMS
  6. 18Python
  7. 19Rails
  8. 20Ruby
  9. 21Go
  10. 22Java
  11. 23.NET
  12. 24Elixir
  13. 25Rust

Vertrauen

  1. 26Datenschutz

Plattformen

Craft CMS

Zähle eine Craft-CMS-Website mit Runlight und sieh, wann KI-Agenten sie lesen.

Das Runlight-Plugin betreibt Runlight innerhalb einer Website mit Craft 5, mit dem Dashboard unter /runlight auf der Website und den Zahlen in ihrer eigenen Datenbank. Es kann auch an ein Runlight senden, das du anderswo betreibst, entweder den eigenständigen Server oder eine App, in die Runlight eingebunden ist, sodass ein Dashboard viele Websites abdeckt.

Was es tut

  • Es fügt Runlights Skript in jede Frontend-Seite ein. Auf einer Seite, die Craft mit einem 404 beantwortet, zeichnet das Skript außerdem ein Ereignis namens 404 mit dem Pfad der fehlenden Seite auf, sodass die Eigenschaften von 404 in der Box Ereignisse die kaputten Adressen auflisten, auf die Leute gestoßen sind, und wie oft.
  • Es lässt die eigenen Besuche von Nutzern des Control Panels weg, außer du schaltest das aus. Die Seiten, die sie ohne das Skript sehen, werden nie gecacht, deshalb bekommen alle anderen es weiterhin.
  • Es meldet KI-Agenten wie ChatGPT und Claude, wenn sie deine Seiten abrufen, nachdem die Verbindung geschlossen wurde, sodass der Agent nie auf die Meldung wartet.
  • Es fügt dem Control Panel einen Eintrag Runlight hinzu, der dort das Dashboard dieser Website zeigt.

Einrichten

Installiere das Plugin mit composer require runlight/craft und anschließend php craft plugin/install runlight oder unter Settings, Plugins. Seine Einstellungen öffnen sich mit einem Einrichtungsbildschirm, und nichts wird gezählt, bis du wählst, wo Runlight läuft. Klicke auf Run Runlight in this Craft site, und es beginnt, die Website zu zählen.

Der Eintrag Runlight im Control Panel zeigt die Zahlen, und sein Button Open in Runlight öffnet das vollständige Dashboard unter /runlight auf deiner Website. Dort kannst du Ziele, Trichter, Kurzlinks und E-Mail-Berichte hinzufügen. Admins und Leute mit der Berechtigung Manage Runlight sind Eigentümer dieses Runlight. Leute mit der Berechtigung See Runlight’s numbers sehen dasselbe Dashboard, ohne etwas ändern zu können. Beide stehen unter Users, Permissions, Runlight, und alle anderen werden gebeten, sich bei Craft anzumelden. Änderungen werden nur von den eigenen Seiten deiner Website angenommen, damit keine andere Website sie mit der Sitzung eines Eigentümers vornehmen kann.

Um Runlight innerhalb von Craft zu betreiben, brauchst du PHP 8.2 oder neuer mit den Erweiterungen pdo, mbstring und openssl. Der Einrichtungsbildschirm sagt dir, wenn etwas fehlt.

Wo die Zahlen liegen

Ist die Datenbank von Craft Postgres, MySQL 8.0.20 oder neuer oder MariaDB 11.4 oder neuer, speichert Runlight seine Zahlen dort, sodass deine Datenbank-Backups sie enthalten und jeder Server einer Website dieselben sieht. Seine Tabellen sind nach dem Tabellenpräfix von Craft benannt, etwa craft_rl_events, und Runlight markiert sie als die dieser Installation. Gibt es Tabellen mit diesen Namen schon und gehören sie nicht zum Runlight dieser Installation, etwa zu einem eigenständigen Runlight in derselben Datenbank, lässt es sie in Ruhe und nutzt eine SQLite-Datei. Andernfalls kommen die Zahlen in eine SQLite-Datei in storage/runlight, die das Web nie ausliefert und die PHPs pdo_sqlite voraussetzt. Eine SQLite-Datei gehört zu einem Server. Auf mehreren Servern oder bei einem Host, der storage bei jedem Deploy ersetzt, nimm also eine Datenbank, in der Runlight seine Zahlen ablegen kann.

Nichts hält die Wahl neben den Zahlen fest. Runlights Tabellen in der Datenbank von Craft bedeuten die Datenbank von Craft, und eine SQLite-Datei bedeutet SQLite, deshalb gilt die Wahl auf jedem Server und über jeden Deploy hinweg. Das Geheimnis, mit dem Runlight Sitzungen signiert und die Schlüssel versiegelt, die du in seinem Dashboard speicherst, stammt aus dem securityKey von Craft, es ist also auch überall dasselbe. Änderst du securityKey, werden alle bei Runlight abgemeldet, und in seinem Dashboard gespeicherte Schlüssel, etwa die eines Mail-Dienstes, müssen neu eingegeben werden.

Wenn du das Plugin deinstallierst, werden Runlights Tabellen entfernt, jede einzeln beim Namen und nur die dieser Installation, auch wenn storage/runlight schon fehlt, und sein Ordner.

Orte und Pflege

Die Länder der Besucher kommen aus einem Header, wenn ein CDN wie Cloudflare einen mitschickt. Andernfalls schalte in den Einstellungen des Plugins Locations ein, und die Pflege lädt einmal im Monat die kostenlose Länder-Datenbank von DB-IP auf jedem Server nach storage/runlight herunter. Die Pflege führt auch Runlights stündlichen Check aus, der den Salt für jeden Tag erzeugt, E-Mail-Berichte verschickt und Besuche löscht, die älter sind als die eingestellte Aufbewahrungsdauer. Ein Besuch auf der Website stellt sie höchstens einmal pro Stunde in die Queue, und nur, solange keine frühere noch wartet. Die Queue von Craft läuft nur, während jemand das Control Panel benutzt, außer ein Queue-Runner ist eingerichtet. Trag deshalb php craft runlight/check stündlich in den Cron deines Servers ein. Ist die Pflege seit über einem Tag nicht gelaufen, sagt die Einstellungsseite das.

Adressen der Besucher

Runlight zählt Besucher mit einem täglichen Hash ihrer Adresse und begrenzt, wie oft eine Adresse senden kann. Es nimmt die Adresse, die Craft für jede Anfrage ermittelt, was den Einstellungen trustedHosts und ipHeaders von Craft folgt. Craft vertraut Proxy-Headern von jedem Host, bis du die Hosts vor deiner Website nennst. Setze also trustedHosts in config/general.php oder CRAFT_TRUSTED_HOSTS auf die Adressen deines Load Balancers oder CDNs, dann kann kein Besucher mit einem Header eine Adresse wählen.

Die Zähler pro Adresse und der tägliche Schlüssel, mit dem sie gehasht werden, liegen im Cache von Craft, in zwei Einträgen, die jede Minute beziehungsweise jeden Tag ersetzt werden.

Zählen

In den Einstellungen des Plugins zeichnet Count clicks on links to other sites jeden Klick auf einen Link zu einer anderen Website als Ereignis namens Outbound link auf, und Count file downloads zeichnet jeden Klick auf einen Link zu einer Datei, etwa einem PDF oder einem ZIP, als Ereignis namens File download auf. Beides ist eingeschaltet, bis du es ausschaltest.

Mit einem Runlight verbinden, das du anderswo betreibst

  1. Installiere das Plugin wie oben.
  2. Gib auf dem Einrichtungsbildschirm unter Connect to a Runlight you run elsewhere die Adresse ein, unter der dein Runlight antwortet, etwa https://stats.example.com für den eigenständigen Server oder https://example.com/runlight für eine App, in die Runlight eingebunden ist. Runlight zeigt sie unter Einstellungen, Einbinden als Runlight-Adresse an.
  3. Klicke auf Connect. Dein Runlight bittet dich, dich anzumelden, falls du es noch nicht bist, und dann, die Verbindung für die Website zu erlauben, die diese Domain zählt. Zählt noch keine Website sie, bietet es an, eine hinzuzufügen.
  4. Klicke auf Allow. Runlight schickt dich mit allen ausgefüllten Einstellungen zurück zu Craft, und der Eintrag Runlight im Control Panel zeigt die Zahlen dieser Website.

Beim Verbinden bekommt das Plugin zwei Schlüssel. Der Agenten-Schlüssel meldet KI-Agenten, die deine Seiten lesen, und er kann nur Abrufe für diese eine Website melden, also weder deine Statistiken lesen noch in eine andere Website schreiben. Der Dashboard-Schlüssel zeigt das Dashboard dieser Website im Control Panel an, nur lesend, behandle ihn also wie ein Passwort. Der Dashboard-Schlüssel erscheint in Runlight unter Einstellungen, API und KI, und wenn du ihn dort löschst, hört das Dashboard in Craft auf zu funktionieren.

Zum Verbinden muss das Control Panel über HTTPS laufen oder, solange du etwas ausprobierst, auf localhost, weil Runlight Leute nur an solche Adressen zurückschickt. In einer App, in die Runlight eingebunden ist, muss die Website schon in hostnames stehen (siehe Konfiguration), weil die Websites dort im Code festgelegt werden.

Beim Verbinden werden die Schlüssel als RUNLIGHT_AGENTS_KEY und RUNLIGHT_DASHBOARD_KEY in die .env-Datei von Craft geschrieben und die Einstellungen als $RUNLIGHT_AGENTS_KEY und $RUNLIGHT_DASHBOARD_KEY gespeichert, sodass die Project Config nur die Variablen nennt und keinen Schlüssel enthält. Jede Umgebung setzt dann ihre eigenen. Lässt sich .env nicht schreiben, speichert Connect die Schlüssel direkt in den Einstellungen und erklärt, wie du sie verschiebst.

Die Einstellungen von Hand eintragen

Jede Einstellung im Plugin hat ihr Gegenstück in Runlight, unter Einstellungen, Einbinden im Abschnitt WordPress, Drupal und Craft, jeweils mit einem Button zum Kopieren. Kopiere Runlight-Adresse, Agenten-Schlüssel und Dashboard-Schlüssel in die Felder Runlight address, Agents key und Dashboard key und speichere, oder trag sie wie oben in .env ein. Runlight zeigt den Dashboard-Schlüssel nur einmal an, erstelle also einen neuen, wenn du ihn verlierst. Die Website-ID (im Plugin Site id) brauchst du nur, wenn dieses Runlight die Website nicht an ihrer Domain erkennen kann. Sobald die Seite geladen ist, prüft sie, ob die Adresse antwortet.

Jede Einstellung kann eine Umgebungsvariable nennen, etwa $RUNLIGHT_URL. Änderst du die Adresse, werden die Schlüssel gelöscht, die du für die alte gespeichert hast, damit ein Schlüssel nie an ein anderes Runlight gesendet wird. Gib sie für die neue Adresse erneut ein oder klicke auf Connect. Wie bei jedem Craft-Plugin kann jede Einstellung auch aus config/runlight.php kommen, und Werte dort haben Vorrang vor dem Control Panel.

php

<?php
return [
    'address' => 'https://stats.example.com',
    'observeKey' => '$RUNLIGHT_AGENTS_KEY',
    'dashboardKey' => '$RUNLIGHT_DASHBOARD_KEY',
];

E-Mail-Berichte

Läuft Runlight innerhalb von Craft, gehen seine E-Mail-Berichte und Test-E-Mails über den eigenen Mailer von Craft, wenn Settings, Email einen anderen Transport als Sendmail verwendet, etwa SMTP oder das Plugin eines Mail-Dienstes. Sie kommen von der System-E-Mail-Adresse und dem Absendernamen von Craft, und Einstellungen, E-Mail-Dienst im Dashboard sagt, welcher Transport sie verschickt. Mit Sendmail bittet dich das Dashboard, dort stattdessen einen Mail-Dienst einzurichten. Du kannst auch einen anderen Dienst wählen, während der Mailer von Craft eingerichtet ist, und später an derselben Stelle zum Mailer von Craft zurückkehren.

Das Dashboard im Control Panel

Mit Runlight innerhalb von Craft zeigt der Eintrag Runlight das ganze Dashboard im Control Panel, dasselbe wie unter /runlight, mit seinen Einstellungen, Zielen und Kurzlinks. Nur Seiten auf deiner eigenen Website dürfen es in einem Frame anzeigen. Wird das Control Panel also unter einer anderen Adresse ausgeliefert, festgelegt mit baseCpUrl, öffnet der Eintrag das Dashboard stattdessen in einem neuen Tab.

Mit einem Runlight anderswo und einem Dashboard-Schlüssel zeigt der Eintrag Runlight das Dashboard dieser Website im Control Panel, in derselben Nur-Lese-Ansicht, die ein Freigabelink zeigt, mit ihren Berichten und Zeiträumen und ohne Runlights Einstellungen, Kurzlinks, Personen oder andere Websites. Der Button Open in Runlight öffnet das vollständige Dashboard in deinem eigenen Runlight.

Die Adresse, unter der das Control Panel ausgeliefert wird, muss zu den Domains der Website in Runlight gehören, weil nur eine Admin-Seite auf einer davon das Dashboard anzeigen darf. Das Verbinden kümmert sich darum. Ein vorangestelltes www. macht keinen Unterschied.

Der Schlüssel erreicht nie den Browser der Dashboard-Seite. (Wörtlich eingetippt erscheint er allerdings im Einstellungsformular, das nur Admins sehen, deshalb ist eine Umgebungsvariable besser.) Jedes Mal, wenn ein Admin die Seite öffnet, schickt der Server des Plugins den Schlüssel und den Origin des Admins an Runlight und bekommt ein Ticket zurück, das das Dashboard einmal öffnet, innerhalb von fünf Minuten. Die Seite lädt das Dashboard von deinem Runlight in einem Frame, den nur dieser Admin anzeigen darf. Der Frame hält seine Sitzung eine Stunde lang in der Seite, ohne Cookies, deshalb zeigen auch Browser, die Cookies in Frames blockieren, ihn an. Ist die Stunde um, sagt der Frame das und lädt die Seite auf Wunsch neu. Wenn du den Schlüssel in Runlights Einstellungen, API und KI löschst, ist er sofort gestoppt, zusammen mit jeder offenen Sitzung. Nur Leute, die auf das Runlight-Plugin zugreifen dürfen, Admins eingeschlossen, sehen die Seite. Dein Runlight muss über HTTPS ausgeliefert werden, wenn das Control Panel es wird, sonst verweigert der Browser den Frame.

Statisches Caching

Statische Caches wie Blitz liefern Seiten aus, ohne Craft auszuführen, oder halten Craft an, bevor die Seite gesendet wird. Diese Seiten enthalten trotzdem das Skript, Besuche werden also gezählt. Eine Seite, die ein Nutzer des Control Panels ohne das Skript sieht, wird nie gecacht. Das Plugin sagt Blitz, dass es sie nicht cachen soll, und sendet Header, die andere Caches davon abhalten, sie zu speichern. Abrufe gecachter Seiten durch KI-Agenten werden nicht gemeldet, weil das Plugin nie die Gelegenheit bekommt, sie zu sehen.