We generate many post titles using Versoo Content Ops, an AI headline variety problem we didn’t expect to hit ourselves. That’s the whole point of the plugin — you give it a title and an intent, and it drafts the post. So we started paying attention to the titles it was actually producing, and the pattern was ugly. Out of 16 recent drafts, 5 used the word “Honest” somewhere in the headline. Nine of them followed the same colon-plus-number structure: “Thing: 7 Ways to Do the Other Thing.” That’s not variety. That’s a template wearing a costume.
This post is about how we found that problem, why it happened, and what we built to fix it. If you’ve shipped any AI-assisted content workflow, you’ve probably seen the same convergence — you just might not have counted it yet.
Our Titles Were Repeating Themselves and We Almost Missed It
The tell wasn’t one bad title. It was scrolling through a batch of drafts and feeling déjà vu. “The Honest Guide to X.” “5 Honest Reasons Why Y.” “Z: 7 Things Nobody Tells You.” Each one was fine on its own. Together, they read like the same person wrote all of them in one sitting — which, in a sense, is exactly what happened, because the AI was working from the same instructions every time.
We pulled the last 16 generated titles and tagged each with a power word and a structural formula. Five titles shared a power word. Nine shared a structure. For a tool meant to sound like different posts on different days, that’s a real problem, not a rounding error.
The Root Cause Was a Prompt That Never Changed
The generation prompt had a hardcoded example list: seven power words, five headline formulas, offered as inspiration every single time. The AI wasn’t malfunctioning. It was doing exactly what a static prompt tells it to do — reach for the same options because they were the only options in front of it, generation after generation.
No memory of what ran last week. No signal about which formula fit which kind of post. No mechanism to say “we used this three times already, try something else.” The prompt was a fixed menu, and the AI kept ordering the same dish because nothing told it not to.
Building AI Headline Variety Across Three Dimensions
The fix couldn’t be “add more words to the list.” A bigger static list just delays the repetition — it doesn’t stop it. Real AI headline variety needs memory: the system has to know what it has already used and actively steer away from it. So we rebuilt the title logic around three dimensions, each with its own selection rules.
Power Word: Curated, Not Scraped
We started from a scraped list of roughly 1,100 “power words” pulled from copywriting sites. Most of them were garbage — words nobody would say out loud, words that fit listicles about diets but not developer tools. We cut that list down to about 230, hand-checked for tone and topic fit. Smaller and sharper beat large and generic. A curated 230 gives the rotation system real choices; an uncurated 1,100 just hides the same five overused words in more noise.
Headline Formula: Matched to Post Type
Not every formula fits every post. A colon-plus-number works for a listicle. It looks forced on a build story like this one. So each formula carries compatibility tags — post type, intent shape — and the system only pulls from formulas that actually fit the content in front of it, rather than picking blindly.
Strong Verb: Biased by Intent, Not Random
The verb slot gets a soft bias from the intent text you type in. If your intent mentions “fixing” or “solving,” the system leans toward verbs like “fix” or “solve” over something generic like “explore.” It’s a bias, not a hard rule — the recency filter still overrides it if that verb ran too recently.
History-Aware Rotation Beats a Bigger Word List
Here’s the mechanism that actually solves the repetition problem: after each generation, Versoo Content Ops stores the power word, formula, and verb it used, tied to that post. Before the next generation, it checks the last roughly 20 posts and excludes anything that shows up too often in that window. Not a permanent ban — a rolling one. Words and formulas cycle back in once they’ve had time to feel fresh again.
The tricky part was verifying what the AI actually wrote, not just what we asked for. Early on, we logged the requested power word as if it were the used power word. But the AI doesn’t always take the suggestion — it sometimes swaps in a close synonym, or drops the word structure entirely and writes something better. So we added a detection pass: after generation, the system scans the actual title and identifies which power word, formula, and verb genuinely appear. That’s what gets recorded as history. Log what was intended, and you’re tracking a wish list, not what your readers see.
That distinction — intended versus actual — is the reason this fix holds up over time instead of drifting back into repetition after a few weeks.
Honest About What This Doesn’t Solve
Curating power words down to 230 means we’ll occasionally miss a word that would’ve fit a specific post perfectly. That’s a real cost. A bigger list has more raw material; a curated one has more consistent quality. We chose consistency because a plugin producing five decent titles beats one producing one great title and four embarrassing ones.
The recency window is also a judgment call, not a law of nature. Twenty posts is short enough to notice repetition fast, long enough to avoid running out of fresh combinations for high-volume publishers. If you generate 50 titles a week, you might want a longer window. We picked 20 because it matched our own publishing cadence, not because it’s universally correct.
And the system still can’t guarantee originality — it guarantees non-repetition of the dimensions we track. A genuinely bad title can still slip through if the power word, formula, and verb are all technically “fresh” but the sentence itself doesn’t work. Rotation logic fixes sameness. It doesn’t replace an editor’s read-through.
What Changed, in Numbers
Since shipping the rotation system, we’ve re-run the same 16-post sample size as a check. The worst-repeated power word now shows up in 2 of 16 titles instead of 5. The colon-plus-number formula dropped from 9 of 16 to 3 of 16, and the other formulas actually got used — something that basically never happened under the static prompt. That’s the outcome we were after: titles that read like they came from different posts, because in every dimension that matters, they did.
This shipped in the same release as our SEO checklist feature, which runs its own post-generation check against a different kind of drift — keyword placement and structure, rather than headline phrasing. Same principle, different target: generate first, then verify what actually happened, not what you assumed would happen.
The Pattern Generalizes Past Headlines
The lesson here isn’t really about titles. It’s about any AI system that runs the same prompt repeatedly and expects varied output. A static prompt with static examples will always converge, no matter how good the examples are, because the AI has no reason to move away from what worked last time.
The fix is the same wherever this shows up: track what the system actually produced, not what you asked it to produce, and use that history to bias the next generation away from repeats. It’s more work than writing a good prompt once and walking away. But a good prompt run 50 times doesn’t give you 50 good outputs — it gives you the same output 50 times, with the serial numbers filed off.