Nicht vorhandene Seiten kommen bei Besuchern eines Blogs immer schlecht an, daher sollte man es vermeiden ältere Artikel einfach zu löschen und sie stattdessen beispielsweise auf neuere umleiten. Doch 404 Error’s schleichen sich immer irgendwann mal ein und man muss etwas gegen sie unternehmen und braucht daher auch einen Überblick. Dabei helfen beispielsweise die Google Webmaster Tools, doch bis eine Seite dort auftaucht können auch schon Wochen ins Land ziehen. Also wieso nicht eine direkte Email-Benachrichtigung beim Auftreten des Fehlers absenden?
Auf WP-Mix habe ich ein entsprechendes Script gefunden. Ihr müsst lediglich die Zeilen 8 bis 10 bearbeiten und dort eure Informationen angeben. Anschließend kopiert ihr den Code in die 404.php eures Themes. Setzt ihn einfach oberhalb des enthaltenen Codes ein. Sollte noch keine 404.php vorhanden sein, legt diese einfach an. Schreibt am besten noch einen kurzen Text dazu, dass die Seite nicht vorhanden ist. Nur damit der Besucher Bescheid weiß.
<?php // WP 404 ALERTS @ http://wp-mix.com/wordpress-404-email-alerts/ // set status header("HTTP/1.1 404 Not Found"); header("Status: 404 Not Found"); // site info $blog = get_bloginfo('name'); $site = get_bloginfo('url') . '/'; $email = get_bloginfo('admin_email'); // theme info if (!empty($_COOKIE["nkthemeswitch" . COOKIEHASH])) { $theme = clean($_COOKIE["nkthemeswitch" . COOKIEHASH]); } else { $theme_data = wp_get_theme(); $theme = clean($theme_data->Name); } // referrer if (isset($_SERVER['HTTP_REFERER'])) { $referer = clean($_SERVER['HTTP_REFERER']); } else { $referer = "undefined"; } // request URI if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER["HTTP_HOST"])) { $request = clean('http://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); } else { $request = "undefined"; } // query string if (isset($_SERVER['QUERY_STRING'])) { $string = clean($_SERVER['QUERY_STRING']); } else { $string = "undefined"; } // IP address if (isset($_SERVER['REMOTE_ADDR'])) { $address = clean($_SERVER['REMOTE_ADDR']); } else { $address = "undefined"; } // user agent if (isset($_SERVER['HTTP_USER_AGENT'])) { $agent = clean($_SERVER['HTTP_USER_AGENT']); } else { $agent = "undefined"; } // identity if (isset($_SERVER['REMOTE_IDENT'])) { $remote = clean($_SERVER['REMOTE_IDENT']); } else { $remote = "undefined"; } // log time $time = clean(date("F jS Y, h:ia", time())); // sanitize function clean($string) { $string = rtrim($string); $string = ltrim($string); $string = htmlentities($string, ENT_QUOTES); $string = str_replace("\n", "<br>", $string); if (get_magic_quotes_gpc()) { $string = stripslashes($string); } return $string; } $message = "TIME: " . $time . "\n" . "*404: " . $request . "\n" . "SITE: " . $site . "\n" . "THEME: " . $theme . "\n" . "REFERRER: " . $referer . "\n" . "QUERY STRING: " . $string . "\n" . "REMOTE ADDRESS: " . $address . "\n" . "REMOTE IDENTITY: " . $remote . "\n" . "USER AGENT: " . $agent . "\n\n\n"; mail($email, "404 Alert: " . $blog . " [" . $theme . "]", $message, "From: $email"); ?>
Solltest du die Email-Benachrichtigung wieder ausschalten wollen, brauchst du nicht zwingend den ganzen Code zu löschen, du kannst auch einfach die Zeile 83 auskommentieren, indem du „//“ davor setzt.
Sollte euch mein Tipp gefallen haben, würde ich mich über Social Shares und Kommentare freuen. 🙂