SEO optimierte 404-Fehler-Seiten in Magento – 404 error page in magento
Bei der Migration / Relaunch eines bestehenden Webshops zu Magento oder bei Änderungen der Link-Struktur, Kategorien, CMS, etc. innerhalb Magentos, kann es beim Aufruf alter ungültiger Links zu einer 404-Fehlerseite kommen. Das ist weder für die Besucher, noch aus SEO-Gesichtspunkten optimal. Jeglicher Link-Juice würde so abhanden kommen, mögliche Käufer verschreckt, die Conversion sinkt unnötig.
Standardgemäß wird in Magento die unter Admin-Backend unter „System > Konfiguration > Web > Standardseiten > CMS keine Route Seite“ definierte Seite aufgerufen, allerdings wird dann bei einem Aufruf einer ungültigen Seite/URL der Header Statuscode 404 ausgeliefert. Hierdurch geht der Link-Juice auf diese Seite verloren was sich negativ auf das Google-Rankings auswirkt.
Eleganter ist es meiner Meinung nach, alle nicht mehr vorhandenen Seiten direkt per 301-Redirect, entweder auf die ermittelte (Unter-)Kategorie-Übersichtsseite, notfalls auf die Startseite weiter zu leiten.
Aus diesem Grund ist es notwendig den Magento eigenen NoRoute-Controller durch ein eigenes Modul zu überschreiben.
Die Magento noRouteAction befindet sich in der Klasse /app/code/core/Mage/Cms/controllers/IndexController.php .
Diese Klasse erweitern wir durch ein eigenes Module unter app/code/local/Fly2marsmedia/Redirect
Im Ordner „Redirect“ wird das Verzeichnis „etc“ und „controllers“ angelegt. Im Ordner „etc“ legt ihr die Datei config.xml an mit dem folgenden Inhalt:
<?xml version="1.0"?> <config> <modules> <Fly2marsmedia_Cms> <version>0.0.1</version> </Fly2marsmedia_Cms> </modules> <frontend> <routers> <fly2marsmedia_cms> <use>standard</use> <args> <module>Fly2marsmedia_Cms</module> <frontName>redirect</frontName> </args> </fly2marsmedia_cms> <cms> <args> <modules> <Fly2marsmedia_Cms before="Mage_Cms">Fly2marsmedia_Cms</Fly2marsmedia_Cms> </modules> </args> </cms> </routers> </frontend> </config>
Anschließend legt ihr im Ordner /controllers die Datei IndexController.php mit folgendem Inhalt ab:
class Fly2marsmedia_Cms_IndexController extends Mage_Cms_IndexController { public function noRouteAction($coreRoute = null) { $path = '/'; $targetUrl = Mage::getUrl($path); if($targetUrl != '') { Mage::app()->getFrontController() ->getResponse() ->setRedirect($targetUrl, 301) ->sendResponse(); exit(); } return $this; } }
Final muss das Module noch aktiviert werden. Dazu im Ordner /app/etc/modules eine Datei Namens Fly2marsmedia_Redirect.xml mit folgendem Inhalt ablegen:
<?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Fly2marsmedia_Template> <active>true</active> <codePool>local</codePool> </Fly2marsmedia_Template> </modules> </config>