Migração & Legado

URL de produto quebrada depois de migrar do Magento 1? São 2 configs

Não é o Data Migration Tool que errou. Os dois padrões do Magento 2 são o inverso do que o Magento 1 usava, e ninguém avisa isso na documentação de migração.

Por Roger Takemiya · Publicado em · 5 min de leitura

Migração terminou, catálogo conferido, pedidos no lugar. Uma semana depois o cliente liga desesperado: o tráfego orgânico caiu pela metade e o Search Console está cheio de 404. Todo link de produto que o Google tinha indexado sumiu.

O que aconteceu é que a URL mudou de formato. Antes era /camisetas/camiseta-preta.html. Agora é /camiseta-preta.html. E o motivo está em duas linhas de configuração que o Magento 2 inverteu em relação ao Magento 1 — uma das armadilhas que eu detalho no guia de migração do Magento 1 para o Magento 2.

Ligando as duas opções

No admin, as duas ficam juntas em Stores > Configuration > Catalog > Catalog > Search Engine Optimization, com os nomes Use Categories Path for Product URLs e Generate "category/product" URL Rewrites. Repare que a segunda só aparece no escopo padrão, não dá para ligar por store view.

Pela CLI:

php bin/magento config:set catalog/seo/generate_category_product_rewrites 1
php bin/magento config:set catalog/seo/product_use_categories 1
php bin/magento cache:flush

Ligue a de gerar rewrites primeiro. E preste atenção no aviso que o próprio Magento coloca embaixo desse campo: desligar essa opção apaga os rewrites de categoria/produto de forma permanente, sem volta. Se você ficar experimentando liga e desliga, vai apagar o que acabou de gerar.

Regerar os rewrites que já deviam existir

Ligar a opção resolve dali para frente. O catálogo que já está no banco continua sem as linhas novas — o Magento só grava rewrite quando o produto é salvo.

Salvar 8 mil produtos na mão não é opção. O caminho prático é o módulo da Elgentos:

composer require elgentos/regenerate-catalog-urls
php bin/magento setup:upgrade
php bin/magento regenerate:product:url
php bin/magento regenerate:category:url

Os dois comandos aceitam -s para escolher a store view e uma lista de IDs no fim, se você quiser testar com pouca coisa antes de soltar no catálogo inteiro. Rode fora do horário de pico: em loja grande isso demora.

Uma opinião, já que estamos aqui. Se a loja é média e o SEO antigo não valia grande coisa, eu penso duas vezes antes de ligar o caminho de categoria só por nostalgia — ele multiplica a tabela url_rewrite por produto vezes categoria e cria URL duplicada para o mesmo produto. Em migração de loja com histórico de tráfego, porém, ligar e regerar é o caminho mais curto para não jogar fora anos de posicionamento.

Perguntas rápidas

Não seria melhor fazer 301 das URLs antigas para as novas?

É uma alternativa legítima, principalmente se o catálogo mudou muito na migração. Dá mais trabalho de montar o mapa de redirecionamento, mas deixa a tabela url_rewrite pequena e evita URL duplicada para o mesmo produto.

Depois de regerar, preciso reindexar alguma coisa?

Não existe indexador de url rewrite no Magento 2: os rewrites são gravados na hora, na tabela url_rewrite. O que precisa mesmo é limpar o cache de full page, senão a loja continua servindo a URL antiga. Se você mexeu em categoria, vale reindexar catalog_category_product também.

O sufixo .html some se eu mexer nessas configs?

Não. O sufixo é outro campo, o product_url_suffix, e ele vale .html tanto no Magento 1 quanto no Magento 2. Se o seu sufixo mudou, foi alguém que alterou na mão.

Pra conferir na fonte

  1. Magento 2.4.9 — Catalog etc/config.xml — GitHub
  2. Magento 2.4.9 — CatalogUrlRewrite etc/config.xml — GitHub
  3. OpenMage LTS v20.18.0 — Mage_Catalog etc/config.xml — GitHub
  4. elgentos/regenerate-catalog-urls — Packagist

migração url rewrite 404

Precisa de um orçamento? Ficarei feliz em ajudar. Clique Aqui