fix: single enriched MusicEvent JSON-LD emitter per GSC findings#617
Merged
Conversation
Event pages emitted MusicEvent structured data twice (SSR + client), and Google's Events email flagged five missing-field warnings that were exactly the union of the two blocks' gaps. The SSR function is now the sole emitter — crawlers fetch URLs fresh, so the server block is what search renders — enriched with organizer (+ Instagram sameAs), offers.validFrom (event creation date), and full-URL eventStatus / eventAttendanceMode. The factually wrong price:"0" (free tickets!) is removed; priceCurrency and availability stay. image deliberately deferred to #616 (per-event posters). Closes #615 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
BreakableHoodie
enabled auto-merge (squash)
July 17, 2026 11:44
This was referenced Jul 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Google's Events structured-data email flagged 5 missing-field warnings (
offers.validFrom,image,offers.priceCurrency,organizer,eventStatus) — exactly the union of the gaps in the TWO duplicate MusicEvent JSON-LD blocks event pages emitted (SSR function + client SPA). The SSR function (functions/event/[slug].js) is now the sole emitter — crawlers fetch URLs fresh, so the server-rendered block is what search renders — enriched with everything the two blocks had between them plus the missing fields. Also removesprice: "0", which told Google our ticketed events are free.imageis deliberately deferred to #616 (per-eventposter_url— the only current asset is a 180px favicon, which would look worse in search results than the warning does).Closes #615
What changed
functions/event/[slug].jscreated_atadded to the event SELECT; MusicEvent gainsorganizer(SetTimes + InstagramsameAs, viaCANONICAL_HOST), full-URLeventStatus/eventAttendanceMode, andoffers.validFrom(regex-guarded date part ofcreated_at; omitted when null/malformed);price: "0"removed,priceCurrency: CAD+availabilitykeptfrontend/src/App.jsxfunctions/event/__tests__/slug.test.jsvalidFrommatches seededcreated_atwith nopricekey, offers absent withoutticket_urlDocumented trade-offs (Recommended-only fields, won't fail validation):
validFromuses site-publication date as the on-sale proxy (we don't track true on-sale dates);priceCurrencystands withoutprice(we don't store prices — truthful currency beats an invented number).Security / correctness notes
offers.urlkeeps the #504 read-path sanitization (normalizeHttpUrl). Client block deletion also removes a path where the raw unsanitizedticket_urlreached JSON-LD. No auth surface.Verification
slug.test.js5/5; frontend 519 pass (50 files)validate:openapi: n/a — HTML-serving function, not in the API specBuilt by Sonny · Reviewed by Vera & Theo · 🤖 Claude Code