Developer Page Specifications
SEO / AEO
Richest event JSON-LD on the platform. Category → Event/BusinessEvent/EducationEvent/Hackathon subtype mapping.
Complete
Calendar emits the richest event-specific JSON-LD on the platform. Each category maps to a schema.org subtype: Event (default) | BusinessEvent | EducationEvent | Hackathon. Google’s event-search carousel (the horizontal row for "events in {city}" queries) is gated on schema completeness — eventAttendanceMode + eventStatus + organizer + location are ALL required.
Category → schema subtype mapping
- startup-conference, ecosystem-gathering, exhibition → BusinessEvent
- workshop, webinar, university-event → EducationEvent
- hackathon → Hackathon
- demo-day, pitch-competition, founder-meetup, investor-meetup, accelerator-program, incubator-program, government-policy, partner-event → Event (base)
- application-deadline, funding-deadline → NO Event JSON-LD (treated as WebPage + targeted meta only; not eligible for event-search carousel)
Required JSON-LD fields per event
- name, description, url, image
- Required. image must be ≥1200×675 (or 16:9 equivalent). When CoverImageUrl is null, use generated SVG fallback that meets dimensions.
- startDate, endDate
- ISO 8601 with timezone offset (NOT bare YYYY-MM-DD). startDate required; endDate optional but strongly preferred.
- eventAttendanceMode
- Maps directly from Event.Mode: physical→OfflineEventAttendanceMode, online→OnlineEventAttendanceMode, hybrid→MixedEventAttendanceMode. Required for event-carousel eligibility.
- eventStatus
- Maps from Event.Status: upcoming/open/closing-soon/live/completed → EventScheduled; postponed → EventPostponed; cancelled → EventCancelled. mode=hybrid auto-upgrade to MovedOnline when applicable.
- location
- Place (physical) with address + geo; VirtualLocation (online) with url; both for hybrid. Never absent.
- organizer
- Organization sub-graph with name + url + logo + sameAs.
- offers (when registrationUrl exists)
- Offer with url + priceCurrency + price (0 when free) + availability + validFrom + validThrough (= applicationDeadline when present).
- inLanguage, superEvent (when child of a series)
- inLanguage = current locale. superEvent links recurring/series events.
