O cliente liga dizendo que o produto sumiu da loja. Você abre o admin, o produto está habilitado, visível, no site certo, na categoria certa. Abre a URL dele no navegador e a página carrega numa boa. Mas na categoria ele não está.
Não é cache e não é índice quebrado. É uma configuração que o Magento entrega ligada do jeito errado para a maioria das lojas brasileiras.
O que realmente some
O caminho é cataloginventory/options/show_out_of_stock e o valor de fábrica é 0. No admin ele está em Stores > Configuration > Catalog > Inventory > Stock Options, com o nome Display Out of Stock Products.
Com ele em 0, o Magento aplica um filtro de estoque em toda coleção de produto da vitrine. Some da listagem de categoria, some da busca, some da navegação por camadas, some dos blocos de relacionados, upsell e cross-sell, e some da lista de itens de um produto agrupado.
O que não some é a página do produto. Isso não é opinião minha: o próprio system.xml do Magento traz o aviso embaixo do campo, em inglês — Products will still be shown by direct product URLs. Quem tem o link continua abrindo a página normalmente, com o aviso de indisponível.
Ligue e reindexe
Três comandos, nessa ordem:
bin/magento config:set cataloginventory/options/show_out_of_stock 1
bin/magento indexer:reindex catalogsearch_fulltext
bin/magento cache:flushO reindex não é frescura. Quando a opção está desligada, o Magento nem coloca o produto sem estoque no índice de busca — existe um plugin do módulo de inventário que filtra os produtos fora de estoque antes de montar o documento. Mudar a configuração não reescreve o índice sozinho, então sem o reindex o produto continua fora da busca.
Vale conferir também os dois vizinhos de tela: Display Products Availability in Stock on Storefront controla se aparece o selo de disponibilidade, e Not Available Message define qual mensagem o cliente lê. Ligar a listagem sem cuidar da mensagem deixa a loja com aparência de quebrada.
O efeito disso no Google
Aqui está a parte que ninguém conta. Com a opção desligada, o Magento continua colocando o produto no sitemap.xml — o gerador de sitemap filtra por status e por visibilidade, e não olha estoque nenhum.
Ou seja: você entrega ao Google uma URL que responde 200, mas que não recebe link de nenhuma página da loja. Página órfã. O Google rastreia, não encontra caminho interno, e com o tempo trata como conteúdo de segunda linha. Quando o produto volta ao estoque, você recomeça do zero a autoridade daquela URL.
Para produto que vai voltar — reposição, sazonalidade, tamanho esgotado — ligar a opção é quase sempre o certo. A URL continua viva, o link interno continua existindo e o histórico não se perde.
Quando eu não ligaria
Duas situações em que a resposta muda.
Catálogo com muito produto morto. Se metade do catálogo está esgotada há meses, ligar a opção enche a listagem de coisa que não vende e afunda o produto bom para a segunda página. Aí o trabalho é de curadoria, não de configuração: desabilite o que não volta e deixe a opção ligada para o resto.
Vale dizer que a configuração é uma chave só, global — no admin ela aparece apenas no escopo padrão. Não dá para ligar em uma store view e deixar desligada na outra pela tela de configuração.
Produto que não volta nunca. Descontinuado é caso de 410 ou de redirect 301 para o substituto, não de página esgotada eterna. Deixar no ar uma vitrine cheia de "produto indisponível" que nunca mais volta é pior para conversão e para SEO do que assumir o fim de vida do item.
Perguntas rápidas
Ligar essa opção deixa o cliente comprar produto sem estoque?
Não. Quem controla isso é a configuração de backorders, que é outro campo. Com backorders desligado, o produto aparece na listagem com o aviso de indisponível e o botão de comprar não funciona.
Meu produto configurável sumiu, mas os filhos têm estoque. É a mesma coisa?
Provavelmente não. Configurável fica fora de estoque quando todos os filhos ficam, e um filho desabilitado ou sem estoque na fonte certa derruba a conta. Confira a Salable Quantity de cada variação antes de mexer na configuração.
Preciso reindexar tudo depois de mudar?
Só o catalogsearch_fulltext e o cache. Se a loja usa Update by Schedule, o cron faz o reindex sozinho, mas rodar na mão evita esperar o próximo ciclo.