Here's a paradox that took me three months and a lot of staring at Google Search Console to understand: one of my pages ranks #35 for its target keyword and gets essentially zero traffic. Another ranks #66 on a different site and actually pulls a click now and then. The #35 page is the "better" result by every conventional SEO metric. It's also worthless.
The difference isn't the ranking. It's what I should have checked before writing either page.
I run a small network of B2B software comparison sites — project management tools, HR platforms, VPNs, that kind of thing. Earlier this year I batch-published a few hundred AI-assisted articles across them. The technical SEO was clean: sitemaps submitted, canonicals correct, pages indexed within days. Search Console showed over 50,000 impressions across five domains in three months.
Total clicks from search: seven.
This is the post I wish I'd read before any of that. Not another "AI content is dead" take — the actual mechanics of why AI-written content stalls out, and the one input that changes the outcome.
The uncomfortable middle: indexed but invisible
When your content gets indexed but sits at position 70+, you're in the worst spot in SEO. Not penalized enough to diagnose, not visible enough to learn anything. Page 8 doesn't exist for practical purposes.
Looking at the Search Console data, all five sites showed the same pattern: impressions trickling in, position stuck between 66 and 77, clicks at effectively zero. When everything is uniformly mediocre, the problem isn't one page — it's the system that produced all of them.
There were three separate root causes, and each one is worth its own section.
Reason 1: I never checked whether anyone was searching
The #35 page I opened with? Its target keyword gets almost no search volume. Twenty-six impressions in a quarter. I could hold every position from 1 through 10 and it wouldn't move the needle.
This is the dumbest possible mistake, and I made it because AI content is cheap enough that "why not publish it" feels like a strategy. It isn't. When generation cost approaches zero, the constraint moves entirely to demand. Publishing into a keyword with no search volume isn't neutral — it dilutes your site's topical signal and wastes crawl budget.
The fix is boring and non-negotiable: verify demand first. Not "the keyword tool says 1,300/month" — actually look at whether the SERP for that keyword has features that absorb clicks (AI overviews, paid blocks, People Also Ask), because the clickable organic pie is smaller than the raw volume suggests.
Reason 2: The model writes the average of its training data, not the answer to the query
This is the core issue with AI content, and it has nothing to do with writing quality.
A language model generating an article about, say, "BambooHR vs Workday" produces a statistical blend of every HR software article it has ever seen. The output is competent, grammatical, and structurally generic. But the top 10 results for that exact query are not a statistical average — they're specific documents that won a specific competition. They cover the subtopics the searcher demands, at the length the intent rewards, mentioning the entities whose absence looks conspicuous.
My AI articles were answering "what is a comparison of HR software, in general?" The SERP was asking "what does a person comparing these two specific tools need to know?" Those are different documents, and Google can tell.
The fix: feed the model the SERP before it writes. Pull the top 10 results, extract the pattern — median word count, the H2s that repeat across results, the entities most results mention, the intent class — and make that the brief. The model stops guessing and starts filling a slot that already provably ranks.
Reason 3: Template fingerprints (briefly)
The third root cause deserves its own post, and I'll write it: when you generate hundreds of articles through the same pipeline, they share sentence-level fingerprints even when every article is "unique" by plagiarism-checker standards. Same skeleton, different words. Algorithms see that. I ended up building an n-gram similarity detector and rewriting my generation logic around it — that's a separate story.
The pre-writing check I now run on every keyword
Three steps, maybe ten minutes per keyword, and it kills bad ideas before they cost you anything:
1. Confirm real demand. Search volume exists, and the SERP isn't so crowded with paid results and AI overviews that organic clicks are structurally gone.
2. Read who's ranking. If the first page is G2, Capterra, Forbes, and three vendors' own domains, you are not out-ranking them with a new domain and no backlinks. Find the adjacent keyword where the first page is forums, thin listicles, or Reddit threads — that's a SERP Google is openly dissatisfied with.
3. Classify the intent before generating anything. A comparison keyword wants tables and pricing sections. A "what is" keyword wants definitions and diagrams. A "best X for Y" keyword wants a curated list with a clear pick. Generating a listicle for a comparison query fails no matter how well it's written.
Here's the stripped-down version of the SERP check I run — SerpAPI's free tier is enough to bootstrap:
import requests
def serp_competition(keyword: str, api_key: str) -> dict:
resp = requests.get(
"https://serpapi.com/search.json",
params={"q": keyword, "num": 10, "api_key": api_key},
timeout=30,
)
data = resp.json()
results = data.get("organic_results", [])
# Big-brand domains that a new site can't realistically beat
HARD = {"g2.com", "capterra.com", "forbes.com", "hubspot.com",
"techradar.com", "pcmag.com", "zapier.com"}
hard_hits = sum(1 for r in results
if any(r.get("link", "").endswith(d) for d in HARD))
word_count_signal = "missing" # fetch pages for real counts
return {
"keyword": keyword,
"results": len(results),
"hard_domains_on_page_one": hard_hits,
"has_ai_overview": bool(data.get("ai_overview")),
"verdict": "skip" if hard_hits >= 6 else "worth a look",
}
The verdict logic is crude, but crude beats publishing blind. hard_domains_on_page_one >= 6 has saved me from more wasted articles than any writing improvement ever has.
What changed when the SERP became the input
After rebuilding the pipeline around SERP data, the difference showed up in the only place that matters — Search Console. The articles generated closest to the extracted SERP pattern were the first ones in my batch to crack the top 50. Small sample, early days, and a new domain with no backlinks still fights uphill. But the direction matches what every working content strategist says offline: meet the intent, then differentiate.
The honest framing: SERP-driven generation doesn't make bad sites rank. It removes the self-inflicted wound of writing the wrong document for the wrong query. You still need demand, a winnable SERP, and time.
If you want to run the SERP check without writing code, I packaged the whole thing — pattern extraction, brief generation, drafting — into SerpCraft. Paste a keyword, see what the first page actually rewards. Free tier, no card.
If you've pulled your AI content out of the position-70 dead zone, I'd genuinely like to know what moved the needle — demand validation, intent matching, or something I haven't listed here.
Top comments (0)