**TL;DR.** I requisiti per i risultati ricchi di prodotto di Google del 2026 hanno aggiunto `hasMerchantReturnPolicy` e `shippingDetails` come campi necessari per l'idoneità ai rich snippet. I prodotti senza di essi perdono prezzo, disponibilità e stelle delle recensioni nei risultati di ricerca. Ordiko emette entrambi per impostazione predefinita una volta configurate le politiche a livello di negozio; i concorrenti richiedono lavoro su tema/plugin.

## Cosa è cambiato nel 2026

Nel 2024 e 2025, Google ha introdotto nuovi requisiti per i dati strutturati dei prodotti. La base del 2026:

| Campo                           | Richiesto per risultato ricco? | Effetto se mancante                     |
| ------------------------------- | ------------------------------- | --------------------------------------- |
| `name`, `image`, `description`  | Sì (da tempo)                  | Risultato non idoneo                   |
| `offers.price`, `priceCurrency` | Sì (da tempo)                  | Snippet del prezzo nascosto             |
| `offers.availability`            | Sì (da tempo)                  | Disponibilità non mostrata              |
| `aggregateRating` o `review`    | Raccomandato                   | Valutazione stellare non mostrata       |
| **`hasMerchantReturnPolicy`**    | **Sì (2026)**                  | **Risultato ricco non idoneo**         |
| **`offers.shippingDetails`**     | **Sì (2026)**                  | **Risultato ricco non idoneo**         |
| `brand`, `sku`, `gtin`           | Raccomandato                   | Riduce la credibilità / corrispondenza  |
| `material`, `color`, `size`      | Raccomandato                   | Riduce la filtrabilità                  |

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

## hasMerchantReturnPolicy

La struttura completa del 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"
}
```

Valori validi:

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

Se hai una politica di reso gratuita di 30 giorni per posta (il comune default a favore dei consumatori):

```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

La struttura completa del 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"
    }
  }
}
```

Emetti un `shippingDetails` per ogni regione di destinazione che servi. Un negozio US-Canada spedisce a due destinazioni, quindi due voci.

## Modello di riferimento (raccomandato)

Definire la politica di reso e la spedizione per prodotto produce HTML verboso. Il modello più pulito è definirli una volta nello schema `Organization` con `@id` stabili e fare riferimento a essi da ciascun prodotto:

```json
// Una volta su ogni pagina (o solo sulla home):
{
  "@type": "Organization",
  "@id": "https://example.com/#organization",
  "name": "Example Store",
  "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"
  }
}

// Per pagina prodotto:
{
  "@type": "Product",
  "name": "Borsa in pelle",
  "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" }
  }
}
```

Questo valida esattamente come le politiche inline ma mantiene ogni PDP più piccola e più facile da memorizzare.

## Sovrascritture per prodotto

Alcuni prodotti necessitano di eccezioni:

- **Articoli ingombranti** (mobili, materassi): politica di reso diversa (spesso `OriginalShippingFees`).
- **Hazmat** (batterie, aerosol): `MerchantReturnNotPermitted` o solo in negozio.
- **Fatti su misura** (incisioni, monogrammi): `MerchantReturnNotPermitted`.
- **Prodotti digitali**: `MerchantReturnNotPermitted`.

Sovrascrivi a livello di prodotto:

```ts
// Pseudocodice per un prodotto Ordiko
{
  id: "prod_xyz",
  slug: "orologio-inciso-personalizzato",
  returnPolicy: {
    category: "MerchantReturnNotPermitted",
    applicableCountry: ["US"],
  },
}
```

L'ordine di risoluzione: sovrascrittura del prodotto → politica del negozio → nessuna.

## Validazione

1. **Per pagina**: [Google Rich Results Test](https://search.google.com/test/rich-results) su PDP rappresentative. Conferma "idoneo" senza avvisi su reso/spedizione.
2. **Su larga scala**: [Schema Markup Validator](https://validator.schema.org) per la sintassi.
3. **In produzione**: Google Search Console → Miglioramenti → Prodotti → rapporto di copertura.

## Come Ordiko implementa questo

Ordiko emette `hasMerchantReturnPolicy` e `shippingDetails` su ogni PDP automaticamente una volta configurato:

- **Impostazioni → SEO → Politica di reso** (un modulo, ~5 campi).
- **Impostazioni → SEO → Politiche di spedizione** (una riga per destinazione).

Il risolutore in `src/lib/seo/return-policy.ts` si cascata: sovrascrittura del prodotto → politica del negozio → nessuna. Il renderer emette il modello di riferimento con `@id` stabili su Organization.

Nessun lavoro sul tema. Nessun plugin. Nessuna scrittura JSON-LD.

## Errori comuni

1. **Duplicazione inline della politica di reso su ogni prodotto.** Valida ma produce 10–50KB di JSON ridondante per PDP. Usa il modello di riferimento.
2. **Mancanza di `applicableCountry`.** Questo è richiesto. Specifica i paesi a cui si applica la politica.
3. **Enum di categoria errata.** Usa l'URL completo (`https://schema.org/MerchantReturnFiniteReturnWindow`), non il nome breve.
4. **Politiche di spedizione che non corrispondono alle tariffe di spedizione visibili.** Schema e contenuto della pagina devono concordare o Google sopprime il risultato ricco.
5. **Nessuna politica di spedizione.** Anche i negozi con spedizione gratuita devono emettere `shippingDetails` con un `shippingRate.value` di `0`.

## FAQ

**Quando è diventato obbligatorio hasMerchantReturnPolicy?**
Google ha annunciato il requisito nel 2024 con l'applicazione che si è estesa attraverso il 2025 e all'inizio del 2026. A partire dal 2026, la mancanza di hasMerchantReturnPolicy nello schema del prodotto comporta la perdita dell'idoneità ai risultati ricchi: il tuo prodotto non mostra più prezzo, disponibilità o stelle delle recensioni nei SERP.

**Posso emettere una singola politica per l'intero negozio?**
Sì. Definisci hasMerchantReturnPolicy una volta nello schema Organization con un `@id` stabile, quindi fai riferimento ad esso da ciascuna offerta di prodotto tramite `@id`. Questo è il modello più pulito e ciò che Ordiko emette per impostazione predefinita.

**Cosa succede se i miei prodotti hanno regole di spedizione diverse?**
Sovrascrivi per prodotto. La maggior parte dei negozi ha oltre il 90% dei prodotti sulla stessa politica e il 5–10% che necessitano di sovrascritture (ingombranti, hazmat, fatti su misura). Ordiko supporta politiche per prodotto nullable che tornano alla politica del negozio.

**Questo influisce sulle citazioni di ricerca AI?**
Sì, indirettamente. I motori AI (Perplexity, ChatGPT, Claude) analizzano lo stesso JSON-LD che fa Google. Politiche di reso e spedizione complete migliorano la citabilità: i motori AI preferiscono pagine con dati strutturati completi perché possono rispondere direttamente alle domande degli utenti.