How AY Rank Ships 500+ Indexable City × Service Pages from One Data File
One data file turns into 500+ pages. Cities, services, FAQs, schema, hreflang, OG cards. Every page is reviewed by an agent loop that checks it reads human, then a final QA pass against Google Rich Results before it ships.
- Cadence
- Weekly batch + per-page hotfix
- Output
- Indexable city × service pages
- Category
- Content production
Programmatic SEO at scale is the highest-leverage content play and the most dangerous. Google's scaled-content-abuse policy targets exactly this surface; if every page reads as a template stamp, the whole grid gets demoted. We solve it with an agent-based generation pipeline where each page is composed and reviewed by AI agents working from real city demographics, real customer FAQs, and real schema. The output reads human and ships at scale because the agents do the per-page tailoring a human team could not.
The workflow.
8 steps · runs at weekly batch + per-page hotfix
- 01
Master data ingestion
A single Supabase table holds the 50 cities, 10 services, 10 industries, 8 languages, plus per-city demographics, population, and competitor data. Adding a city is one row; the system regenerates every page touching that city automatically on next build.
- 02
Per-page brief assembly
For each (city, service) combination, an orchestrator pulls the brand entity, the city demographics, the top 3 ranking competitors from Ahrefs, and the live SERP from Brave Search. That brief becomes the input contract for the generation agents downstream.
- 03
Multi-agent draft generation
Using Claude Agents SDK we run a writer agent, a fact-check agent, and a voice agent in a loop. The writer drafts intro + body + FAQ from the brief; the fact-check agent verifies every claim against the source brief and rejects hallucinations; the voice agent rewrites anything that reads template-stamped. Final draft typically lands within 2–3 iterations per page.
- 04
Schema + OG generation
For every page, JSON-LD blocks are emitted at build time from the page data: ProfessionalService, FAQPage, BreadcrumbList, and where applicable Service and Place. Per-page OG images are auto-rendered via Vercel OG from the title + brand template.
- 05
hreflang + i18n routing
Each page emits hreflang alternates to its localized siblings (FR / DE / AR / ES / PT / JA / EN). Routes resolve through the Next.js proxy with `x-locale` header detection so AI crawlers see clean canonical URLs per locale, never duplicate content.
- 06
Indexable allowlist + noindex governance
Not every generated page should be indexed. Pages in low-demand cities or weak market fit get `robots: noindex, follow` automatically while still rendering, so existing links keep working but the indexed surface stays tight. Top 20 cities × all services ship to the sitemap; the rest stay reachable but unindexed.
- 07
Rich Results validation
Before deploy, every changed page is checked against the Google Rich Results Test API. Schema failures block the build. We do not ship pages where the structured data is broken.
- 08
Continuous refresh
Pages auto-revalidate on a 1-hour TTL via `unstable_cache` + tag-based invalidation. When the city table updates, every affected page rebuilds within the hour without manual redeploys.
The stack.
A representative cadence.
- MonWeeklyNew cities/services merged into Supabase
- TueWeeklyAgent draft + voice review across affected pages
- WedWeeklySchema validation, hreflang + sitemap regen
- ThuWeeklyDeploy + GSC re-submit
- DailyDailyGSC indexing status pull, drop alerts → Slack
What you get.
- 500+ city × service indexable pages, each with unique copy + schema
- 7-locale hreflang grid auto-maintained from a single source
- Per-page OG image, canonical URL, and FAQ + breadcrumb JSON-LD
- Live GSC indexing dashboard with drop alerts in Slack
Get the full playbook.
The exact agent setup, prompts, schema templates, and QA gates we use to ship 500+ indexable pages without tripping scaled-content penalties.
No spam. Unsubscribe anytime.
Common questions.
Doesn't Google penalize programmatic SEO?
Google penalizes scaled content abuse - pages that read as commodity template stamps with no unique value. The fix is per-page substance, not stopping at scale. Our agent pipeline runs a writer + fact-check + voice loop on every single page so the output reads human and carries real local context (demographics, competitors, FAQs unique to that city). The result is high-volume AND high-quality, which is exactly what Google's documentation says is fine.
How is this different from a templated SEO city-page tool?
Templated tools mail-merge a master string with a city name. The output is by definition commodity content. Our pipeline composes each page from scratch using a multi-agent loop with the city's actual demographics, real competitor SERPs, and a brand voice review. Two pages for two different cities don't share more than the brand entity - everything else is regenerated against the per-city brief.
How many pages can you realistically ship per week?
On a steady-state client we ship 20–40 new or refreshed indexable pages per week. The bottleneck is brief quality, not generation speed - the agents can draft 100 pages a day, but we cap throughput at the rate the brief data is verified.
What happens when a city has no real demand?
It still gets generated and rendered (so any inbound link still resolves), but the page emits `robots: noindex, follow` and is excluded from the sitemap. The page exists for users who land on it; it stays out of the indexed surface so the overall grid quality stays high. We re-promote pages to indexable when their query demand crosses a threshold.
Does the agent loop hallucinate?
The fact-check agent rejects any claim not grounded in the page's brief data. The voice agent flags purple prose. We see hallucinations get caught in the loop on 8–12% of first drafts; almost none make it to publish. The fail-safe is the Rich Results + schema validation gate at deploy - if structured data references a fact that isn't in the body, the build fails.
Related workflows.
Want this workflow running on your brand?
Book a free GEO audit. We'll tell you whether this play moves the needle for your category and what citation share is realistic in 90 days.
Book a free GEO audit»

