Back to HTML Pub

Feed Your Search Terms Report to Claude: Landing Pages That Match the Ad Before You Write a Word

Michael Sacca
AI-Native Publishing
Paid Traffic
Landing Pages

We've spent a few posts on this blog fixing message match after the fact. In Before Your New Landing Page Goes Live, Make Claude Read Every Ad Against It, the workflow was: draft the page, then run Claude as a QA layer over the finished copy. And in The Real Test for an AI Landing Page Builder, we argued that the only metric that matters is how fast you can ship a variant for a failing ad group.

Both of those workflows share the same shape: write first, check second. That works. But there's a better shape available, and it starts with a file most paid search teams export every week and never think twice about: the search terms report.

The search terms report is the ground truth

Here's the thing about landing page copy: it's usually written from a brief, or a positioning doc, or whatever the marketer thinks the customer calls the product. The search terms report is the customer's actual vocabulary — the literal strings they typed into Google before your ad showed up.

If someone searches "cheap same-day plumbing repair" and lands on a page that says "residential emergency plumbing services," the offer might be identical, but the words don't overlap enough for that visitor to feel seen. Message match isn't about semantics; it's about surface language. And the search terms report is a ranked list of that surface language, sitting in a CSV, updated constantly.

So instead of asking Claude to review a page against your ads, feed it the raw inputs and let it generate the page with match already wired in.

The inputs you need

This only works if Claude can see the same things a good media buyer sees:

  1. The search terms report — your exported CSV from Google Ads or Microsoft Advertising, with columns for the search query, the ad group it triggered, and ideally conversion data.
  2. The ad copy itself — headlines and descriptions per ad group, not just the final URLs.
  3. Your base landing page template — the HTML you'd otherwise hand-edit, hosted on your own domain.

If you've already built the MCP setup from Skip the Builder: Hook Claude to Your Own Site With MCP and Ship Landing Pages in Minutes, you're most of the way there. That post covers wiring Claude to your own hosting so it can publish directly. What's new here is the input side: before Claude writes anything, you hand it the report and the ads, and make the match part of the generation prompt rather than a review step.

What the prompt actually looks like

The key move is segmenting the report by ad group or theme before anything else happens. Don't dump 5,000 rows into the context and ask for a page — that produces mush. Instead:

Here is a search terms report (attached CSV) and the ad copy
for three ad groups. For each ad group:

1. Cluster the search terms by intent and vocabulary — not just
   volume. Note the exact phrasings that recur.
2. Compare each cluster against the ad copy that triggered it.
   Flag where the ad language and the searcher language diverge.
3. Generate a landing page variant per cluster where the hero
   headline uses the searcher's dominant phrasing, the subhead
   bridges to the ad's promise, and the body copy reuses the
   top recurring terms naturally — not stuffed.
4. Publish each variant to [my hosting via MCP] and give me
   the URLs mapped to ad groups.

Step 2 is the one people skip, and it's quietly the most valuable. When Claude compares ad language to query language before writing, it catches the mismatch the old workflow would have caught later — except now the fix is baked into the draft instead of patched onto it. You're running the same QA logic from the review-based post, just upstream of the blank page instead of downstream of it.

Why generation beats review (and where it doesn't)

The honest caveat: generating from search terms only works when you have enough data for the terms to be meaningful. A brand-new campaign with twenty clicks doesn't have a vocabulary yet — for that, the ad copy alone is the better source, and the post-launch review pass still matters, because the search terms report will eventually tell you things your ads never claimed.

That's actually the strongest version of the loop:

  • Before launch: ads + template → Claude generates variants matched to ad copy.
  • Two weeks later: search terms report → Claude finds where real queries diverge from the ad language → it rewrites the hero and body copy for that ad group → publishes via MCP → you point the ad group's final URL at the new page.

The report becomes the feedback signal, not just the starting input. The page stops being a static artifact and becomes something that tracks the language your market actually uses — which drifts, seasonally and otherwise, whether you notice or not.

The practical details that make or break it

A few things we've learned running this pattern:

Deduplicate aggressively. Search terms reports are full of near-duplicates and one-off junk queries. Have Claude cluster first and show you the clusters before generating pages — otherwise you'll publish ten variants when two were warranted.

Watch the negative-keyword side. The same report that tells you what to say also tells you what queries you're matching that you shouldn't be. If a big cluster of terms is unrelated to your offer, that's an ad group problem a new landing page can't fix — flag it back to the buyer instead of writing copy for it.

Keep the mapping explicit. Every published URL should come back with the ad group it belongs to. Claude publishing pages through MCP is great; Claude publishing pages and leaving you to figure out which ad group they map to is how orphaned variants happen.

Re-run the report regularly. The value isn't one big generation session — it's a cadence. Same inputs, same prompt, fresh data. The whole point of owning your stack on your own domain, as we argued in Keep Your $10/Year Domain. Let Claude and ChatGPT Do the Hosting Work., is that regenerating a page costs you minutes, not an agency change order.

The shift in one sentence

The old workflow asked "does this page match the ad?" The new one asks "what does the searcher actually say, and what page should exist for that?" — and lets Claude answer both, from the data you already export every week. The page you needed was sitting in the search terms report the whole time. Now something can finally read it.

Keep Reading