Produtos fora do CD como indisponíveis

Como adaptar o template da loja quando a regionalização de vitrine passa a exibir — em vez de esconder — os produtos que não estão nos centros de distribuição da região do cliente.

Em lojas com Regionalização de Vitrine ou parceiros, a configuração ExibirProdutosForaCdComoIndisponivel define o tratamento dado aos produtos que não pertencem a nenhum centro de distribuição (CD) da região do cliente: removê-los do resultado ou retorná-los marcados como indisponíveis.

Comportamento

A região do cliente é resolvida pelo partnerAccessToken, que carrega a lista de CDs. O tratamento dos produtos fora desses CDs depende da configuração:

Configuração desligada (padrão)Configuração ligada
Busca, hotsites e vitrinesProduto não retornaProduto retorna com available: false
Página de produto (PDP)Retorna 404Retorna 200, com available: false
OrdenaçãoProduto é rebaixado, junto dos indisponíveis reais
totalCount e facetasNão contabilizam o produtoContabilizam o produto
Avise-meIndisponível, a página não carregaDisponível na PDP

Escopo da marcação

A marcação altera apenas o campo available. stock, stocks, variantStock, preOrder, guaranteedPreOrder e prices continuam com os valores vindos do índice. Um produto fora do CD pode apresentar stock > 0 e available: false simultaneamente — available é a fonte de verdade para disponibilidade de compra.

A marcação só reduz disponibilidade, nunca concede: produto que já vinha available: false permanece false.

Condições de ativação

O comportamento novo se aplica quando as duas condições são verdadeiras na requisição:

  1. a configuração está ligada na loja; e
  2. o partnerAccessToken enviado resolve ao menos um CD.

Requisição sem partnerAccessToken não é regionalizada e não sofre marcação.

Escopo por operação

OperaçãoEfeito
productMarcação aplicada
productsMarcação aplicada
searchMarcação aplicada
hotsite e multi-hotsiteMarcação aplicada
autocompleteMarcação aplicada quando retorna produtos
Filtros de estoque por CD dentro de filtersSem alteração — continuam filtrando
Endpoints de exportação (ETL)Sem alteração — continuam filtrando

Configuração

Disponível no Admin da loja, nas configurações da loja, como "Exibe produtos fora do CD do parceiro ou região como indisponível".

ChaveTipoPadrão
ExibirProdutosForaCdComoIndisponivelBooleanFalse

Pré-requisito

Exibir-Produtos-Indisponiveis precisa estar true. Com essa configuração em false, a loja recebe produtos marcados como indisponíveis por estarem fora do CD, enquanto os indisponíveis reais permanecem ocultos. A combinação não é bloqueada, mas o resultado é incoerente.

Propagação

A configuração leva até 1 hora para propagar, tanto ao ligar quanto ao desligar. Não há reindexação envolvida em nenhum dos sentidos.

Ordem de ativação

A ativação altera o retorno da API para toda a loja. Publique as alterações de template antes de ligar a configuração.

Alterações necessárias no template

1. Enviar o partnerAccessToken

Obtenha o token a partir do CEP informado pelo cliente e persista na sessão:

query PartnerByRegion {
  partnerByRegion(input: { cep: "80010-000" }) {
    partnerAccessToken
    name
  }
}

Envie o mesmo token em todas as queries de produto e na mutation de Avise-me. Sem ele, nenhum comportamento de regionalização se aplica.

2. Busca, hotsites e vitrines

query Busca($termo: String!, $token: String) {
  search(query: $termo, partnerAccessToken: $token) {
    products(first: 24) {
      totalCount
      edges {
        node {
          productId
          productName
          available
          prices { price }
        }
      }
    }
    productAggregations {
      filters { field values { name quantity } }
    }
  }
}

No card de produto, quando available for false:

  • exibir selo ou tarja de indisponibilidade com contraste próprio, não apenas opacidade;
  • desabilitar add-to-cart rápido e compra direta do spot;
  • manter o card clicável — é o acesso à PDP onde o Avise-me está.

Valores que mudam com a configuração ligada:

CampoMudançaTratamento
totalCountPassa a incluir os produtos fora do CDRevisar exibições de "N resultados" e "Página X de Y". A paginação por cursor não é afetada.
FacetasPodem listar valores que só existem fora do CD, com contagemSem tratamento no front
Faixas de preçoMínimo e máximo podem alargarSem tratamento no front

A ordenação escolhida pelo cliente (preço, nome, lançamento, relevância) continua sendo aplicada dentro de cada grupo: primeiro os disponíveis na região, depois os demais.

3. Página de produto

query Pdp($productId: Long!, $token: String) {
  product(productId: $productId, partnerAccessToken: $token) {
    productId
    productVariantId
    productName
    available
    prices { price listPrice }
    images(width: 600, height: 600) { url }
  }
}

Com available: false, renderizar a página completa — imagens, descrição, ficha técnica e dados de SEO — substituindo apenas o bloco de compra por:

  • mensagem de indisponibilidade regional, citando o CEP informado;
  • formulário de Avise-me com o productVariantId da variante exibida;
  • ação para alterar o CEP;
  • botão de compra removido ou desabilitado, não apenas esmaecido.

Remover do template qualquer redirecionamento ou renderização de página de erro condicionada à indisponibilidade do produto. Esse tratamento anula a entrega.

SEO

  • Manter status 200 e a URL canônica.
  • Não aplicar noindex condicionado à indisponibilidade.
  • No structured data, manter a marcação de produto e definir a oferta como https://schema.org/OutOfStock enquanto indisponível na região.

4. Avise-me

A assinatura da mutation não mudou. O partnerAccessToken vincula o cadastro ao parceiro da região e define a regra de disparo.

mutation AviseMe($input: RestockAlertInput!, $token: String, $recaptcha: String) {
  productRestockAlert(
    input: $input
    partnerAccessToken: $token
    recaptchaToken: $recaptcha
  ) {
    productVariantId
    email
    requestDate
  }
}
{
  "input": { "productVariantId": 172190, "name": "Ana", "email": "[email protected]" }
}

Regra de disparo:

CadastroNotificação enviada quando
Com partnerAccessTokenHouver saldo em algum CD que atenda a faixa de CEP da região do parceiro
Sem partnerAccessTokenA variante tiver estoque disponível, em qualquer CD

A variante precisa estar ativa no cadastro para qualquer disparo. O formulário deve operar no mesmo contexto de CEP da página: alterada a região, os próximos cadastros valem para a nova região.

Referência da mutation: ProductRestockAlert.

Checklist

  • partnerAccessToken enviado em todas as queries de produto e na mutation de Avise-me
  • Decisões de compra baseadas em available, não em stock, stocks ou variantStock
  • Redirecionamentos e páginas de erro por indisponibilidade removidos da PDP
  • Bloco de indisponibilidade regional e formulário de Avise-me implementados na PDP
  • Estado de indisponibilidade no card de vitrine, com add-to-cart desabilitado
  • Contadores de resultado e paginação revisados
  • PDP em 200, sem noindex condicional, oferta como OutOfStock no structured data
  • Exibir-Produtos-Indisponiveis em true
  • Template publicado antes da ativação da configuração
  • Janela de 1 hora considerada na validação