Back to HTML Pub

One Brief, 40 Landing Pages: Building a Programmatic Page Factory With Claude and MCP

Michael Sacca•
AI-Native Publishing
Automation
Landing Pages

Most "AI builds your landing page" tutorials have the same ending: one prompt, one page, publish. That's fine if you run one campaign. But if you're running paid traffic, one page was never the goal — you need a variant per ad group, per keyword theme, per angle. Forty pages, not one. And the manual path (regenerate, tweak, rename, deploy, repeat) collapses around page six.

The insight most people miss: the hard part of programmatic landing pages was never the code. The code is the easy part once an LLM writes it. The hard part is the loop — getting the brief in, the page out, and the deploy done without becoming a copy-paste machine. That's what Claude plus MCP servers solves, and it's a natural extension of the MCP setup we described in MCP for Marketers: Wiring Claude Into Your Domain, Deploy, and Analytics Pipeline.

Why "speed-to-variant" is the real question

When someone searches "best landing page builder," the surface question is features. The real question underneath is: how long does variant #2 take after variant #1 ships? We've argued this before in The Iteration Speed Tax: Why Your AI-Built Landing Page Wins or Loses on Revision Time, Not Launch Time — launch speed is a one-time win, revision speed is a compounding one.

Programmatic generation takes that logic to its endpoint. If a single variant takes an hour of human hands-on time, you'll run three variants and call it testing. If a variant takes four minutes because a pipeline produces it, you'll run forty — one per keyword theme, one per pain point, one per competitor comparison. The quality of your paid program improves not because the pages got better, but because there are suddenly enough of them to learn from.

The anatomy of a page factory

A factory has inputs, a template layer, a generation step, and an output step. Here's the shape that's worked for us:

1. The brief, structured

Don't prompt Claude with prose for each variant. Build a structured brief — a spreadsheet, a YAML file, whatever you'll actually maintain — with one row per variant:

- slug: crm-for-agencies
  audience: "agency owners managing 10+ client accounts"
  pain: "spreadsheets breaking at scale"
  offer: "14-day trial, no card"
  keyword_theme: "CRM for agencies"
  proof_point: "used by 200+ agencies"
  tone: "direct, no fluff"

Every field here becomes a variable in the page. The slug becomes the URL. The pain becomes the H1. The keyword theme becomes the title tag and the ad-to-page message match. If you read our $2,000 paid traffic test in We Sent $2,000 of Paid Traffic to an AI-Built Landing Page. Here's What the Numbers Say, message match was where the AI-built page earned its keep — and structured briefs are how you enforce match at scale.

2. The template, separated from the content

Your page shouldn't be generated from scratch every time. Freeze the layout, the component structure, the tracking snippet placement, and the CSS into a template with named slots:

<h1>{{ headline }}</h1>
<p class="subhead">{{ pain_reframe }}</p>
<section id="proof">{{ proof_point }}...</section>

This does two things. First, it keeps visual consistency across forty pages, which matters more than most teams expect — a visitor who clicks two of your ads should see two pages that feel like the same company. Second, it means your pre-flight QA checklist (the one from The 90-Minute Pre-Flight Check: 12 Things to Verify Before Paid Traffic Hits Your AI-Built Landing Page) only needs to be run on the template once, not on every generation.

3. Generation: one Claude session, many variants

With a structured brief and a slotted template, generation becomes a batch job. Feed Claude the full brief file and the template, and ask for one complete page per row — copy written to the tone field, headline built from the pain and the keyword theme, subhead reframing the pain, proof section populated from the proof point.

The prompt that matters here isn't "write a landing page." It's closer to:

For each variant in brief.yaml, generate a complete index.html
from template.html. Fill every slot. Do not invent offers,
proof points, or claims not present in the brief. Output one
file per variant named {slug}/index.html.

That last instruction — do not invent — is the one that keeps a factory honest. Claude will happily generate a plausible-sounding testimonial or a statistic you can't back up. In a one-off page, you'd catch it. Across forty files, you won't. Constraint it at the prompt level and spot-check the output.

4. Deploy: where MCP earns its place

Without MCP, step 4 is you, opening your deploy tool, dragging forty folders. With MCP wired into your host, Claude does the push itself — one command per slug, or one command that loops the batch. This is the same pipeline described in MCP for Marketers: Wiring Claude Into Your Domain, Deploy, and Analytics Pipeline, just applied to volume instead of a single page. The deploys-and-analytics layer stops being "something you do after building" and becomes part of the generation loop: generate, deploy, confirm live, move to the next slug.

If your host setup is still the one from AI Domain Hosting vs Shared Hosting: What Actually Changes When Claude Builds Your Site, this is the point where the hosting choice stops being academic. Shared hosting plus FTP makes a forty-page batch a manual afternoon. A host with a deploy API or an MCP integration makes it a prompt.

What breaks at volume (and how to catch it)

Running the factory for real surfaced three failure modes worth knowing before you generate your first batch:

Drift between variants. By variant #25, the copy starts subtly contradicting itself — different offer wording, inconsistent tone. Fix: every variant's copy must trace to a brief field. If Claude wrote something not in the brief, it doesn't ship.

Template rot. You ship the batch, then someone asks for a tracking snippet change on all forty pages. If your template and generated pages have diverged, that's forty edits. Fix: keep the template as the single source of truth and treat generated pages as build artifacts — regenerable, never hand-edited. This is the same "who edits the page after launch" problem from The Page Went Live. Now Someone Wants to Change It: Who Maintains an AI-Built Website?, multiplied by forty. The answer is the same: change the template, regenerate, redeploy.

Index and QA debt. Forty live pages need a sitemap, consistent analytics across all of them, and a way to know which page maps to which ad group. Fix: make the sitemap and the tracking-snippet placement part of the template, and have the generation step emit a manifest file — slug, ad group, URL, deploy date — that you can hand to whoever runs the campaigns.

The honest tradeoff

A factory is worth building around the point where you'd ship more than a handful of variants per campaign cycle. Below that, it's over-engineering — a single well-built page per campaign, made the way we describe in The Landing Page Builder Scorecard: How Paid Teams Should Judge "Best" in the AI Era, is the right call.

But if you're the person who's already spent a full afternoon hand-tweaking variant #7 and you have 33 more keyword themes queued, the factory isn't a nice-to-have. It's the difference between testing what matters and testing what you had time for. One brief in. Forty pages out. And the loop — brief, generate, deploy, measure — becomes the machine you run every campaign through, not a project you build once and abandon.

Keep Reading