How We Scaled SEO at AustinsElite: Building Dynamic Image Sitemaps and Programmatic Page Generation
The SEO Bottleneck We Couldn’t Ignore
AustinsElite has always leaned heavily on organic search traffic—especially during event season. But as our venue and event catalog grew, our SEO infrastructure started creaking. We had hundreds of image assets scattered across dynamically rendered pages, but no centralized way to surface them to search engines. Worse, our venue show pages were static in structure, making it hard to capture long-tail search traffic.
Then came the realization: if Google can’t find our images, they can’t rank them. And if our pages aren’t generated with intent-driven content, we’re leaving visibility on the table. So, in a single 25-commit push, we rebuilt our SEO architecture from the ground up—automating image sitemaps and launching a system for programmatic page generation.
Generating Dynamic Image Sitemaps, One Venue at a Time
Our first move? Build a dynamic image sitemap generator that pulls from both Laravel and Next.js sources. We already had structured data for venues and events in our Laravel backend, but those images weren’t being surfaced in any sitemap. We needed a solution that could:
- Crawl venue and event records with image URLs
- Validate image accessibility (403s and broken paths were surprisingly common)
- Serialize entries in the Google Image Sitemap schema
- Rebuild on demand via a CLI command
We created a new SEOHelper class in Laravel to extract image metadata, including captions, licenses, and geo-tags where available. Then, we built an audit:seo Artisan command to scan for missing or invalid images—catching everything from stale S3 links to improperly formatted timestamps.
The real win was automation. We tied the sitemap generation to our CI pipeline and added a webhook so that any new event or updated venue triggers a sitemap refresh. The output? A gzipped image-sitemap.xml.gz that’s submitted to Google Search Console nightly via API.
// Simplified: How we map venue images to sitemap entries
$images = $venue->events->flatMap(fn($event) => $event->photos->map(function ($photo) use ($event) {
return [
'loc' => $photo->url,
'caption' => $event->title,
'geo_location' => $event->venue->city . ', TX',
'date_taken' => $photo->taken_at
];
});
Within 72 hours of deployment, Google indexed over 1,200 new image URLs—many of which now appear in image search results for queries like "Austin event venue poolside" or "wedding venues with outdoor stages."
Programmatic SEO Pages: From Data to Discoverability
While the image sitemap boosted media indexing, we knew we needed more pages to capture niche search intent. Enter: programmatic SEO.
Instead of manually writing location- or theme-based pages (e.g., "Best Rooftop Venues in Austin"), we built a system that generates them dynamically using structured data. We started by enriching our venue models with tags—rooftop, industrial, outdoor ceremony, pet-friendly—and added boolean flags for SEO-salient features.
Then, in Next.js, we created a generateSeoPages() function that runs at build time. It queries the Laravel API for venue clusters matching specific keyword templates:
- "[Feature] Venues in [City]"
- "[Event Type] Venues with [Amenity]"
- "Affordable [Venue Type] for [Occasion]"
Each template renders a unique page with dynamically composed meta titles, descriptions, and H1s—no more hardcoded tier-based conditionals. We replaced that spaghetti with a clean SeoMeta service that normalizes title casing, trims length, and injects city context.
// Next.js: Generating pages at build time
export async function generateStaticProps() {
const venues = await fetch('/api/venues?tag=rooftop&city=austin');
const pageData = generateSeoContent('rooftop', 'Austin');
return {
props: { venues, ...pageData }
};
}
We launched with 42 generated pages. Two weeks later, 31 are indexed. One page—"Pet-Friendly Wedding Venues in Austin"—already ranks on page one for its target keyword and drives ~200 organic sessions per week.
Results, Not Just Theory
Three weeks post-deployment, the numbers speak:
- Image indexing increased by 340%
- Organic traffic to venue pages up 62%
- Time to rank for long-tail keywords reduced from ~6 weeks to ~11 days
More importantly, our team can now ship SEO improvements without touching templates. New venue types? Just add a tag. New city expansion? The sitemap and page generator handle the rest.
This wasn’t about chasing algorithm updates. It was about building infrastructure that turns data into discoverability—automatically, consistently, and at scale. And for a hybrid Laravel-Laravel 12 app like AustinsElite, that kind of symmetry is rare. We’re just getting started.