Skip to main content
5 Min ReadAI Visibility

How an AI SEO Agent Writes Blog Posts From Search Console Data

Weekly. Guided by what you're close to winning. Hero image matches your site.

Most AI content tools pick blog topics from generic keyword lists and illustrate them with stock 3D renders. An SEO agent that reads your Search Console data does the opposite: it picks topics from what you're already close to ranking for, then generates an image that actually looks like it belongs on your site.

The weekly rhythm

A new todo lands in your list: Write blog post: [title]. Click Approve. About sixty seconds later you're on a preview with a full draft, a matching hero image, and an Open PR button. That's the whole interaction.

The leverage band is positions 11 to 30

The highest-leverage signal in Search Console is the opportunity band: pages ranking at positions 11 to 30 with real impressions. These pages are on page two of Google, already indexed and already relevant enough to show up. They just need one more push.

The click-through rate cliff between page one and page two is the single biggest discontinuity in the SERP. Position one captures roughly 28 to 40 percent of clicks on most queries. Position ten drops to around 2.5 percent. Position eleven, where page two begins, falls under one percent. A page at position 14 with 2,000 monthly impressions is getting maybe 10 clicks. Push it to position 8 and it picks up 50. Push it to position 3 and it picks up 300.

That is what the agent optimises for: propose a post that supports a specific opportunity page with internal links, a related FAQ, or adjacent long-tail coverage. Anything below position 30 gets ignored because Google treats those ranks as effectively invisible, and chasing them with new content rarely pays.

Your ranking data, not a keyword list

Before Claude proposes anything, the agent loads four sources from memory:

Every blog-idea call, every week
const ideas = await generateBlogIdeas({
  siteProfile,        // ICP, niche, goal (from homepage analysis)
  gscWinners,         // pages ranking top-10 + their queries
  gscOpportunities,   // pages at positions 11-30 with real impressions
  existingPaths,      // sitemap, to skip topics you've already covered
})

Each input does a different job. Site profilegates everything downstream. It contains the ICP, niche, goal, and primary keyword, all extracted from your homepage on first scan by Haiku. If your ICP is “solo developers building SaaS”, topics skew technical. If it is “small dental clinics”, topics skew accessible. ICP alone kills most of the topic drift generic AI content tools suffer from.

Sitemap is a negative filter. If you already have a canonical-url-guide post, the agent will not propose another. It proposes adjacent topics that fill gaps: canonical issues specific to SPAs, canonicals on paginated archives, canonical tags versus 301 redirects. GSC winners reinforce proven clusters: if you rank top-10 for “meta description best practices”, the agent treats that as a topical strength and proposes supporting posts around it. GSC opportunities are where the highest-leverage bet lives, as covered above.

The draft sounds like you, not a generic AI

Writing for solo developers is different from writing for a dental clinic. The draft writer reads your ICP string and switches examples accordingly: terminals and code blocks for technical readers, dashboards and checklists for marketers, monitors and runbooks for ops teams. Same quality bar across the board, different surface.

Two or three queries from your GSC opportunity list get worked into the body naturally, not as keyword stuffing but as the actual phrasing a reader would use. This is how the new post reinforces the cluster instead of scattering to a new one. The closing CTA is tied to your site's goal from the profile, not a boilerplate “learn more”.

The image matches your palette, not stock-photo hell

Every SEO blog tool produces sterile 3D-render illustrations because they're all calling the same text-to-image endpoint with a generic prompt. A visitor scrolling past your blog can tell instantly the image was auto-generated, and that breaks the visual trust the rest of the site worked to build.

The difference here is the reference. Every scan captures your homepage screenshot. When the blog pipeline needs an image, that screenshot is passed to gpt-image-2 as a style reference. The model derives palette, density, and mood from your actual site. The prompt then locks out the tells of AI slop: no text, no faces, no 3D, no stock-photo aesthetic, no dark background. It also keeps primary elements in the central two-thirds so social-media previews can crop without losing focal detail.

Capped at 10 drafts per domain per month

Post-HCU research is consistent across Semrush (20k articles), SEJ (260k SERPs), and the Content Warehouse leak: a site of 10 strong posts out-ranks a site of 50 average ones. The cap stays under Google's content-farm threshold and keeps link equity concentrated on fewer stronger pieces.

The agent grades its own work after 14 days

Every post shipped via PR is graded against GSC at 14, 28, and 90 days. The grading cron compares impressions, clicks, and position for the target query (and the opportunity page it supported) before versus after the post landed. The verdict is one of positive, flat, or negative, written back to a fix outcomes table.

The next round of idea generation reads those verdicts. Clusters where posts graded positive get prioritised. Clusters where posts graded flat or negative get deprioritised. Over six months of operation, the agent has real opinions about which topical clusters move traffic on your specific site. A generic AI content tool writes a hundred posts and hopes. This one writes ten and learns.

What if my site is brand new and has no GSC data yet

The agent falls back to ICP plus sitemap alone. It won't invent winners that don't exist. It picks the clearest topical gap given your profile and writes the best first post it can. By the time that post has 28 days of GSC data, the next suggestion cycle has something real to work from.

This is why the pipeline ships both paths at once. The cold-start mode uses ICP plus sitemap; the warm mode layers winners and opportunities on top. The prompt shape doesn't change, the model just gets richer ingredients over time. A site that starts blank runs the same agent as one with three years of GSC history. Output quality ramps up as data ramps up.

FAQ

How does an SEO agent decide what blog post to write?

It reads four memory sources: your site profile (ICP, niche, goal), the sitemap (to skip topics you've already covered), GSC winners (pages ranking top-10), and GSC opportunities (pages at positions 11-30 with real impressions). It proposes topics that extend clusters you already rank for, or target queries you're one nudge from page one on.

What is a GSC opportunity page and why does it matter?

A GSC opportunity page is a URL ranking at positions 11 to 30 with real impressions on a specific query. These pages are on page two of Google, one nudge from page one where almost all organic clicks land. A new supporting post with internal links and a related FAQ often pushes the original to page one, which typically multiplies that page's clicks by 5 to 10 times.

Does the hero image actually match my site design?

Yes. The image generator uses your homepage screenshot from the last scan as a style reference and passes it to gpt-image-2. The output derives palette, density, and mood from your actual site, not a stock-photo template. The prompt also locks out text, faces, 3D renders, and stock-photo aesthetic so the output stays consistent.

What happens if my site is new and has no GSC data yet?

The agent falls back to ICP plus sitemap only. It picks the clearest topical gap given your profile and writes the best first post it can. After 28 days of GSC data accumulates, the next suggestion cycle layers in winners and opportunities automatically. Same pipeline, richer inputs over time.

DS

Daniel Smidstrup

Building SEOLint and other developer tools at danielsmidstrup.com

← All articles