SEO-first architecture for platforms with millions of pages
Programmatic pages live or die on crawl, render, and index. What we built for a high-traffic job platform: SSR-first rendering, structured data in CI, self-building sitemaps. And why the AI layer shipped last.
TL;DRFor programmatic SEO, architecture decides what Google sees: SSR-first rendering, structured data generated and validated like code, sitemaps that build themselves from the catalog. AI search features ship after that foundation. They generate engagement; the architecture generates entries.
A job platform lives on programmatic SEO: millions of city × role × category pages, generated from data. Google decides which of those pages earn money. Architecture decides what Google sees.
We rebuilt the platform SEO-first. Indexed pages went up, LCP and TTFB came down, and AI-powered search shipped on top of the same foundation. The pieces:
SSR is non-negotiable for programmatic pages
Client-rendered content is a gamble on Google's render queue. For pages whose entire value is being indexed, that's a bet you lose quietly:
- Server-rendered HTML with complete content on first byte
- TTFB tuned at the infrastructure layer, LCP tuned at the rendering layer
- No skeleton-then-hydrate for crawlers
The discipline that made it scale: every template gets measured as a template. Fix LCP once in the template, win on every one of the million pages. Fix it per-page instead and congratulations, you've signed up for a million fixes.
Structured data as a first-class artifact
Job postings are one of the few verticals where Google hands you rich results, provided your structured data is complete and correct. We treated schema like code, because it is:
- Generated from the same source of truth as the page content, never hand-written
- Validated in CI, so a template change couldn't silently break eligibility
- Semantic linking between jobs, categories, and locations, so crawlers traverse the catalog instead of just landing on it
The CI validation is the part teams skip and regret. Schema rot is invisible in the UI and catastrophic in the index.
Sitemaps that build themselves
Dynamic catalog generation means static sitemaps rot. Ours regenerated from the catalog:
- New pages entered sitemaps on creation, dead ones left without manual cleanup
- Job preview summaries gave crawlers and users accurate freshness signals
Then AI search on top
The AI-powered job search layer (semantic matching, recommendations, AI summaries) shipped after the foundation, not instead of it.
That ordering matters. AI features generate engagement; the SEO architecture generates entries. And the same structured data that feeds crawlers feeds models: machine-readable content is machine-usable content, whichever machine shows up.
The scoreboard
- Indexed pages: up, via structured data and clean crawl paths
- LCP and TTFB: improved through SSR tuning
- Engagement: up with AI recommendations layered on top
SEO-first doesn't mean marketing-first. It means the architecture assumes crawlers are the first user, and builds for them without making the second user wait.