Injecting Structured Data into Concert Event Pages: A Multi-Site JSON-LD Strategy
During this development session, we tackled a critical SEO and discoverability problem across the JADA event infrastructure: concert pages were shipping to production with zero structured data. This post covers the technical approach we used to inject Event and LocalBusiness JSON-LD schemas into 12 active concert pages, deploy them across multiple S3 buckets, and invalidate CloudFront distributions—all while maintaining page integrity and reducing manual effort through automation.
The Problem: Invisible Events
Concert pages on event subdomains (paulsimonradyshell.com, radyshellsummer.com, etc.) were rendering perfectly for human visitors but were invisible to search engines and rich snippet processors. Google's crawlers had no structured data to understand:
- What event was being described
- When and where it was happening
- Ticket availability and pricing
- The venue's location and contact details
This meant no Rich Results in Google Search, no Knowledge Panel eligibility, and missed opportunities for organic discovery. We had 157 existing reviews across Google and Yelp but no structured data bridge to connect them.
Technical Architecture: Audit, Generate, Deploy
Step 1: Auditing Existing Pages
First, we inventoried all event pages across the infrastructure:
queenofsandiego.com/events/
└── [individual concert pages]
paulsimonradyshell.com/
└── [concert detail pages]
radyshellsummer.com/
└── [summer event pages]
[other event subdomains]
We then checked which pages already had structured data using grep and manual inspection of the HTML source. The result: zero pages with JSON-LD or microdata. This was our baseline.
Step 2: Building the Injection Script
We created a Python script at `/Users/cb/Documents/repos/tools/inject_structured_data.py` that:
- Parses HTML concert pages and extracts metadata (title, date, venue, price)
- Generates valid Event and LocalBusiness JSON-LD blocks
- Injects them into the `` section before the closing `` tag
- Preserves all existing HTML and only adds the new `