O produto está lá no grid do admin, salvo, com foto e preço. Na loja, nada. Nem na categoria, nem na busca, e a URL direta dá 404.
O reflexo de todo mundo é rodar reindex e limpar cache. Às vezes funciona. Na maior parte das vezes você espera vinte minutos para nada, porque o problema é um campo do formulário que ninguém marcou. Confira os cinco primeiro — leva um minuto.
Os cinco campos, nesta ordem
- Enable Product. É o botão no topo do formulário. Produto importado por planilha sai desligado com uma frequência que assusta.
- Visibility. Tem que estar em
Catalog, Search. Se estiver emNot Visible Individually, o produto existe mas não tem página própria — é o padrão de item que só serve como filho de configurável. ESearchsozinho faz ele aparecer na busca e sumir da categoria, o que confunde muita gente. - Stock Status. Precisa estar
In Stocke com quantidade maior que zero. Só quantidade não basta: o campo de status é separado. - Product in Websites. Fica numa seção retraída, lá embaixo do formulário. Loja com um site só normalmente já vem marcado; loja com dois, não. Produto sem site marcado não aparece em lugar nenhum.
- Categories. Sem categoria, o produto só existe na busca e na URL direta.
Se todos os cinco estão certos e o produto continua sumido, aí sim o assunto é índice e cache.
Só depois: reindex e cache
Não precisa reindexar tudo. Os índices que importam para esse sintoma são estes:
php bin/magento indexer:reindex catalog_category_product catalog_product_category catalog_product_price cataloginventory_stock catalogsearch_fulltext
php bin/magento cache:flushAntes de rodar, olhe o estado deles:
php bin/magento indexer:statusSe aparecer Reindex required em vários e o cron da loja está funcionando, o próprio Magento resolveria sozinho em um minuto. Se ficam inválidos para sempre, o problema real é o cron parado, e reindexar na mão só vai enxugar gelo.
O caso específico do produto configurável
Com produto configurável a conta é outra, e é a fonte número um de confusão em loja de roupa e de calçado.
Os filhos (cada tamanho, cada cor) devem ficar em Not Visible Individually. Está certo assim: ninguém quer uma página de produto para "Camiseta Preta Tamanho M". Quem precisa estar visível é o pai.
Só que o pai herda o estoque dos filhos. Se todos os tamanhos estiverem desabilitados ou fora de estoque, o configurável some da vitrine mesmo estando habilitado e com categoria certa. Antes de mexer no produto pai, abra a aba de configurações e confira se pelo menos um filho está habilitado e com quantidade.
Outro detalhe: filho novo adicionado a um configurável que já existia só entra na vitrine depois que os índices de categoria e de estoque rodam.
Se ainda assim não aparece
Três causas menos óbvias, em ordem de frequência.
Escopo de store view. Enable Product e Visibility são atributos por store view. Se você editou o produto com o seletor no topo em "Default Values" e a loja tem uma view brasileira com valor próprio, sua alteração não valeu para o cliente. Troque o seletor para a store view certa e confira lá.
Categoria pai sem Anchor. O produto está numa subcategoria e você está olhando a categoria de cima. Em Display Settings da categoria pai, a opção Anchor precisa estar ligada para ela mostrar os produtos das filhas. O formulário já vem com ela marcada, mas quem migrou de outra plataforma costuma ter categoria com isso desligado.
Salable Quantity zerada. Com múltiplas fontes de estoque, a quantidade do produto pode estar cheia e a quantidade vendável em zero por causa de reserva de pedido antigo. É o caso em que o admin mostra Salable Quantity: 0 ao lado de uma quantidade positiva.
Perguntas rápidas
O produto aparece na busca mas não na categoria. O que é?
Quase sempre Visibility em Search em vez de Catalog, Search. A outra possibilidade é a categoria pai estar sem a opção Anchor ligada, quando o produto está numa subcategoria.
Preciso rodar reindex completo toda vez?
Não. Passe os nomes dos índices que interessam ao comando indexer:reindex. Reindex completo em catálogo grande leva dezenas de minutos e raramente é necessário.
Produto sem estoque some da loja. Isso tem jeito?
Tem. Existe uma configuração de inventário que decide se produto fora de estoque continua visível na vitrine. É uma opção de loja, não do produto, então ela vale para o catálogo inteiro.
Pra conferir na fonte
- Create a simple product — Adobe Experience League
- Product workspace — Adobe Experience League
- Manage the indexers — Adobe Experience League