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();
}
}


2 Comments