Official statement
Google recommends using the aggregate offer element within the offers property of events to accurately display ticketing information. This structure allows for grouping multiple price offers while indicating price and availability in a way that the engine can utilize. The goal: to appear in enriched event results without being penalized for incomplete or inconsistent data.
What you need to understand
What is the difference between offer and aggregate offer?
The offer type represents a single offer with a fixed price and specific availability. It is perfect for a standard product sold at a given price. The aggregate offer type, on the other hand, groups multiple offers under one entity: different seating categories, various price ranges, or multiple vendors offering the same event.
For a concert with student, full, and VIP pricing, the aggregate offer can specify the complete price range (lowPrice/highPrice) and indicate overall availability. Google uses this data to create more informative rich results, displaying “Starting at €25” rather than an isolated price that does not reflect the actual offer.
Why does Google require price and availability?
These two properties feed into Google’s search filters and event interfaces. Without a price, it is impossible to display “free events” or sort by budget. Without availability, Google cannot indicate “Sold Out” or “Last Tickets”, critical information for users looking to buy now.
Crawlers check for consistency between the markup and the visible content. A price indicated in schema.org but not visible on the page triggers a warning in Search Console. An “InStock” availability while the page shows “Sold Out” creates an inconsistency that can invalidate the rich snippet. Google has been testing this consistency since the tightening of guidelines on structured data.
What makes this directive different from a simple recommendation?
Google uses prescriptive language here: “use the element” and “indicate price and availability”. It is not a “you may” but a “you must”. The absence of these elements does not prevent the event page from being indexed, but it blocks eligibility for enriched event results in the SERP.
Field tests show that an Event without a properly marked offer or aggregate offer never appears in the enriched events module, even with otherwise perfect Event markup. This is a mandatory eligibility criterion, not optional. Search Console explicitly indicates events without a valid offer as “not eligible for enriched results”.
- Aggregate offer groups multiple prices or seating categories under a single structured entity
- Price and availability are mandatory properties for eligibility in enriched event results
- Consistency between schema.org markup and visible content is checked by Google crawlers
- An Event without a valid offer will index the page but never activate the rich snippets dedicated to events
- Search Console explicitly signals gaps in the Rich Results report
SEO Expert opinion
Does this directive truly reflect observed practices?
Among the thousands of events analyzed in Search Console, the correlation between correctly marked aggregate offer and appearance in enriched results is almost perfect. Events that pass Search Console validation but omit price or availability never appear in Google’s events module, even with high organic traffic and strong domain authority.
However, Google remains silent on thresholds: how many offers minimum for an aggregate offer to be considered valid? What granularity of availability is utilized (InStock/SoldOut/PreOrder is enough, or does Google expect specific quantities)? Tests show that an aggregate offer with a single child works technically, but it is likely suboptimal. [To be verified]: Does Google prefer aggregate offers containing at least 3 distinct offers to trigger rich snippets?
What pitfalls should you avoid during implementation?
The most common mistake: using aggregate offer with identical prices for all sub-offers. Google detects this redundancy and may consider the markup artificial. If all seats are at the same price, a simple offer is sufficient. Aggregate offer only makes sense if it reflects a true price diversity.
The second classic error: indicating an availability of “InStock” while the site requires a login to see actual tickets. Google crawls in unauthenticated mode. If the price or availability is only visible after login, the markup will be invalidated. The rule: everything marked must be publicly crawlable.
In what cases can this structure be counterproductive?
If the event offers dynamic pricing like yield management (prices that fluctuate in real-time based on demand), maintaining a consistent aggregate offer becomes complex. The lowPrice can change every hour. An approximate synchronization generates inconsistencies detected by Google, who invalidates the rich snippet.
For free events without a formal ticketing system, some sites add an offer with price=0 and availability=InStock. It works technically, but Google might consider this structure as over-optimization if the event does not have a real reservation system. An Event without any offers indexes correctly and can appear in Maps or Discover, just not in the enriched event results of the standard SERP. A strategic choice must be made according to the priority channel.
Practical impact and recommendations
What should you implement on your event pages?
Add a schema.org type Event block containing an offers property with an AggregateOffer object. Define at least lowPrice, highPrice, priceCurrency (ISO 4217, e.g. EUR), and availability (InStock, SoldOut, PreOrder). If multiple categories of tickets exist, list them in the offers property of the AggregateOffer as an array of individual Offer objects.
Ensure that each price listed in the markup corresponds to a visible price on the page for a non-logged-in user. Google compares the content of the JSON-LD or microdata with the rendered DOM. A difference of more than 10% between marked price and displayed price triggers a warning. Test with the rich results test tool and validate in Search Console under Rich Results > Events.
What errors block eligibility for enriched results?
The absence of price or availability generates a “Missing required field” error that completely invalidates the rich snippet. A missing or incorrect priceCurrency (e.g. “euros” instead of “EUR”) also causes a rejection. The value of availability must be a valid schema.org term: InStock, OutOfStock, SoldOut, PreOrder, PreSale, Discontinued. Custom terms (“Available”, “Sold Out”) are not recognized.
Using offer in singular while multiple prices exist creates a semantic inconsistency. Google will then display a single price that does not reflect reality, or worse, completely ignore the markup. Conversely, aggregate offer with a single price works but is redundant: it’s better to use a simple offer for clarity. Follow the logic: one price = offer, multiple prices = aggregate offer.
How can you verify that your implementation is correct and utilized by Google?
Use Google’s rich results test tool on your event URLs. It detects syntax errors, missing properties, and simulates the rendering of the rich snippet. Complement this with Search Console: the Rich Results > Events section lists all detected pages, those validated, and those with errors or warnings.
Monitor impressions in the rich results through the Performance report filtered on “Appearance in Search Results” > “Enriched Event Results”. If your Event pages never appear there despite validated markup, it means Google does not consider them relevant for the detected queries, or the competition for those queries is too strong. The markup is a necessary condition but not sufficient for display.
- Implement schema.org Event with offers of type AggregateOffer if multiple prices exist
- Mandatory fields: lowPrice, highPrice, priceCurrency, availability in AggregateOffer
- Check strict consistency between marked prices and displayed prices visible without login
- Use official schema.org values for availability (InStock, SoldOut, etc.)
- Test each page with the rich results test tool before production
- Monitor the Rich Results > Events report in Search Console for errors and warnings
❓ Frequently Asked Questions
Peut-on utiliser offer simple au lieu d'aggregate offer si un seul tarif existe ?
Google exploite-t-il la propriété validFrom pour afficher les dates de mise en vente ?
Faut-il dupliquer le prix dans le HTML visible et dans le balisage schema.org ?
Que se passe-t-il si la disponibilité change entre le crawl et l'affichage du rich snippet ?
Les événements gratuits doivent-ils avoir un balisage offer avec price 0 ?
🎥 From the same video 2
Other SEO insights extracted from this same Google Search Central video · duration 1 min · published on 07/12/2011
🎥 Watch the full video on YouTube →
💬 Comments (0)
Be the first to comment.