Pergunta

Meu site antigo tinha dezenas de milhares de produtos não validos mais longos com URLs como http://example.com?product_id=123456.

Eles são todos indexados em mecanismos de pesquisa e agora resolvem para 404 no Magento.Não posso criar um redirecionamento para cada um deles.

Como faço para que eles acessem minha página inicial?

Foi útil?

Solução

Neste caso, você pode usar evento/observador e no evento controller_front_init_before demitir um observador.

Primeiro eu acho que seu ID de produto antigo e o novo ID de produto são iguais.

Naquilo observer check query string($_SERVER['QUERY_STRING']) content

?product_id=produtoID padrão in url então básico disso redirect to current system product url.

Exemplo:

Suponha,

URL do produto do sistema antigo: http://example.com?product_id=123456

URL do novo produto do sistema: http://example.com/abx.html

meu código será redirecionado http://example.com?product_id=123456 para http://example.com/abx.html usando o redirecionamento 301.

Redirecionamento 301, você resolverá o problema de SEO.

Aqui está o código config.xml:

 <global>
    <models>
      <magento67130>
        <class>StackExchange_Magento67130_Model</class>
        <resourceModel>magento67130_mysql4</resourceModel>
      </magento67130>
    </models>
    <events>
      <controller_front_init_routers> <!-- identifier of the event we want to catch -->
        <observers>
          <controller_front_init_before_handler> <!-- identifier of the event handler -->
            <type>model</type> <!-- class method call type; valid are model, object and singleton -->
            <class>magento67130/observer</class> <!-- observers class alias -->
            <method>redirectionProduct</method>  <!-- observer's method to be called -->
          </controller_front_init_before_handler>
        </observers>
      </controller_front_init_routers>
    </events>
  </global>

O código Observer.php está abaixo:

<?php
class StackExchange_Magento67130_Model_Observer
{

    public function redirectionProduct(Varien_Event_Observer $observer)
    {
        return;
        if($this->_getQueryString()){
            print_r($this->_getQueryString());

                // Check query string exits in product_id
            if(strpos($this->_getQueryString(),'product_id=')!== false){
                /* get Product ifd from query string */
                 $productid=str_replace('product_id=','',$this->_getQueryString());
                if(!empty($productid)):
                $product= Mage::getModel('catalog/product')->load($productid);
                 if ($product->getId()) {
                    echo $product->getProductUrl();
                     Mage::app()->getResponse()
                        ->setRedirect($product->getProductUrl(), 301)
                             ->sendResponse();

                             return;
                 }
                endif;
            }

        }
        //die();

    }
    /* Check here Request query string */
    protected function _getQueryString()
        {
            if (!empty($_SERVER['QUERY_STRING'])) {
                $queryParams = array();
                parse_str($_SERVER['QUERY_STRING'], $queryParams);
                $hasChanges = false;
                foreach ($queryParams as $key => $value) {
                    if (substr($key, 0, 3) === '___') {
                        unset($queryParams[$key]);
                        $hasChanges = true;
                    }
                }
                if ($hasChanges) {
                    return http_build_query($queryParams);
                } else {
                    return $_SERVER['QUERY_STRING'];
                }
            }
            return false;
        }
}

Outras dicas

you have to create one little custom extension to redirect if product is not found in your database

here i have given working solution and its perfect worked for me

How to forward all the 404 Magento pages to the front page?

hope this will also work for you.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top