Magento: Standard Weiterleitung mit 302 ändern zu einer 301 Weiterleitung (SEO)
Magento leitet interne Links per 302-Status-Code weiter. Das ist in Bezug auf Suchmaschinenoptimierung nicht gerade optimal, besser wäre eine 301-Weiterleitung.
Um das zu ändern sollte beim Aufruf der Funktion „_redirect“ jeweils als zweiten Parameter der korrekte Status-code „301“ mit gegeben werden, da ansonsten der Default-Parameter „302“ verwendet wird.
Siehe: /app/code/core/Mage/Core/Controller/Response/Http.php :
/** * Additionally check for session messages in several domains case * * @param string $url * @param int $code * @return Mage_Core_Controller_Response_Http */ public function setRedirect($url, $code = 302) { /** * Use single transport object instance */ if (self::$_transportObject === null) { self::$_transportObject = new Varien_Object; } self::$_transportObject->setUrl($url); self::$_transportObject->setCode($code); Mage::dispatchEvent('controller_response_redirect', array('response' => $this, 'transport' => self::$_transportObject)); return parent::setRedirect(self::$_transportObject->getUrl(), self::$_transportObject->getCode()); }
Um das über ein Magento-Event zu lösen, geht wie folgt vor:
Erstellt ein neues Module und erweitert die config.xml mit folgendem xml-snippet, z.B. in der /app/code/local/Neuesmodul/Cms/etc/config.xml
<global> <events> <cms_controller_router_match_before> <observers> <Neuesmodul_Cms_observer_cmsControllerRouterMatchBefore> <type>singleton</type> <class>neuesmodul_cms/observer</class> <method> cmsControllerRouterMatchBefore </method> </Neuesmodul_Cms_observer_cmsControllerRouterMatchBefore> </observers> </cms_controller_router_match_before> </events> </global>
in /app/code/local/Neuesmodul/Cms/Model/Observer.php fügt ihr die folgende Funktion ein:
/* * set 301-Http-Response-Code for redirection */ public function cmsControllerRouterMatchBefore(Varien_Event_Observer $observer) { $condition = $observer->getEvent()->getCondition(); if ($condition->getRedirectUrl()) { Mage::app()->getFrontController()->getResponse() ->setRedirect($condition->getRedirectUrl(), 301) ->sendResponse() ->setDispatched(true); } }
Alternativ-Funktion
/* * set 301-Http-Response-Code for redirection */ public function cmsControllerRouterMatchBefore(Varien_Event_Observer $observer) { $condition = $observer->getEvent()->getCondition(); if ($condition->getIdentifier()) { Mage::app()->getFrontController()->getResponse() ->setRedirect('/', 301) ->sendResponse() ->setDispatched(true); die(); } }