Seite 1 von 1

Auf 404-Seite Weiterleiten wenn Artikel nicht gefunden

Verfasst: 15.12.2011, 18:53
von kaffeekapsel
Guten Abend,

ich bin grade an meinem ersten Webprojekt und habe eine Frage bzgl. der 404-Fehlerseite. Ich möchte, wenn eine Url nicht gefunden wird, auf eine "intelligente" 404-Fehlerseite umleiten. Die "defekte" Url wird via GET übergeben und auf der fehler.php werden passende Artikel ausgeben, welche dem Besucher weiterhelfen könnten.

Beispiel zum Verständnis:

Code: Alles auswählen

example.com/preise.html [OK - artikel.php?url=preise ausgeben]
example.com/erstattungen.html [OK - artikel.php?url=erstattungen ausgeben]
example.com/angebot.html [FEHLER - artikel.php?url=angebot nicht gefunden]
Sollte der Fehler auftreten möchte ich in meiner artikel.php folgendes machen:

Code: Alles auswählen

header("HTTP/1.1 404 Not Found");
header("Location: fehler.php?url=".$_GET[url]);
Meine konkrete Frage:
Ist dies nun für Google als eine echte 404-Fehlerseite erkennbar oder einfach eine Seite, welche irgendwann als DC (-> Da über mehrere Urls die fehler.php erreicht wird) gewertet wird?
Das Ursprungsproblem ist, ich leite per mod_rewrite alle [url].html an die artikel.php weiter (-> und die existiert ja, daher kein 404).

Ich hoffe ihr habt mein problem verstanden und könnt mir auf die Sprünge helfen.

Grüße aus Hessen,
Kaffeekapsel

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 15.12.2011, 22:14
von Hirnhamster
Lass das Location weg - ist meines Wissens sowieso nur bei 3xx Status Codes angebracht. Gib auf der Fehlerseite einfach einen Hinweis aus, dass der entsprechende Link fehlerhaft war aber du auf Grund der URL einen möglicherweise passenden Ersatz gefunden hast.

Macht sowohl aus Usability als auch aus SEO Sicht mehr Sinn.

Verfasst: 16.12.2011, 09:43
von kaffeekapsel
Ich hab nun gemerkt das mein "header('HTTP/1.1 404')" garnicht funktioniert. Er gibt mir trotzdem einen 200 in den Header, daher werde ich ohne Location auch nicht auf fehler.php weitergeleitet.

Wenn ich also nur den header Befehl 404 einsetzte passiert nichts.

Wo ist mein Fehler?

edit und Lösung:
Nach knapp 2 Stunden Googlen bin ich am Ziel.
Die Weiterleitung nach dem 404 klappt nicht, weil eine Weiterleitung nur nach den Codes "30x" passieren darf. Wenn ich an den header 404 sende und danach ein Location zur fehler.php wird mein header 404 ignoriert und auf einen 302 "umgeschrieben". (Ohne das ich das möchte).

Achso, 404 header alleine reicht nicht, dadurch wird nicht automatisch auf die fehler.php weitergeleitet, auch wenn laut mod_rewrite dies so gewünscht ist.

Die Lösung lautet daher, wenn es interessiert:

Code: Alles auswählen

if (mysql_num_rows($ergebnis) === 0)
{
	header("HTTP/1.1 404 Not Found");
	require_once("fehler.php");
	exit;
}

    
//... fetchen von $ergebnis und Verarbeitung
Mit freundlichen Grüßen,
kaffeekapsel

PS: Danke an Hirnhamster, war richtig was du gesagt hast, wollte aber noch bisschen nachforschen :-)