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.
Por que os links morreram
Compare o config.xml das duas gerações e a resposta aparece sozinha:
| Configuração | Magento 1 | Magento 2 |
|---|---|---|
catalog/seo/product_use_categories | 1 | 0 |
catalog/seo/generate_category_product_rewrites | não existia | 0 |
catalog/seo/product_url_suffix | .html | .html |
O sufixo é igual nos dois, então não é dele que vem a quebra. A quebra vem do caminho da categoria: no Magento 1 a loja saía de fábrica montando a URL do produto com a categoria na frente. No Magento 2, a opção equivalente vem desligada — e a segunda opção, que é quem de fato grava as linhas categoria/produto na tabela url_rewrite, também.
Resultado: as linhas nunca foram criadas. Não adianta procurar redirecionamento, não tem redirecionamento nenhum para procurar.
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:flushLigue 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:urlOs 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.