Tipps und Tricks zu Perl und CPAN-Modulen

Google Webmaster-Tools: Links zusammenfassen

Beitrag von Uwe am 12.03.2007 um 13:15 Uhr | 0 Kommentare

Web-Crawl-Fehler

Ich habe mein Perl-Blog bei Google Webmaster-Tools angemeldet. Neben Web-Crawl-Fehlern erfahre ich dabei auch, unter welchen Suchbegriffen meine Seite gelistet wird und wer einen Link auf meine Seite gesetzt hat.

Externe Links

Doch gerade diese Übersicht der externen Links enthält viele Duplikate. Bei mir sind dies über 180 Links von der CPAN Autorenliste (es gibt über 200 CPAN-Mirror). Aber auch andere Blogs verlinken mehrfach auf meine Seite, vor allem wenn meine Seite in der Blogroll enthalten ist und der Link damit auf jeder Seite auftaucht.

Google exportiert auf Wunsch alle Links als CSV-Datei. Mit nachfolgendem Programm kann ich die Liste etwas übersichtlicher machen:

#!/usr/bin/perl

use warnings;
use strict;

use Data::Dump qw(dump);
use Text::xSV;


my $file = $ARGV[0] || 'links.csv';

my %rules = (qr/00whois\.(ht|x)ml/ => 'cpan',
            );


my $csv = Text::xSV->new;
$csv->open_file($file);
$csv->read_header;

# alle Zeilen einlesen
my %links = ();
my %tags  = ();
while (my $row = $csv->fetchrow_hash) {
    my $link = $row->{Links};

    # passt eine Regel?
    my $match = 0;
    while (my ($regex, $tag) = each %rules) {
        if ($link =~ $regex) {
            $tags{$tag}++;
            $match++;
        }
    }

    $links{$link}++ unless $match;
}

# verbleibende Links vereinigen
my $last = '';
my @links = sort keys %links;
foreach my $link (@links) {
    if ($last and $link =~ /^\Q$last\E/) {
        # vereinigen
        $links{$last} += delete $links{$link};
    } else {
        $last = $link;
    }
}

print dump(\%tags, \%links);

Download: google-links-summary.pl

Das Skript bekommt als ersten Parameter den Namen der CSV-Datei übergeben (oder Ihr nennt die Datei links.csv). Im %rules-Hash können bestimmte Links über reguläre Ausdrücke getaggt werden. Wer nicht gerade CPAN-Autor ist, kann diese Zeile rauslöschen (es sollte dann my %rules = (); stehenbleiben).

Die Ausgabe ist noch etwas kümmerlich und das Programm unterscheidet auch zwischen http und https sowie Domainnamen mit und ohne www, aber vielleicht kann es Euch als Ausgangsbasis dienen.

Weiterhin ist es ein schönes Beispiel für Text::xSV. Mir gefällt an diesem Modul besonders der Hash-Zugriff auf die einzelnen Datenfelder, auch wenn ich in diesem Fall nur die Links-Spalte nutze.

Ich freue mich über Eure Kommentare und Anregungen.


Kommentar abgeben