# AggregateOffer de Schema.org: qué es y cuándo usarlo

> Qué es AggregateOffer en Schema.org, qué propiedades pide Google, por qué no sirve para las variantes de tu ficha y en qué páginas encaja de verdad.

URL: https://clione.ai/es/glosario/aggregateoffer/
Lang: es

AggregateOffer suele aparecer en una pregunta concreta: tengo una camiseta que cuesta una cosa en la talla S y otra en la XXL, ¿cómo le digo a Google «desde tanto»? **La respuesta de Google es que con AggregateOffer no**. Es un tipo de [Schema.org](/es/glosario/schema-org/), se escribe en inglés porque es un nombre del vocabulario, y no tiene nada que ver con una oferta en el sentido de promoción: «agregada» significa que resume varias. Te importa porque es un error fácil en los [datos estructurados](/es/glosario/datos-estructurados/) de una tienda con [variantes de producto](/es/glosario/variantes-de-producto/), y porque, puesto en la ficha equivocada, cierra la puerta a uno de los dos tipos de [resultados enriquecidos](/es/glosario/resultados-enriquecidos/) de producto que tiene Google.

## Cómo funciona

Schema.org define AggregateOffer para **cuando un mismo producto está asociado a varias ofertas**, y pone el ejemplo del mismo par de zapatos vendido por comercios distintos. Desciende de [Offer](/es/glosario/schema-offer/), así que es una oferta que resume otras, y añade cuatro propiedades propias:[^schema-org-aggregateoffer]

| Propiedad    | Qué dice                                                   |
| ------------ | ---------------------------------------------------------- |
| `lowPrice`   | El precio más bajo de todas las ofertas disponibles        |
| `highPrice`  | El precio más alto de todas las ofertas disponibles        |
| `offerCount` | El número de ofertas del producto                          |
| `offers`     | Las ofertas que resume, si se quieren detallar una por una |

Google toma el tipo y lo acota. En su documentación de fragmentos de producto lo describe como una clase de Offer que representa la suma de otras ofertas, que puede usarse, por ejemplo, para un producto que venden varios comerciantes, y añade una línea que conviene leer dos veces: **no uses AggregateOffer para describir un conjunto de variantes de un producto**.[^google-product-snippet]

Cuando se usa, Google pide dos propiedades: `lowPrice` y `priceCurrency`, la moneda en formato ISO 4217 de tres letras. Recomienda otras dos: `highPrice` y `offerCount`.[^google-product-snippet]

Y hay una experiencia de Google a la que no da acceso. De las dos maneras en que Google presenta un producto, los fragmentos de producto aceptan Offer o AggregateOffer, pero las [fichas de comerciante](/es/glosario/fichas-de-comerciante/) exigen Offer, porque para optar a ellas el comerciante tiene que ser quien vende el producto.[^google-merchant-listing] Una tienda que marca su propia ficha con AggregateOffer está describiendo un comparador, no una tienda.

Las variantes tienen su propio camino. Google pide un [ProductGroup](/es/glosario/productgroup/) que reúna las variantes con `hasVariant`, diga con `variesBy` qué cambia entre ellas (la talla, el color) y lleve en `productGroupID` la referencia del producto padre; cada variante es un [Product](/es/glosario/schema-product/) con su propia oferta y su propio precio.[^google-product-variants] El rango de precios, en ese modelo, no se escribe: se deduce de las ofertas de cada variante.

## En una tienda

Dos páginas, dos marcados. **Ejemplo ficticio**: las tiendas, el producto, los precios y el número de ofertas son inventados.

La primera es un comparador que enseña la misma cafetera en varias tiendas. Ahí AggregateOffer encaja: el comparador no vende, resume.

```json
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Cafetera italiana Lucía, 6 tazas",
  "offers": {
    "@type": "AggregateOffer",
    "lowPrice": "24.90",
    "highPrice": "32.50",
    "priceCurrency": "EUR",
    "offerCount": "5"
  }
}
```

La segunda es la ficha de una tienda que vende esa cafetera en dos tamaños, cada uno a su precio. Ahí lo que corresponde es un grupo con una oferta por variante, como describe Google para las variantes:[^google-product-variants]

```json
{
  "@context": "https://schema.org",
  "@type": "ProductGroup",
  "name": "Cafetera italiana Lucía",
  "productGroupID": "LUCIA",
  "variesBy": "https://schema.org/size",
  "hasVariant": [
    {
      "@type": "Product",
      "name": "Cafetera italiana Lucía, 3 tazas",
      "sku": "LUCIA-3",
      "size": "3 tazas",
      "offers": { "@type": "Offer", "price": "22.90", "priceCurrency": "EUR" }
    },
    {
      "@type": "Product",
      "name": "Cafetera italiana Lucía, 6 tazas",
      "sku": "LUCIA-6",
      "size": "6 tazas",
      "offers": { "@type": "Offer", "price": "27.90", "priceCurrency": "EUR" }
    }
  ]
}
```

La diferencia no es de estilo. En el primer caso, la página dice «hay cinco ofertas de este producto entre tal y tal precio», que es verdad en un comparador. En el segundo, la página vende, y cada tamaño es un producto con su precio: escribirlo como un rango con AggregateOffer sería describir variantes, que es justo lo que Google pide no hacer,[^google-product-snippet] y dejaría la ficha fuera de las fichas de comerciante.[^google-merchant-listing] Los dos fragmentos son ejemplos reducidos: una ficha real lleva además la imagen, la disponibilidad y el resto de propiedades que pide cada experiencia.


Usar AggregateOffer para enseñar el rango de precios de las tallas o los colores de tu propia ficha. Parece hecho para eso, porque tiene un precio más bajo y uno más alto, pero Google lo descarta expresamente para los conjuntos de variantes,[^google-product-snippet] y en una página que vende, las fichas de comerciante solo aceptan Offer.[^google-merchant-listing]


## Cómo comprobarlo

1. **Busca «AggregateOffer» en el código fuente de tus fichas.** Si no aparece, este término no te afecta; si aparece, sigue.
2. **Mira de dónde salen `lowPrice` y `highPrice`.** Si son los precios de tus propias tallas o colores, el marcado describe variantes, y Google pide no hacerlo con este tipo.[^google-product-snippet]
3. **Pasa la URL por la [Prueba de resultados enriquecidos](/es/glosario/prueba-de-resultados-enriquecidos/)** y apunta qué experiencias detecta. Una ficha donde se compra debería poder optar a ficha de comerciante, y para eso la oferta tiene que ser Offer.[^rich-results-test][^google-merchant-listing]
4. **Si tu página sí compara vendedores**, comprueba que lleva `lowPrice` y `priceCurrency`, que son las obligatorias, y añade `highPrice` y `offerCount`, que Google recomienda.[^google-product-snippet]


## Concepto cercano: ProductGroup

La confusión de fondo no es entre AggregateOffer y Offer, que la entrada de Offer ya separa, sino entre **resumir ofertas y agrupar variantes**. AggregateOffer resume ofertas de un mismo producto, normalmente de vendedores distintos.[^schema-org-aggregateoffer] ProductGroup agrupa productos que solo se diferencian en algo, como la talla o el color, y cada uno lleva su oferta.[^google-product-variants] Si en tu página hay un selector de talla, la palabra que buscas es ProductGroup; si hay una lista de tiendas que venden lo mismo, es AggregateOffer.

Para seguir, la [ruta de lectura de datos estructurados](/es/aprender/datos-estructurados/) ordena el resto de términos, y la guía para [auditar los datos estructurados de una ficha](/es/guias/auditar-ficha-de-producto/) recorre una ficha con variantes propiedad por propiedad.
