**TL;DR.** Вимоги Google до продуктів з розширеними результатами на 2026 рік додали `hasMerchantReturnPolicy` та `shippingDetails` як поля, необхідні для відповідності розширеним фрагментам. Продукти без них втрачають ціну, доступність та зірки відгуків у результатах пошуку. Ordiko автоматично генерує обидва поля, як тільки ви налаштуєте політики на рівні магазину; конкурентам потрібно працювати з темами/плагінами.

## Що змінилося у 2026 році

Протягом 2024 та 2025 років Google впроваджував нові вимоги до структурованих даних продуктів. Базові вимоги на 2026 рік:

| Поле                             | Необхідно для розширеного результату? | Ефект у разі відсутності                |
| -------------------------------- | -------------------------------------- | --------------------------------------- |
| `name`, `image`, `description`   | Так (тривалий)                        | Результат не відповідає вимогам        |
| `offers.price`, `priceCurrency`  | Так (тривалий)                        | Фрагмент ціни прихований                |
| `offers.availability`             | Так (тривалий)                        | Доступність не показується              |
| `aggregateRating` або `review`    | Рекомендовано                         | Зірковий рейтинг не показується        |
| **`hasMerchantReturnPolicy`**     | **Так (2026)**                       | **Розширений результат не відповідає вимогам** |
| **`offers.shippingDetails`**      | **Так (2026)**                       | **Розширений результат не відповідає вимогам** |
| `brand`, `sku`, `gtin`            | Рекомендовано                         | Знижує надійність / відповідність      |
| `material`, `color`, `size`       | Рекомендовано                         | Знижує можливість фільтрації           |

Джерело: [Google Search Central — Структуровані дані продуктів](https://developers.google.com/search/docs/appearance/structured-data/product).

## hasMerchantReturnPolicy

Повна структура поля:

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

Дійсні значення:

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

Якщо у вас є 30-денна безкоштовна політика повернення поштою (поширений споживчий стандарт):

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

Повна структура поля:

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

Генеруйте один `shippingDetails` для кожного регіону призначення, який ви обслуговуєте. Магазин США-Канади відправляє до двох місць, отже, два записи.

## Рекомендований шаблон

Визначення політики повернення та доставки для кожного продукту створює громіздкий HTML. Чистіший шаблон — визначити їх один раз у схемі `Organization` зі стабільними `@id` та посилатися на них з кожного продукту:

```json
// Один раз на кожній сторінці (або просто на головній):
{
  "@type": "Organization",
  "@id": "https://example.com/#organization",
  "name": "Приклад Магазину",
  "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"
  }
}

// На сторінці продукту:
{
  "@type": "Product",
  "name": "Шкіряна Сумка",
  "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" }
  }
}
```

Це валідується точно так само, як і вбудовані політики, але зберігає кожну PDP меншою та легшою для кешування.

## Винятки для продуктів

Деякі продукти потребують винятків:

- **Габаритні предмети** (меблі, матраци): інша політика повернення (часто `OriginalShippingFees`).
- **Небезпечні матеріали** (батареї, аерозолі): `MerchantReturnNotPermitted` або тільки в магазині.
- **Індивідуальні замовлення** (гравірування, монограми): `MerchantReturnNotPermitted`.
- **Цифрові продукти**: `MerchantReturnNotPermitted`.

Перезаписуйте на рівні продукту:

```ts
// Псевдокод для продукту Ordiko
{
  id: "prod_xyz",
  slug: "custom-engraved-watch",
  returnPolicy: {
    category: "MerchantReturnNotPermitted",
    applicableCountry: ["US"],
  },
}
```

Порядок вирішення: перевага продукту → політика магазину → жодна.

## Валідація

1. **На кожній сторінці**: [Google Rich Results Test](https://search.google.com/test/rich-results) на репрезентативних PDP. Підтверджуйте "відповідає вимогам" без попереджень про повернення/доставку.
2. **В масовому масштабі**: [Schema Markup Validator](https://validator.schema.org) для синтаксису.
3. **В продукції**: Google Search Console → Покращення → Продукти → звіт про охоплення.

## Як Ordiko реалізує це

Ordiko автоматично генерує `hasMerchantReturnPolicy` та `shippingDetails` на кожній PDP, як тільки ви налаштуєте:

- **Налаштування → SEO → Політика повернення** (одна форма, ~5 полів).
- **Налаштування → SEO → Політики доставки** (один рядок на кожне призначення).

Розв'язувач у `src/lib/seo/return-policy.ts` каскадує: перевага продукту → політика магазину → жодна. Рендерер генерує шаблон посилань зі стабільними `@id` на Організацію.

Без роботи з темами. Без плагінів. Без написання JSON-LD.

## Загальні помилки

1. **Вбудоване дублювання політики повернення на кожному продукті.** Валідується, але створює 10–50KB надмірного JSON на кожній PDP. Використовуйте шаблон посилань.
2. **Відсутнє `applicableCountry`.** Це обов'язково. Вкажіть країни, до яких застосовується політика.
3. **Неправильний категорійний ENUM.** Використовуйте повну URL-адресу (`https://schema.org/MerchantReturnFiniteReturnWindow`), а не коротку назву.
4. **Політики доставки, які не відповідають видимим тарифам доставки.** Схема та вміст сторінки повинні узгоджуватися, інакше Google подавляє розширений результат.
5. **Відсутня політика доставки взагалі.** Навіть магазини з безкоштовною доставкою повинні генерувати `shippingDetails` з `shippingRate.value` рівним `0`.

## Часті запитання

**Коли `hasMerchantReturnPolicy` стало обов'язковим?**
Google оголосив про вимогу у 2024 році, з впровадженням, що відбувалося протягом 2025 та на початку 2026 року. Станом на 2026 рік, відсутність `hasMerchantReturnPolicy` у схемі продукту призводить до втрати відповідності розширеному результату — ваш продукт більше не показує ціну, доступність або зірки відгуків у SERP.

**Чи можу я згенерувати одну політику для всього магазину?**
Так. Визначте `hasMerchantReturnPolicy` один раз у схемі Організації зі стабільним `@id`, а потім посилайтеся на нього з кожної пропозиції продукту через `@id`. Це найчистіший шаблон, і саме це Ordiko генерує за замовчуванням.

**Що робити, якщо у моїх продуктах різні правила доставки?**
Перезаписуйте на рівні продукту. Більшість магазинів мають 90%+ продуктів на одній політиці та 5–10% потребують винятків (габаритні, небезпечні, індивідуальні). Ordiko підтримує nullable політику на рівні продукту, яка повертається до політики магазину.

**Чи вплине це на цитати в AI-пошуку?**
Так, опосередковано. AI-двигуни (Perplexity, ChatGPT, Claude) аналізують той самий JSON-LD, що й Google. Повні політики повернення та доставки покращують цитованість — AI-двигуни надають перевагу сторінкам з комплексними структурованими даними, оскільки вони можуть безпосередньо відповідати на запитання користувачів.