Event Schema Generator — Promote In‑Person and Online Events
Generate valid Event JSON‑LD that clarifies dates, location or virtual access, and ticketing. Improve understanding and eligibility for event‑rich results.
Why many event pages underperform
Pain points we solve
- Your snippet doesn’t clearly show date/time or venue/virtual access.
- Virtual events are ambiguous without a join URL and attendance mode.
- Ticket info is missing or inconsistent (price, currency, availability).
- Timezone mistakes in dates lead to confusing search displays.
How SwiftSchema helps
Solution
The Event generator focuses on the essentials: start/end dates with timezone, attendance mode (online, in‑person, or hybrid), a proper location (Place or VirtualLocation), and ticket Offers with price, currency, and availability.
It outputs clean, copy‑ready JSON‑LD per event so your listings stay consistent and easy to validate.
How it works
How it works
- Choose Event in the generator below.
- Enter name, description, and start/end dates with timezone (ISO 8601).
- Select attendance mode and add a Place (with PostalAddress) or a VirtualLocation URL.
- If ticketed, add an Offer: price, currency, URL, and availability.
- Copy JSON or Script, paste on your event page, and validate in the Rich Results Test.
Paste once per event. Validate. Ship.
What is Event structured data?
Event structured data describes your event’s essential details — dates, location or virtual access, and ticketing — so search engines can better understand and present it. Accurate markup improves clarity and can make your listings eligible for event-rich results.
Essential properties
- name— event title.
- startDate/endDate— ISO 8601 timestamps with timezone.
- location—Place(withname+PostalAddress) orVirtualLocation(url).
- eventAttendanceMode—Online,Offline, orMixed.
- eventStatus—EventScheduled,EventPostponed, etc. Update as needed.
- description— brief summary of the event content and audience.
- image— key visual or promotional asset.
- organizer/performer— Person or Organization.
- offers— price, currency, availability, and ticket URL.
- keywords/about— optional topical tags.
- inLanguage— set when localizing event pages.
Content prep checklist
- Confirm event title, description, and schedule (with timezone).
- Gather venue details or virtual access instructions.
- Collect speaker/performer bios and photos.
- Decide on ticketing tiers (free, general admission, VIP) with prices and availability.
- Add FAQs, agenda, and highlight key benefits for attendees.
- Provide social proof (testimonials, past highlights).
Implementation workflow
- Update the event page with the finalized details above.
- Generate Event JSON‑LD covering name, dates, location, attendance mode, organizer, and offers.
- Embed the schema once per event page. For multi-event listings, only include schema when the page focuses on a specific event.
- Validate in Rich Results Test; fix warnings for missing attributes (location, offers).
- Monitor Search Console for event enhancements.
- Update schema when event status, venue, or pricing changes.
- Localize: add inLanguageand localized URLs when applicable; align with hreflang/canonicals.
Handling virtual and hybrid events
- Use VirtualLocationfor online events with aurlto join or register.
- For hybrid events, combine eventAttendanceMode: Mixedwith bothPlaceandVirtualLocationentries.
- Provide clear instructions in content (Zoom link, Slack invite, etc.) and ensure the schema references the same URL.
- If ticketing/registration is required before access, note it in content and ensure offers.urlpoints to the registration page.
Ticketing and Offers
- Include Offerobjects for each tier withprice,priceCurrency,availability,url,validFrom/validThrough.
- For free events, keep price: 0but still provide an Offer to show registration is required.
- Update availability (InStock,SoldOut,PreOrder) as tickets sell.
- Use UTMs on the offer URLs to track conversions but keep canonical URL clean if necessary.
Troubleshooting checklist
- Missing timezone: include offsets in ISO timestamps.
- Wrong attendance mode: align eventAttendanceModewithlocation.
- Incomplete address: provide full PostalAddress for in-person venues.
- No organizer: add Person/Organization for credibility.
- Outdated status: update eventStatusif the event is canceled or postponed.
- Unavailable registration links: ensure offers.urlresolves and matches on-page CTAs.
- Hybrid inconsistencies: include both Place and VirtualLocation when claiming hybrid, and describe it in content.
Common Errors & Fixes
- Missing timezone: use full ISO 8601 timestamps (e.g., 2025-11-12T18:00:00-05:00).
- Wrong attendance type: ensure eventAttendanceModematches yourlocationtype.
- Incomplete address: for in-person, supply a structured PostalAddress.
- Missing offer details: include price/currency even if free (price: 0), and set availability.
- Duplicate schema: avoid multiple Event blocks for the same occurrence on one page.
On-page parity checklist
- Event title and description on-page match nameanddescriptionin schema.
- Dates/times (with timezone) match startDate/endDate; status updates are reflected on-page and ineventStatus.
- Venue info matches location(address) and virtual join links matchVirtualLocation/offers.url.
- Ticket prices/tiers on-page align with offersand availability states.
- Attendance mode (online/offline/mixed) is clear on-page and matches schema.
- Only one Event JSON-LD block per occurrence on the page; if listing multiple events, scope schema to each detail page.
Validation and maintenance
- Validate with Rich Results Test after changes to dates, venues, or ticketing.
- Update eventStatusandoffersas availability or plans change; revalidate.
- Monitor Search Console for event enhancement issues; fix crawlability or structured data errors.
- Keep lastReviewedcurrent and schedule checks before event campaigns to ensure accuracy.
Required properties
namestartDatelocation.name
Recommended properties
descriptionimageendDateeventStatuseventAttendanceModelocation.addressorganizer.nameperformer.nameoffers.priceoffers.priceCurrencyoffers.urloffers.availability
{
"@context": "https://schema.org",
"@type": "Event",
"name": "SwiftSchema Live Workshop: Implementing Product Structured Data",
"description": "A free, hands-on session to implement Product JSON-LD and validate it.",
"startDate": "2025-11-12T18:00:00-05:00",
"endDate": "2025-11-12T19:30:00-05:00",
"eventAttendanceMode": "https://schema.org/OnlineEventAttendanceMode",
"eventStatus": "https://schema.org/EventScheduled",
"image": [
"https://example.com/images/workshop.webp"
],
"location": {
"@type": "VirtualLocation",
"url": "https://example.com/workshop"
},
"organizer": {
"@type": "Organization",
"name": "SwiftSchema",
"url": "https://www.swiftschema.com"
},
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://example.com/workshop/register"
}
}