**TL;DR.** Os requisitos de rich result para produtos do Google em 2026 adicionaram `hasMerchantReturnPolicy` e `shippingDetails` como campos necessários para a elegibilidade do rich snippet. Produtos sem eles perdem preço, disponibilidade e estrelas de avaliação nos resultados de busca. A Ordiko emite ambos por padrão assim que você configura políticas em nível de loja; concorrentes exigem trabalho de tema/plugin.

## O que mudou em 2026

Entre 2024 e 2025, o Google lançou novos requisitos para dados estruturados de produtos. A linha de base de 2026:

| Campo                           | Necessário para rich result? | Efeito se ausente                     |
| ------------------------------- | ----------------------------- | ------------------------------------- |
| `name`, `image`, `description`  | Sim (já existente)            | Resultado não elegível                 |
| `offers.price`, `priceCurrency` | Sim (já existente)            | Snippet de preço oculto               |
| `offers.availability`            | Sim (já existente)            | Disponibilidade não mostrada           |
| `aggregateRating` ou `review`    | Recomendado                   | Avaliação em estrelas não mostrada     |
| **`hasMerchantReturnPolicy`**    | **Sim (2026)**                | **Rich result não elegível**          |
| **`offers.shippingDetails`**     | **Sim (2026)**                | **Rich result não elegível**          |
| `brand`, `sku`, `gtin`           | Recomendado                   | Reduz credibilidade / correspondência  |
| `material`, `color`, `size`      | Recomendado                   | Reduz filtrabilidade                   |

Fonte: [Google Search Central — Product structured data](https://developers.google.com/search/docs/appearance/structured-data/product).

## hasMerchantReturnPolicy

A estrutura completa do campo:

```json
{
  "@type": "MerchantReturnPolicy",
  "@id": "https://example.com/#return-policy",
  "applicableCountry": ["US", "CA"],
  "returnPolicyCountry": "US",
  "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
  "merchantReturnDays": 30,
  "returnMethod": "https://schema.org/ReturnByMail",
  "returnFees": "https://schema.org/FreeReturn"
}
```

Valores válidos:

- `returnPolicyCategory`: `MerchantReturnFiniteReturnWindow`, `MerchantReturnUnlimitedWindow`, `MerchantReturnNotPermitted`, `MerchantReturnUnspecified`.
- `returnMethod`: `ReturnByMail`, `ReturnInStore`, `ReturnAtKiosk`.
- `returnFees`: `FreeReturn`, `OriginalShippingFees`, `ReturnFeesCustomerResponsibility`, `RestockingFees`, `ReturnShippingFees`.

Se você tiver uma política de devolução gratuita de 30 dias por correio (o padrão comum amigável ao consumidor):

```json
{
  "@type": "MerchantReturnPolicy",
  "applicableCountry": ["US", "CA"],
  "returnPolicyCountry": "US",
  "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
  "merchantReturnDays": 30,
  "returnMethod": "https://schema.org/ReturnByMail",
  "returnFees": "https://schema.org/FreeReturn"
}
```

## shippingDetails

A estrutura completa do campo:

```json
{
  "@type": "OfferShippingDetails",
  "shippingRate": {
    "@type": "MonetaryAmount",
    "value": "4.99",
    "currency": "USD"
  },
  "shippingDestination": {
    "@type": "DefinedRegion",
    "addressCountry": "US"
  },
  "deliveryTime": {
    "@type": "ShippingDeliveryTime",
    "handlingTime": {
      "@type": "QuantitativeValue",
      "minValue": 0,
      "maxValue": 1,
      "unitCode": "DAY"
    },
    "transitTime": {
      "@type": "QuantitativeValue",
      "minValue": 2,
      "maxValue": 5,
      "unitCode": "DAY"
    }
  }
}
```

Emita um `shippingDetails` por região de destino que você atende. Uma loja dos EUA-Canadá envia para dois destinos, então duas entradas.

## Padrão de referência (recomendado)

Definir a política de devolução e o envio por produto produz HTML verboso. O padrão mais limpo é defini-los uma vez no esquema `Organization` com `@id`s estáveis e referenciá-los de cada Produto:

```json
// Uma vez em cada página (ou apenas na inicial):
{
  "@type": "Organization",
  "@id": "https://example.com/#organization",
  "name": "Exemplo de Loja",
  "hasMerchantReturnPolicy": {
    "@type": "MerchantReturnPolicy",
    "@id": "https://example.com/#return-policy",
    "applicableCountry": ["US", "CA"],
    "returnPolicyCountry": "US",
    "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
    "merchantReturnDays": 30,
    "returnMethod": "https://schema.org/ReturnByMail",
    "returnFees": "https://schema.org/FreeReturn"
  }
}

// Por página de Produto:
{
  "@type": "Product",
  "name": "Bolsa de Couro",
  "offers": {
    "@type": "Offer",
    "price": "149.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "hasMerchantReturnPolicy": { "@id": "https://example.com/#return-policy" },
    "shippingDetails": { "@id": "https://example.com/#shipping-us" }
  }
}
```

Isso valida exatamente da mesma forma que políticas inline, mas mantém cada PDP menor e mais fácil de armazenar em cache.

## Sobrescritas por produto

Alguns produtos precisam de exceções:

- **Itens grandes** (móveis, colchões): política de devolução diferente (geralmente `OriginalShippingFees`).
- **Hazmat** (baterias, aerossóis): `MerchantReturnNotPermitted` ou apenas na loja.
- **Feitos sob encomenda** (gravação, monogramas): `MerchantReturnNotPermitted`.
- **Produtos digitais**: `MerchantReturnNotPermitted`.

Sobrescreva no nível do produto:

```ts
// Pseudocódigo para um produto Ordiko
{
  id: "prod_xyz",
  slug: "relógio-gravado-personalizado",
  returnPolicy: {
    category: "MerchantReturnNotPermitted",
    applicableCountry: ["US"],
  },
}
```

A ordem do resolvedor: sobrescrição do produto → política da loja → nenhuma.

## Validação

1. **Por página**: [Google Rich Results Test](https://search.google.com/test/rich-results) em PDPs representativas. Confirme "elegível" sem avisos sobre devolução/envio.
2. **Em escala**: [Schema Markup Validator](https://validator.schema.org) para sintaxe.
3. **Em produção**: Google Search Console → Melhorias → Produtos → relatório de cobertura.

## Como a Ordiko implementa isso

A Ordiko emite `hasMerchantReturnPolicy` e `shippingDetails` em cada PDP automaticamente assim que você configura:

- **Configurações → SEO → Política de Devolução** (um formulário, ~5 campos).
- **Configurações → SEO → Políticas de Envio** (uma linha por destino).

O resolvedor em `src/lib/seo/return-policy.ts` cascata: sobrescrição do produto → política da loja → nenhuma. O renderizador emite o padrão de referência com `@id`s estáveis na Organização.

Sem trabalho de tema. Sem plugins. Sem escrita de JSON-LD.

## Erros comuns

1. **Duplicação inline da política de devolução em cada produto.** Valida, mas produz 10–50KB de JSON redundante por PDP. Use o padrão de referência.
2. **Falta de `applicableCountry`.** Isso é necessário. Especifique os países aos quais a política se aplica.
3. **Enumeração de categoria errada.** Use a URL completa (`https://schema.org/MerchantReturnFiniteReturnWindow`), não o nome curto.
4. **Políticas de envio que não correspondem às taxas de envio visíveis.** O esquema e o conteúdo da página devem concordar ou o Google suprime o rich result.
5. **Nenhuma política de envio.** Mesmo lojas com frete grátis devem emitir `shippingDetails` com um `shippingRate.value` de `0`.

## FAQ

**Quando o hasMerchantReturnPolicy se tornou obrigatório?**
O Google anunciou a exigência em 2024, com a aplicação sendo implementada ao longo de 2025 e início de 2026. A partir de 2026, a ausência de hasMerchantReturnPolicy no esquema de Produto resulta na perda da elegibilidade para rich result — seu produto não mostra mais preço, disponibilidade ou estrelas de avaliação nos SERPs.

**Posso emitir uma única política para toda a loja?**
Sim. Defina hasMerchantReturnPolicy uma vez no esquema Organization com um @id estável, e então referencie-o de cada oferta de Produto via @id. Este é o padrão mais limpo e o que a Ordiko emite por padrão.

**E se meus produtos tiverem regras de envio diferentes?**
Sobrescreva por produto. A maioria das lojas tem 90%+ dos produtos na mesma política e 5–10% precisando de sobrescritas (grandes, hazmat, feitos sob encomenda). A Ordiko suporta política por produto que pode ser nula e que recai na política da loja.

**Isso afeta citações de busca por IA?**
Sim, indiretamente. Motores de IA (Perplexity, ChatGPT, Claude) analisam o mesmo JSON-LD que o Google. Políticas de devolução e envio completas melhoram a citabilidade — motores de IA preferem páginas com dados estruturados abrangentes porque podem responder diretamente às perguntas dos usuários.