Sempre mostre o URL completo, incluindo as categorias do produto


8

Para a nossa loja virtual Magento (1.7.0.2), estamos tentando otimizar a estrutura da URL. Já conseguimos melhorar algumas coisas, mas em uma delas não conseguimos. Queremos usar um URL completo (incluindo categorias) para todos os nossos produtos. Por exemplo:

  • www.website.com/products/best-products/product
  • ou: www.website.com/products/best-products para uma página de categoria

Isso funciona bem ao navegar pelas categorias e usar as trilhas de navegação, mas não ao pesquisar. Em seguida, sempre usa www.website.com/product como URL, provavelmente porque um produto pode estar em várias categorias e não sabe qual categoria usar nos resultados da pesquisa.

Existe uma maneira de forçar isso? Para fazê-lo de alguma forma usar a categoria "primeiro", ou até mesmo usar alguma categoria padrão que você possa escolher? Sou desenvolvedor, por isso estou disposto a fazer alterações no código, mas apenas se não houver outra / mais confiável. Quaisquer dicas ou truques são bem-vindos, muito obrigado antecipadamente!

Respostas:


4

O que você quer não pode ser alcançado - afaik.

O problema é que o magento é planejado com "produto em várias categorias". O problema agora é que o magento não prefere nenhuma categoria e, em vez disso, não mostra nenhuma categoria.

As categorias são usadas. Quando você clica nas categorias, este é o único local (afaik) em que as categorias são reescritas.

Mas acho que você pode conseguir o que deseja, invadindo um pouco o sistema de reescrita e apenas certifique-se de carregar uma reescrita de categoria e não a de todas as categorias.

O próximo problema, então, é que você precisa ter certeza de que o Google ainda recebe sempre o mesmo URL canônico ou você terá um problema com conteúdo duplicado ...

E a última coisa que tenho em mente: não tenho certeza, se é uma boa ideia do ponto de vista do SEO. Não sou especialista em SEO, mas alguém me disse que quanto menor a URL, melhor ...


1

O URL do produto é impresso em:
Mage_Catalog_Model_Product::getProductUrl
esse método está verificando se o URL deve incluir a categoria usandoMage::registry('current_category')

Mas as coleções normalmente carregam as URLs reescritas em uma consulta exclusiva (método de verificação Mage_Catalog_Model_Resource_Product_Collection::addUrlRewrite($categoryId = ''))
E depois Mage_Catalog_Model_Product::getProductUrlusam esse 'request_path "dos dados do produto $.

Portanto, um possível truque pode ser algo assim:

        // if we are in search results
    if( ! Mage::registry('current_category')){
        $myDesiredCategoryId = current($product->getCategoryIds()); // you could just use the first category registered with this product or define some other strategy
        $canonicalCategory = Mage::getModel('catalog/category')->load($myDesiredCategoryId);
        Mage::register('current_category', $canonicalCategory);
        $product->setRequestPath(null);
        $productUrlWithCategory = $product->getUrlModel()->getUrl($product);
        Mage::unregister('current_category');
    }

Essa não é a maneira mais rápida (agora, todos os produtos da sua coleção precisam carregar a reescrita do URL em uma consulta separada), mas talvez seja a mais fácil se você estiver procurando uma solução rápida


0

com Magento 2. Temos esta opção no back-end, onde você pode configurar em vez de modificar o roteamento de URL


-1

Estou bastante certo de que o que você precisa pode ser alcançado pela configuração do sistema Use Categories Path For Product URLs. Isso pode ser encontrado em System->Configuration->Catalog->Catalog->Search Engin Optimization. Depois de definir isso, acho que você precisará reindexar.

Espero que isto ajude.


Não, essa configuração funcionará apenas se a categoria atual estiver definida (portanto, se você estiver abrindo o produto a partir de uma página de categoria).
30516 Simon
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.