We have taken some great steps in improving the SEO of WordCamp sites by rearranging the URL structure. I think the next step should be outputting Event Schema, to allow WordCamp sites to get rich event snippets. Wordcamp.org should output event schema on event homepages as well as on the individual WordCamp central event page.
What is “event schema”?
Event schema is meta data, in JSON+LD format, that tells Google, and other search engines and platforms, about our events. It gives them the most important event details in computer readable format, so they can use that when they highlight an event.
Schema examples
Below are the examples for event schema that should be shown on the WordCamp.org event homepage. When adding this Event schema to WordCamp Central (here, for example) we should add a url attribute at the top level, pointing to the WordCamp homepage URL.
Note that this event schema can be left on the page after the event is done. The event schema can also stay on the previous homepage, so a 2019 version of a WordCamp could still have the 2019 schema.
Schema for online events
{
"@context": "https://schema.org",
"@type": "Event",
"organizer": {
"@type": "Organization",
"name": "WordCamp Finland 2020 organizing team",
"url": "https://finland.wordcamp.org/2020/about/organizers/"
},
"name": "WordCamp Finland 2020",
"description": "Join the Finnish, Nordic and European WordPress Community for a full day of learning, sharing and fun!",
"image": "https://finland.wordcamp.org/2020/files/2020/09/wpfi2020-logo-black.png",
"startDate": "2020-11-12T12:00+02:00",
"endDate": "2020-11-12T17:00+02:00",
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/OnlineEventAttendanceMode",
"location": {
"@type": "VirtualLocation",
"url": "https://example.com/"
},
"offers": {
"@type": "Offer",
"name": "Free ticket",
"price": "0",
"priceCurrency": "EUR",
"validFrom": "2020-10-27",
"url": "https://finland.wordcamp.org/2020/tickets/",
"availability": "https://schema.org/InStock"
}
}
Schema for offline events
{
"@context": "https://schema.org",
"@type": "Event",
"organizer": {
"@type": "Organization",
"name": "WordCamp Alaska 2020 organizing team",
"url": "https://alaska.wordcamp.org/2020/about/organizers/"
},
"name": "WordCamp Alaska 2020",
"description": "Join the Alaskan WordPress Community for a full day of learning, sharing and fun!",
"image": "https://alaska.wordcamp.org/2020/files/2020/09/wp-alaska-2020-logo-black.png",
"startDate": "2020-11-12T12:00+02:00",
"endDate": "2020-11-12T17:00+02:00",
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
"location": {
"@type": "Place",
"name": "Our WordCamp venue",
"address": {
"@type": "PostalAddress",
"streetAddress": "Address line 1",
"addressLocality": "City",
"addressRegion": "AK",
"postalCode": "12345",
"addressCountry": "US"
}
},
"offers": {
"@type": "Offer",
"name": "Regular ticket",
"price": "25",
"priceCurrency": "EUR",
"validFrom": "2020-10-27",
"url": "https://alaska.wordcamp.org/2020/tickets/",
"availability": "https://schema.org/InStock"
}
}
Schema for cancelled events
{
"@context": "https://schema.org",
"@type": "Event",
"name": "WordCamp Finland 2020",
"description": "Join the Finnish, Nordic and European WordPress Community for a full day of learning, sharing and fun!",
"image": "https://finland.wordcamp.org/2020/files/2020/09/wpfi2020-logo-black.png",
"startDate": "2020-11-12T12:00+02:00",
"endDate": "2020-11-12T17:00+02:00",
"eventStatus": "https://schema.org/EventCancelled",
"eventAttendanceMode": "https://schema.org/OnlineEventAttendanceMode",
"location": {
"@type": "VirtualLocation",
"url": "https://example.com/"
},
"organizer": {
"@type": "Organization",
"name": "WordCamp Finland 2020 organizing team",
"url": "https://finland.wordcamp.org/2020/about/organizers/"
},
"offers": {
"@type": "Offer",
"name": "Free ticket",
"price": "0",
"priceCurrency": "EUR",
"validFrom": "2020-10-27",
"url": "https://finland.wordcamp.org/2020/tickets/",
"availability": "https://schema.org/InStock"
}
}
UI controls
A lot of this data comes from existing fields / settings in the system. I think these are the ones that we might need to be able to change manually:
- event attendance mode (online vs offline vs mixed);
- event status dropdown (type can be one of these event types), where I suggest we do not add support for
EventPostponedandEventMovedOnline;- when an event is rescheduled, it needs a setting plus
previousStartDateattribute for its previous date;
- when an event is rescheduled, it needs a setting plus
- event description;
- virtual location URL.
Decisions still left to make
- Should the organization bit refer to the organizing team or to the WordCamp foundation or something else?
Thanks to @francina, @sippis and @jonoaldersonwp for providing early feedback on this idea.