Logging für externe LinksKlicks zählen
Ohne Auswertung: Externe Links
Logging für externe Links
Ausgehende Links stellen eine der größten Lücken in den Server-Logs dar: Sie werden schlicht nicht erfasst. Referrer sind im HTTP-Protokoll fest eingebaut, aber wohin die Besucher der eigenen Seiten verschwinden, liegt für viele Webmaster im Dunkeln.
Das Problem: Wenn ein externer Link angeklickt wird, bekommt der Server davon normalerweise gar nichts mit. Wieso sollte er auch? Mit seinem Mausklick fordert der Benutzer eine neue Seite an. Die Adresse der Seite ist im Quelltext des Links hinterlegt. Der Browser braucht den Server der ursprünglichen Seite also nicht zu belästigen, sondern kann gleich den neuen Server ansteuern. Damit sind externe Links aber zunächst der Auswertung durch den Webmaster entzogen.
Dabei ist die Information, wohin die Benutzer beim Verlassen seiner Seiten klicken, für den Webmaster höchst interessant. Dass sie fehlt, ärgert besonders Webmaster, die mit ihren Hyperlinks Geld verdienen, zum Beispiel als Teilnehmer an einem Affiliate-Programm oder mit Werbebannern. Sie haben keinerlei Kontrolle, ob der Affiliate- oder Banner-Anbieter korrekt abrechnet. Sie müssen ihm blind vertrauen – oder die Links mit Skripts selbst kontrollieren.
Umleitung mit PHP
Logging für externe Links
Klicks auf ausgehende Links lassen sich auf zwei Arten protokollieren. Die beliebteste, die auch als Modul in vielen CMS integriert ist, leitet alle Links über ein PHP-Skript um. Das zeichnet auf, wohin der Benutzer will, bevor es ihn dorthin entlässt. Solche Links hat jeder schon einmal gesehen. Statt
http://internet-professionell.de
steht da zum Beispiel:
http://it-journalist.de/links.php?url=http://internet-professionell.de
Hin und wieder hört man Bedenken, dass solche Links von Suchmaschinen-Robotern nicht ausgewertet werden können. Versuche mit Google haben aber gezeigt, dass Links über PHP-Ausgangsseiten zumindest für den Googlebot kein Problem darstellen.
Counter mit Javascript
Logging für externe Links
Wer seine Links trotzdem lieber ohne Umleitung im Quelltext sehen möchte, kann den Link selbst lassen wie er ist und den Counter mit Javascript aufrufen. Das kann etwa so aussehen:
Damit öffnet sich der eigentliche Link ganz normal im aktuellen Browser-Fenster. Das Zähl-Skript wird parallel dazu in einem Popup geöffnet. Damit dieses sich sofort wieder schließt, enthält es ein kurzes Skript:
self.close();
So wird der ursprüngliche Link erhalten. Das hat aber den Nachteil, dass nun Popup-Blocker ausgelöst werden. Welche Variante günstiger ist, hängt von der Zielgruppe ab. Das Zähl-Skript selbst ist in PHP geschrieben und speichert die Links und Counter in einer Datenbank.
Speichern in Textdatei
Logging für externe Links
Alternativ dazu können Sie die Link-Zugriffe in einer Textdatei speichern. Wenn diese sich an ein gängiges Log-Format hält, kann sie mit Log-Analyzern ausgewertet werden. Wenn Sie sich für die Datenbank-Variante entscheiden, erzeugen Sie eine MySQL-Datenbank mit einer Tabelle namens linkcount. Diese enthält zwei Spalten, eine alphanumerische namens link und eine Integer-Spalte für die Zähler. Zunächst muss das Skript prüfen, ob der Link schon in der Datenbank enthalten ist:
$sql = 'SELECT * FROM `linkcount` WHERE link="'.$link.'"';
$linkdrin = mysql_query($sql);
Wenn das Ergebnis dieser Abfrage leer ist, wird der Link eingefügt und der Zähler auf eins gesetzt.
if (mysql_num_rows($linkdrin) == 0) {
$sql='INSERT INTO 'linkcount'(link, counter) VALUES("'.$link.'", 1)';
$einfuegen = mysql_query($sql);
Ist das Ergebnis nicht leer, der Link also schon in der Datenbank, wird stattdessen der Zähler um eins erhöht:
} else {
$sql = 'UPDATE linkcount SET counter =counter+1 WHERE link="'.$link.'"';
$hochzaehlen = mysql_query($sql);
}
Und schließlich wird der Benutzer noch dahin geschickt, wo er eigentlich hin wollte:
header('Location: '.$link);
exit();
Damit diese Weiterleitung funktioniert, darf das PHP-Skript vorher keinerlei Ausgaben an den Browser schicken. Wer in einer Testphase Variablen mit echo oder var_dump überprüft, muss auf die Weiterleitung so lange verzichten.
Auswertung
Logging für externe Links
Wenn alle Seiten in PHP programmiert sind und die Link-Statistiken in einer zentralen MySQL-Datenbank gesammelt werden, können Sie dem Benutzer sogar anzeigen, wie oft ein Link schon angeklickt wurde, zum Beispiel so:
http://internet-professionell.de
Der Link wird dafür in zwei Teilen ausgegeben:
echo '
echo '" href="links.php?link='. $link.'">'. $link.'';
echo "\n";
Dazwischen wird die gleiche MySQL-Abfrage benutzt wie für den Counter, nur dass nicht gezählt wird, sondern lediglich eine Ausgabe erfolgt. Für den Fall, dass der Link noch nicht in der Datenbank ist, lautet die Ausgabe:
echo "Noch nicht angeklickt";
Im else-Block wird schließlich der Zähler für einen vorhandenen Link ausgegeben:
$zeile = mysql_fetch_row($linkdrin);
echo $zeile[1];
echo " mal angeklickt";