404 – Error Reporting in WordPress

404 Fehler auf Websites sind immer unschön, doch was tun wenn doch mal so ein Fehler auftritt. Ganz einfach: WordPress bietet entweder eine Datei, die auf den Namen 404.php hört oder alternativ einen „else“ zweig in den Theme Dateien, welcher genutzt wird sobald die gesuchte Seite nicht verfügbar ist.

Der unterschied zwischen beiden Varianten liegt darin ob man die „Permalink-Struktur“ angepasst hat. Sollte dies der Fall sein, wird die 404.php genutzt. Wenn aber die Seiten ID’s benutzt werden, wird der „else“ Zweig innerhalb der Theme Dateien single.php, index.php und page.php für das error Reporting verwendet. Für beide Varianten stell ich nun eine Funktion vor, um eine E-Mail zu versenden wenn so ein Fehler auftritt. Natürlich kann die Funktion selbst auch für andere Projekte genutzt werden, aber ich beschreibe das ganze etwas vereinfacht für WordPress.

404.php Variante

permalinksDamit die 404.php Datei genutzt wird muss die Permalink Struktur angepasst werden. Das geschieht im WordPress Adminbereich unter Einstellungen -> Permalinks und hat den Vorteil, das die Page-ID’s in schöne, lesbare URLs umgeschrieben werden. Google und weitere Suchmaschinen legen viel wert auf eine gute Linkstruktur und deshalb dienen die Permalinks auch zur Suchmaschinenoptimierung.

Nun kommen wir zur eigentlichen Funktion. Die Datei 404.php muss im Theme Ordner liegen und natürlich die nötigen Funktionen beinhalten, welche jedes Theme benötigt. Im Normalfall sollte der Aufbau ungefähr so aussehen:

404.php

<?php
    get_header();
    get_sidebar();
    get_footer();
?>

Damit werden die Dateien header.php, sidebar.php und footer.php eingebunden – soweit sollte aber jeder, der schonmal ein WordPress Theme gemacht hat selber kommen. Desweiteren wird natürlich ein Ausgabetext benötigt damit dem User sichtbar gemacht wird, das die Seite nicht verfügbar ist.

404.php

<?php
    get_header();
    get_sidebar();
?>
    <div class='post'>
        <h2>404 - Die Seite wurde nicht gefunden</h2>
        <div class='entry'>Die gesuchte Seite ist leider nicht auffindbar, bitte versuch es mit einer anderen!</div>
    </div>
<?php
    get_footer();
?>

Dem User wird eine Fehlermeldung ausgegeben, dass die gesuchte Seite nicht verfügbar ist. Erweitert werden kann dies unter anderem durch ein Suchfeld oder aber auch ein Verweis auf eine Sitemap. Um nun ein error Reporting zu erstellen und per Mail zu verschicken benötigen wir folgende Funktion:

functions.php

<?php
function 404_reporting(){
	$send_to = "andre@chukki.de"; // diese Zeile mit der eigene E-Mail Adresse füllen
	$from    = "Chukki.de"; // URL des Blogs ohne http://www.
	$header  = "MIME-Version: 1.0 \r\n";
	$header .= "Content-type: text/html; charset=utf-8 \r\n";
	$header .= "From:". $from ." Administrator <info@". $from ."> \r\n";
	$ip = getenv ("REMOTE_ADDR"); // IP Adresse des Besuchers
	$server = getenv("SERVER_NAME"); // Seiten URL
  	$uri = getenv("REQUEST_URI"); // Angeforderte URL
	$referer = getenv("HTTP_REFERER"); // Von welcher Website der User gekommen um evtl. Verlinkungsfehler zu finden
	$agent = getenv("HTTP_USER_AGENT"); // Browser- bzw. Renderingversion
	$date = date("D M j Y g:i:s a T"); // Zeitstempel
	$message = "404 - Eine Seite nicht gefunden werden".
	"\n<br />----------------------------------------------------------------------".
	"\n<br /><strong>Datum:</strong> ".$date.
	"\n<br /><strong>User IP:</strong> ".$ip.
	"\n<br /><strong>Fehler Seite:</strong> http://".$server.$uri.
	"\n<br /><strong>Referer:</strong> ".$referer.
	"\n<br /><strong>User Agent:</strong> ".$agent;
	mail($send_to,"[".$from."] - 404 Error", $message, $header); // Versand der Mail mit allen Informationen
}
?>

Dieser Code muss in die functions.php geschrieben oder kopiert werden – diese liegt ebenfalls im Theme Ordner. Geändert werden müssen nur die ersten zwei Zeilen, welche angeben wohin die Mail verschickt werden soll und unter welcher URL der Website läuft.

Um die 404.php abschliessend zu komplettieren muss die Funktion noch eingefügt werden. Das sieht dann folgendermaßen aus:

404.php

<?php
    get_header();
    get_sidebar();
?>
    <div class='post'>
        <h2>404 - Die Seite wurde nicht gefunden</h2>
         <div class='entry'>Die gesuchte Seite ist leider nicht auffindbar, bitte versuch es mit einer anderen!</div>
             <?php 404_reporting(); ?>
         </div>
<?php
	get_footer();
?>

Else Variante

Sollte der Fall eintreten das man die Variante mit der Page-ID nutzt, kann die gleiche Funktion genutzt werden. Nur anstatt einer 404.php nutzen wir die single.php, index.php und page.php.
Hierfür muss auch wieder der Grundaufbau geleistet werden – ich zeige das anhand der index.php

index.php

<?php
    get_header();
    get_sidebar();
    if(have_posts()): while(have_posts()):the_post();
?>
    <div class='post'>
        <h2><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>
        <div class='entry'><?php the_content(); ?></div>
    </div>
<?php
    endwhile; endif;
    get_footer();
?>

Damit haben wir den Grundaufbau geleistet… mit der while-Schleife werden die Beiträge – sofern vorhanden – angezeigt und die Überschrift verlinkt. Um auch hier das error Reporting zu aktivieren muss die Funktion, welche wir oben geschrieben haben in dem „Else“ Teil der Abfrage „if(have_posts())„.

index.php

<?php
    get_header();
    get_sidebar();
    if(have_posts()): while(have_posts()):the_post();
?>
    <div class='post'>
        <h2><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>
        <div class='entry'><?php the_content(); ?></div>
    </div>
<?php
    endwhile; else:
        404_reporting();
    endif;
    get_footer();
?>

Eigentlich ziemlich einfach, aber sehr effektiv – jedes mal wenn nun eine Seite nicht gefunden wird, bekommen wir eine E-Mail mit den wichtigsten Daten zugeschickt. Mit dieser Mail kann man entscheiden, ob es sich um einen Eingabefehler handelt oder ob irgendwo eine fehlerhafte Verlinkung vorhanden ist.

Das Ergebnis:

mail

Andre Teich

arbeitet als Webentwickler und Webdesigner bei der Firma Tintometer in Dortmund. Die Fachgebiete sind die Webentwicklung mit PHP, JavaScript, MySQL, CSS und die Designarbeiten mit der Adobe Creative Suite.

2 Kommentare zu "404 – Error Reporting in WordPress"

Crazy Girls Tipps

Viele seltsame 404 Seiten – Spam, Hacking, Virus oder was könnte das sein?…

In den letzten Tagen ist mir aufgefallen, dass vermehrt viele seltsame 404 Seiten auf meinen WordPress Systemen produziert werden. Teilweise laufen an einem Tag 100 bis 200 404 Fehlerseiten auf, die aus den verschiedensten Quellen produziert werden, di…

Viele seltsame 404 Seiten – Spam, Hacking, Virus oder was könnte das sein? | Crazy Girls Tipps

[…] habe ich bei André einen interessanten Artikel gefunden: 404 – Error Reporting in WordPress, und mir die eMail Lösung daraus auf meinem Blog vorübergehend installiert. So erhalte ich […]

Kommentar schreiben