heddle check --only events
Event Schema Check
The events check reads every Event node on a built site, and each event's own page, and fails what Google or Search Console would reject. Without it, an event can look right to every reader while its share card is a broken image, its date has moved a day, or Google can't see it's an event at all. Event markup and share cards that a machine reads correctly as well as a person.
When Heddle is set up on your site, this check runs on every build alongside 25 others, so a page that fails it is fixed before a buyer or a search engine sees it.
Why it exists
Event markup and share cards that a machine reads correctly as well as a person.
On the site this came from, six of these shipped in one week of September 2026, and every one rendered correctly to a reader. An og:image moved to a path the static export never wrote, so every event's card was a broken image. Chapter pages listed sessions as bare links, which Google doesn't read as events, and one page showed a session with no Event node at all.
A rewrite appended the new body under the old one, so the page carried every heading twice. A venue map was referenced for an event whose map was never drawn. And on 3 October Search Console emailed about Event nodes with no description, performer or endDate, because only one kind of event page had been checked.
So, on every built page that carries an Event node (nested ones included):
- Google's required fields (name, startDate, location, eventStatus, eventAttendanceMode, organizer, url) and the three Search Console reports (description, performer, endDate).
- startDate and endDate as a local time with an offset. A bare timestamp gets rewritten in UTC somewhere and moves an evening event to the next day.
- No offers on an event that has happened; on its own page, an upcoming event offers a way in.
- Every Event image is in the build.
- An event on another site doesn't name this company as its organizer. If the company sponsors it, the company is the sponsor.
And on each event's own page (site.json events.pages, default ^/events/[^/]+$). Exactly one Event node, whose url is this page; a share card (og:image in the build, with alt text, and a large Twitter card); no heading on the page twice. Any page that links an event page carries that event's node as well as the link. When site.json events.feed names a file, it is in the build and lists every event page.
Skipped when the build has no Event markup and no event pages.
From lib/checks/events.mjs in the Heddle repository at ddb1b16.
Questions
What does the events check look for?
Event markup complete with local times and offsets, offers only while there are seats, share cards that resolve, and nothing on an event page twice.
Does the events check need an AI model?
No. It reads the built pages or the sources directly, so it runs offline and costs nothing per run.
How do I run it?
Build the site, then run node bin/heddle.mjs check <site> --only events from the Heddle repository.
Work with us
Let the agents bring you the leads.
Tell us about your business and who buys from you. On a short call we'll show you the searches your buyers make where you don't show up yet, and what the agents would do about them in their first month.
On the call, for your site
- The searches your buyers makeMeasured, with how many people make each one
- Where you show up, and where you don'tOn Google and in ChatGPT's answers
- The agents' first monthThe pages, fixes and links they would start with