Webanalyse: Die Suche nach toten Links

20.02.2006
Web-Seiten entwickeln sich über die Jahre immer weiter. So ist es nicht weiter verwunderlich, dass Hyperlinks auf alten Seiten irgendwann nicht mehr stimmen. Für den Besucher ist das natürlich ärgerlich, aber es gibt praktische Tools, die nach toten Links suchen.

Je länger eine Site schon existiert und je mehr Content darauf eingestellt ist, desto mehr tote Links finden sich auch. Sei es ein externer Link auf eine Seite, dich nicht mehr existiert, oder ein interner auf einen Artikel, den man entweder gelöscht oder im Zuge einer Umstrukturierung verschoben hat.

Es ist aber sicherlich zu mühsam, eine komplette Site mit Ausprobieren und Durchklicken auf Herz und Nieren zu testen. Zu leicht übersieht man einen toten Link. Bei sehr großen Sites ist es wiederum nahezu unmöglich, alle Fehler manuell zu finden. Linux bietet einige Tools, die Ihnen dabei das Leben erleichtern.

Der Linkchecker KLinkStatus

Das Programm KLinkStatus finden Sie bei WHAX unter dem Menüpunkt „WHAX Tools – Enumeration – WWW – Link Checker“. Es ist ein grafischer Linkcheker, der es Ihnen ermöglicht, URLs nach dem Status der Links abzufragen. Darüber hinaus kann das Tool auch andere Dateien auf Verfügbarkeit überprüfen, da es die KIO von KDE nutzt. Das heißt, KLinkStatus könnte auch über fish Dateien via ssh auf einem entfernten Rechner checken.

Das Programm zu bedienen, ist denkbar einfach. Sie tippen eine URL ein, legen die Tiefe der rekursiven Suche fest und lassen das Programm seine Arbeit verrichten. Es sei nur erwähnt, dass bei zu großen Tiefenwerten und aktivierter Überprüfung externer Links die Suche extrem lange dauern kann.

KLinkStatus - Konfiguration

Per Default öffnet die Software fünf Netzwerkverbindungen simultan und ist auf einen Timeout von 35 Sekunden eingestellt. In den Einstellungen können Sie dies nach Belieben ändern, etwa wenn eine Site generell langsam antwortet.

Weiterhin gibt Ihnen das Konfigurationsmenü auch die Möglichkeit, andere Default-Werte für die Tiefe der rekursiven Suche und die Aktivierung der Überprüfung externer Links zu ändern. Im Unterpunkt Results dürfen Sie wählen, ob das Ergebnis in einer Baumstruktur oder in einer einfachen Anzeige dargestellt werden soll. Wobei der so genannte Treeview wesentlich übersichtlicher sein dürfte.

Das Tool list-urls

list-urls ist ein einfaches Python-Programm, das alle URLs einer Seite abfragt und diese dann auf den Bildschirm ausgibt. Allerdings ist es nicht in der Lage, Frames zu behandeln. Dennoch fristet dieses Helferlein durchaus ein berechtigtes Dasein. Es lässt sich ausgezeichnet in Scripts einbauen. Nehmen wir an, Sie möchten eine Nachricht erhalten, sobald sich auf einer bestimmten Seite ein Link ändert. Das ist mit ein bisschen Shell-Programmierung einfach zu erledigen. Fragen Sie eine Seite ab und lassen Sie diese in eine Datei schreiben.

./list-urls.py http://192.168.71.130 > url1.txt

Danach ändern Sie die zu testende Seite und führen dasselbe Procedere noch einmal durch, nur dass Sie die Datei anders benennen.

./list-urls.py http://192.168.71.130 > url2.txt

Ein weiteres Bordmittel von Linux hilft, den Unterschied der beiden Dateien herauszufinden.

diff url1.txt url2.txt

Ist keine Veränderung zu sehen, löscht zum Beispiel ein Script in einer if-Schleife die Datei url1.txt und benennt url2.txt in url1.txt um. Variieren die Dateien, können Sie sich zum Beispiel durch eine E-Mail informieren lassen, durch einen Automatismus einen Mirror anpassen und so weiter.

Kommandozeilen-Tool LinkChecker

Dieses sehr gute Tool ist leider nicht auf der WHAX-CD enthalten. Dennoch sollte es auf jeden Fall im Zusammenhang mit Webseiten-Analyse Erwähnung finden. Sie können das Programm auf der Seite http://linkchecker.sourceforge.net herunterladen.

Auch dieses Tool kann, wie KLinkStatus, sowohl lokale als auch entfernte URLs überprüfen. Dieses in Python geschriebene Programm ist in der Lage, Tausende von Links zu überprüfen, ohne mit der Wimper zu zucken. Die tecChannel-CD mit allen Artikeln der letzten fünf Jahre wurde unter anderem damit gecheckt.

Default-mäßig prüft LinkChecker interne Links rekursiv vom Startpunkt und jeden nach außen zeigenden Link. Das heißt, es dauert bei großen Webseiten unter Umständen sehr lange, bis das Programm fertig ist. Sie sollten sich daher einen Augenblick Zeit nehmen und den Parameter -r, der die Tiefe festlegt, in Betracht ziehen. Die Bedienung ist denkbar einfach.

linkchecker http://<zu überprüfende Webseite>/

Ausgabe des LinkChecker

Danach fängt der linkchecker an, eventuelle Fehler auf dem Bildschirm auszugeben.

Müssen Sie eine Seite mit sehr vielen Links überprüfen, macht es allerdings Sinn, die Ausgabe in eine Datei schreiben zu lassen. Das erreichen Sie entweder mit dem Parameter -F oder, wie unter Linux üblich, mit einer Umleitung.

linkchecker http://<zu überprüfende Webseite> > <Dateiname>

Das Tool gibt standardmäßig alles im Textformat aus. Mit dem Parameter -o haben Sie die Möglichkeit, den Output-Typus in zum Beispiel ein html-, sql-, csv- oder xml-Format zu ändern.

Schalter von LinkChecker

Nachstehend zeigen wir Ihnen die wichtigsten Schalter von LinkChecker im Überblick. Die volle Anleitung können Sie in den Manpages man linkchecker nachlesen.

Schalter

Funktion

-tzahl

Nicht mehr als zahl Threads erzeugen. Standardmäßig öffnet LinkChecker zehn Threads.

-w

Warnungen auch mit ausgeben

-v

Alle überprüften URLs ausgeben. Per Default gibt das Programm nur ungültige URLs aus. Die Funktion impliziert -w

-Wregex

Hier können Sie eine Regular Expression angeben. Sobald diese in einer der zu überprüfenden URLs gefunden wird, gibt das Tool eine Warnung aus.

-otype

Diese Option verändert den Ausgabetyp. Außer dem Default-Wert text sind folgende möglich: html, sql, csv, gml, xml, none oder blacklist.

-Ftype

Output-Datei festlegen. Diese Ausgabedatei heißt linkchecker-out.type. Hier sind dieselben Dateitypen wie bei dem Schalter –o möglich.

-rdepth

Tiefe der rekursiven Überprüfung festlegen.

-iregex

URLs, die dieser Regular Expression entsprechen, als interne Links behandeln.

-eregex

URLs, die dieser Regular Expression entsprechen, als externe Links behandeln. Nur interne HTML-Links werden rekursiv überprüft.

-uName

Username für http und ftp Authorisierung festlegen.

-pPasswort

Passwort für http- und ftp- Authorisierung festlegen.

--timeout=Sekunden

Timeout festlegen. Default-Wert ist 30 Sekunden.

Umgebungsvariablen für LinkChecker

Es soll noch angemerkt sein, dass Sie für LinkChecker folgende Umgebungsvariablen setzen können.

Umgebungsvariable

Wirkung

NNTP_Server

Spezifiziert den Standard-NNTP-Server

http_proxy

Spezifiziert den Standard-http-Proxy-Server

ftp_proxy

Spezifiziert den Standard-ftp-Proxy-Server

LC_MESSAGES, LANG

Spezifiziert die Default-Output-Sprache

Optimierungs-Skript für LinkChecker

Es gibt allerdings einen Punkt, der bei großen Seiten extrem stören kann. Das Programm gibt für jeden Fehler eine komplette Fehlermeldung aus. Darunter leidet eventuell die Übersicht gewaltig. Deswegen stellt tecChannel ein Perl-Script für Sie bereit, dass etwas Ordnung in die Sache bringt. Sie müssen lediglich bei dem Parameter my $file1 den richtigen Dateinamen eintragen und das Script mit

perl sort_linkchecker.pl

aufrufen. Sinnvoll ist es allerdings, wieder eine Umleitung in eine Datei anzuwenden. Danach steht jede Fehlermeldung nur noch ein einziges Mal in der Datei und darunter alle URLs, die diese Ungültigkeit enthalten. Dieses Script funktioniert allerdings nur mit Ausgaben im text-Format.

Listing

#!/usr/bin/perl

# written by Juergen Donauer

# no copyright on this script and also NO WARRANTY

# feel free to use and change it as you like

use strict;

my @sort_krit = ();

my @text_block = ();

my @exclude = ("Check Time", "Name", "Info");

my $file1 = "<Dateiname der Ergebnisdatei>";

my $sort_krit = "Result";

my $exclude = 0;

open (FILE1, "<$file1") or die "cannot open $file1!";

while (my $line = <FILE1>) {

chomp;

if ($line =~ /^($sort_krit)/) {

if (grep /^($line)$/, @sort_krit) {

}

else {

push (@sort_krit, $line);

}

}

}

close (FILE1);

foreach my $s (@sort_krit) {

print $s;

print "===============================================\n\n";

open (FILE1, "<$file1") or die "cannot open $file1!";

while (my $line = <FILE1>) {

chomp;

if ($line =~ /^[A-Z]/i) {

# foreach my $e (@exclude) {

# if ($line =~ /^($e)/) {$exclude = 1;}

# }

# if ($exclude == 0) {push (@text_block, $line);}

push (@text_block, $line);

if ($s eq $line) {

for (my $i=0;$i<@text_block-1;$i++) {

if ($text_block[$i] =~ /^($exclude[0]|$exclude[1]|$exclude[2])/) {}

else {print $text_block[$i];}

}

print "\n";

}

}

else {

@text_block = ();

$exclude = 0;

}

}

close (FILE1);

print "\n\n";

}

Fazit

KLinkStatus ist ein gutes grafisches Programm, um kleinere bis mittlere Seiten zu überprüfen. Übersichtlich und grafisch zeigt das Programm ungültige URLs. Damit sollte es ein Leichtes sein, seine Webseite sauber zu halten.

list-urls wirkt auf den ersten Blick spartanisch, vielleicht sogar nutzlos. Doch die Stärke dieses Tools liegt eindeutig im Zusammenhang mit anderen Scripts. Es tut immer wieder gut, solche Helferlein in eigene Programme einbinden zu können, ohne das Rad selbst neu erfinden zu müssen.

Das mit Abstand mächtigste Tool ist allerdings der LinkChecker. Dieses Programm lässt eigentlich keine Wünsche offen. Die Einsatzmöglichkeit der Regular Expressions ist besonders hervorzuheben. Nicht minder interessant ist es, den Typus des Outputfiles zu bestimmen. So kann man dieses Programm zum Beispiel auch in anderen Scripts unterbringen und den Output als CSV-Datei regelmäßig in eine Datenbank importieren. Die Grenzen dieses Tools unterliegen im Prinzip Ihrer Fantasie. (jdo/mha)