Every published event page carries schema.org Event markup in its head, built from the fields you already filled in. There is no setting to switch on and nothing to fill in twice.
What ends up in the markup
HappenBoard prints a JSON-LD block of type Event. It always contains:
- name: the event title.
- description: the excerpt, or the first 55 words of the content when there is no excerpt.
- startDate and endDate.
- eventStatus, which is scheduled unless something has marked the event otherwise.
- eventAttendanceMode and location.
- inLanguage, taken from your site language.
- url, the event permalink.
- offers and isAccessibleForFree.
Three more fields appear only when you have supplied the data:
- image: the featured image, listed in its full, large and medium sizes.
- organizer, which is also reused as performer when you have not set a separate performer.
- maximumAttendeeCapacity, when the event has a capacity above zero.
Which date search engines see
A single event uses its own start. A repeating event uses the next occurrence still to come, and once the whole series is over it falls back to the most recent past occurrence, so a finished event still carries a valid date rather than none at all. If you are building a repeat rule, that is the date that will be picked up.
All-day events output plain calendar dates with no time. Timed events output the full date and time in your site timezone.
Location and attendance mode
The event format decides both fields at once.
- In person: a Place, with the offline attendance mode.
- Virtual: a VirtualLocation pointing at your online URL, with the online attendance mode.
- Hybrid: both a Place and a VirtualLocation, with the mixed attendance mode.
When an event is set to in person or hybrid but has no address at all, HappenBoard falls back to the virtual shape rather than emitting an Event with no location, which search engines reject. See the guide on event formats for how the setting works in the editor.
If the event points at a venue record, the Place carries the venue name, its street, city, region, postal code and country, plus geographic coordinates when the venue has been geocoded. That is the best reason to fill in venue addresses and coordinates properly. If you typed a venue name and address directly on the event instead, those are used as-is.
Organizer and offers
A linked organizer record becomes an Organization with its name, its website (or its permalink when no website is set) and its email address. A name and email typed on the event itself work too.
The free plugin always outputs one offer at a price of zero pointing at the event page, marked as in stock, and flags the event as free to attend.
Working with SEOPress
HappenBoard checks for SEOPress before printing. If SEOPress is active and you have configured a custom Event schema for that exact post through the SEOPress interface, HappenBoard stays quiet and lets SEOPress own the markup, so the page never carries two competing Event blocks. Everywhere else, HappenBoard prints its own. The SEOPress integration guide covers the rest of that pairing.
Checking the output
Only published events produce markup. Drafts, private events and events with no resolvable start produce nothing, which is expected.
To read the payload without digging through page source, open /wp-json/happenboard/v1/events/123/schema on your site, replacing 123 with the event ID. It returns exactly what the page prints, which is convenient for pasting into a rich-results validator.
What’s next
- Build the single event page that this markup describes.
- Pair HappenBoard with SEOPress.
- Geocode your venues so the markup carries coordinates.