23. Februar 2010 / PHP, WordPress
PHP-Script: Alte WordPress-Trackbacks auf Gültigkeit prüfen
Trackbacks in WordPress-Blogs verjähren mit der Zeit: Vielzahl der Quellen geht offline. Das PHP-Skript prüft sie auf Gültigkeit.
Mit Pingbacks und Trackbacks stehen Autoren zwei äußerst praktische Mechanismen zur Verfügung, welche die Kommunikation zwischen den Blogs übernehmen und für automatische Benachrichtigungen über eingehende Links sorgen. Thematische Verweise zum Artikel, auch Backlinks genannt, steigern die Popularität einer Seite und sind nur von Vorteil (zumindest auf den ersten Blick) – je mehr von der Sorte, desto besser.
Schneller weg als man denkt
In der Regel werden eingetroffene Trackbacks mit einem Link zur Quelle versehen und als Kommentar – bestenfalls separiert – dargestellt. Soweit nichts Neues an der Materie.
Die aus der Praxis gewonnene Erkenntnis zeigt, dass Artikel mit gesetzten Pingbacks nicht selten über eine sehr kurze Lebensdauer verfügen und im Laufe der Zeit oft und gern offline gehen. Mögliche Gründe dafür: Blog eingestellt, Domain gewechselt, Artikelseiten entfernt etc. Die Folge: Man linkt im Kommentarbereich auf eine Blogseite, die es aktuell gar nicht mehr gibt. Nicht wirklich schön und ruft jeden passionierten Blogger zu Taten auf.

Referenzseiten landen im Nirvana
Miese Techniken: Redirects auf Schrott
Unangenehm dreist wird es, wenn scheinbar freundlich und gut gemeinte Referenzseiten mit funktionierenden Pingbacks plötzlich (meist nach einem Zeitfenster von 3 – 4 Monaten) auf Projekte mit pornographischen Inhalten umgeleitet werden, so dass man als normalsterblicher Blogger unbewusst auf nackte Tatsachen verweist, ohne davon jegliche Kenntnis zu nehmen. Auch Google sieht es nicht gern, wenn eine solide Blogseite mit unseriösen Angeboten verknüpft ist – Zack, Ranking runter. Da muss sich also etwas ändern!
Kontrolle der existenten Blogverknüpfungen
Nachfolgend stellt sich ein ausführbares PHP-Skript als eine der tauglichen Lösungen vor: Der Code untersucht die in der Datenbank aufbewahrten Trackbacks auf ihre momentane Erreichbarkeit und fahndet im eingelesenen Artikeltext nach dem Link zum Blog. Auf diese Weise können nicht nur “Leichen”, sondern auch “Betrüger” (= haben den Link zum Blog entfernt oder die Seite umgeleitet) im Nu ausfindig gemacht und aus dem Blog manuell entfernt werden.
Beobachtungen bestätigen: Bei circa 500 Pingbacks innerhalb eines Blogs sind alle 6 Monate grob überschlagen 5 – 7 % davon nicht mehr brauchbar, weil nicht existent.
Funktionsweise im Schnelldurchlauf
Um an die Auswahl der Pings (= Trackbacks und Pingbacks) heranzukommen, generiert ein SQL-Kommando die Liste mit URLs der Quellen, die wiederum vom Script nach und nach zwecks Check angesteuert werden. Verdächtige Adressen werden eingeblendet, entsprechende Trackbacks können z.B. im Backend in der Kommentaransicht mithilfe der internen (Kommentar-)Suche lokalisiert und bei Bedarf eliminiert werden.
1. Schritt: DB-Export als CSV
Zunächst gehören die Ursprungsadressen der Pings in Form von alleinigen URLs als lesbare Liste exportiert – sie wird später vom Skript eingelesen. Ein SQL-Befehl gibt den gewünschten Datensatz aus, dieser gehört händisch exportiert. Für das geplante Vorhaben kann ein beliebiger SQL-Client wie das Online-Tool phpMyAdmin oder die Desktop-Anwendung Sequel Pro angewendet werden. Einen Export als CSV ohne gesonderte Anpassungen schafft nahezu jede SQL-Applikation.
SQL-Statement zur Ausgabe der Ping-URLs:
SELECT DISTINCT comment_author_url
FROM wp_comments
WHERE comment_type
IN('trackback','pingback')
Für alle Kommentartypen (Kommentare plus Pings):
SELECT DISTINCT comment_author_url FROM wp_comments
Hinweis zur Abfrage
Weicht der Tabellenname mit Kommentaren vom WordPress-Standard (wp_comments) ab, so ist dieser im Befehl zu korrigieren.

Export der ausgelesenen Daten im CSV-Format
2. Schritt: PHP-Code anpassen und speichern
Der nachstehende PHP-Code soll kopiert, im Editor eingefügt, in den beiden Zeilen nach dem ersten Kommentar (/* Zuweisung der Werte */) vervollständigt und abschließend als PHP-Datei, also mit der Endung .php, gespeichert werden.
Erläuterung der abzustimmenden Variablen:
- $import_file – Dateiname der erzeugten CSV-Datei
- $blog_url – Blog-Domain, nach der im Artikeltext gesucht wird
PHP-Quelltext der Minianwendung:
/* Zuweisung der Werte */
$import_file = 'customresult.csv';
$blog_url = 'playground.ebiene.de';
/* Import starten */
echo "Import läuft...n";
$lines = file($import_file);
/* Keine Daten? */
if (empty($lines)) {
die('No data');
}
/* URLs loopen */
foreach ($lines as $line) {
/* Zeile scannen */
preg_match('!"http://(.*)"!', $line, $matches);
/* Keine gültige URL */
if (empty($matches[1])) {
continue;
}
/* Gültige URL */
$url = 'http://' .$matches[1];
/* URL abrufen */
if (!$output = @file_get_contents($url)) {
echo 'Unereichbar: '. $url. "n";
}
/* Blog-URL suchen */
if (!preg_match('/' .preg_quote($blog_url). '/i', $output)) {
'Kein Link in: ' .$url. "n";
}
}
die('Fertig!');
3. Schritt: Ausführen
Vorab: Die angelegte PHP-Datei und der exportierte Datensatz im CSV-Format befinden sich am gleichen Ort, also physikalisch im identischen Ordner. PHP-File ist ausführbar, CSV lesbar.
Vor dem Start wird der Ordner auf eine unter PHP-laufende Umgebung transferiert: Das kann ein entfernter oder ein lokal eingerichteter Server sein. Eine Initialisierung via Bash bietet sich an. Ein heimischer Server hat den wesentlichen Vorteil, dass dort Ausführungszeiten des Codes bei Bedarf angepasst werden können – denn je nach Anzahl der zu prüfenden Links kann der zeitintensive Check schon eine Weile dauern. Da heißt es: Kaffee holen.
Kommt es bei der Analyse der Adressen also zum Stop oder Fehlerhinweis, so muss entweder die Execution Time nach oben oder die Menge der Einträge innerhalb der CSV-Liste nach unten korrigiert werden.
Das erreichte Resultat: Suspekte Trackback-Quellen kommen als Übersicht zum Vorschein und können – doppelt hält besser – nach manueller Kontrolle aus dem Blog entfernt werden. The job is done.
Fazit
Je nach Projektgröße kann die Prüfroutine alle 6 Monate wiederholt werden – für mehr “Sauberkeit” in WordPress.
Sergej Müller ist enthusiastischer Software Engineer mit Schwerpunkten Webentwicklung, Apps und WordPress. Seit 2007 programmiert und vertreibt er wpSEO, das zugkräftige SEO-Plugin für WordPress-Blogs.