Hey Builder 👋
In August, Claude Code and I rewrote titles and summaries on 130 Careerkit blog posts. In two days.
Last Tuesday I finally got the real grade back.
Oof.
The short version:
Those 130 posts went from 876 clicks to 827. Blog posts I didn't touch grew 20% over the same weeks.
The 90 posts with rewritten summaries lost 39% of their clicks.
8 title rewrites were predicted to add 2,895 clicks. They lost 79. (The prediction was my own tool's. So was the bug. That part's below.)
Quickly, the rest of my week:
Careerkit: bought 4 outreach domains for $45.92, so cold email stops going out from my main domain. First sends are Nov 16.
ReplyBoss: 0 commits. Honest number lol.
HelloBuilder: 102 readers, and last issue got 39.8% opens, the best of the last four. Hi 🫡
If You've Ever Let AI "Optimize" Your Content and Never Checked… This Is for You
I want to talk directly to the founder who ran a batch of AI rewrites, felt very productive, and moved on.
You're not careless. Search Console makes checking annoying. Results lag by weeks, and by then you've shipped ten other things. So "it felt better" quietly becomes the result.
Quick disclaimer: this doesn't prove AI rewrites are bad. It's one site with no A/B test, the batches share pages, and new pages went live in the same weeks. But it's a real grade, and most people never get one.
Here's everything below 👇
✍️ How the rewrites were made
📒 The ledger that made grading possible
🧮 The grader: one script, four verdicts
🐛 The bug that hid the bad news
📉 The actual grades
🛠 How to build your own
How the Rewrites Were Made
It's a Claude Code skill called /growth, with a mode called ctr:
A script pulls Search Console data and ranks pages by expected click lift: impressions × (the click rate that position should get − the click rate it gets).
The agent fetches each page's live title and description.
It drafts new ones: highest-impression search first, something specific, under 60 characters.
Everything lands in an approval queue. Nothing is written until I say yes.
Approved changes publish straight to the CMS.
On Aug 18 and 19 that produced 3 batches: 60 cleanup rewrites on titles, 8 bigger title rewrites and 90 summary rewrites. Some posts got more than one, which is how it comes to 130.
The One Thing I Did Right: a Ledger
Every change adds one line to a file, at the moment it ships. A real one:
action: title_meta_rewrite · note: title -> exact singular phrase "best font for cover letter" · before: 45,976 impressions, 73 clicks, position 6.1 · measured: Jul 19 to Aug 16 · predicted lift: 1,746 · check after: Sep 8
That's the whole trick. The page, what changed, the before numbers, and a date not to look before (about 3 weeks, because Google is slow).
Steal this: you can't grade a change you didn't log. One line per change, written the moment it ships.
The Grader: One Script, Four Verdicts
verify.mjs goes through the ledger. For every row past its check date, it asks the Search Console API for that page over a window of the same length, then applies four dumb rules:
WIN: clicks up, click rate not down.
REGRESSION: clicks down.
FLAT: anything else.
UNDERWATER: 2,000+ impressions, but under a quarter of a deliberately low expected click rate (5% at position 5, 2% at position 10). This overrides everything except a regression.
UNDERWATER exists because the grader once called my cover-letter fonts post a WIN for +17 clicks, on a page turning 83,968 impressions into 69 clicks. The comment in the code says it best:
A gate that reports success on a page converting 1 in 1,200 impressions is not a gate.
Steal this: write the verdict rules before you see any numbers, and keep them dumb enough to fit in four lines.
The Bug: My Grader Was Measuring a Page That Doesn't Exist
The August rows stored each page as url. The script only read slug.
So all 150 of those rows were measured at /blog/undefined. Zero clicks. Graded FLAT.
Every rewrite: flat. Nothing to see here. It looked like boring news, which is the most convincing kind 🙃
It got fixed on Oct 27, with the missing baselines re-pulled. That's when the real grades showed up.
Steal this: test your grader on one page you know went up. If it says flat, the grader is wrong, not the page.
The Actual Grades
Same 28-day windows, Jul 19 to Aug 16 vs Sep 27 to Oct 25:
| Batch | Posts | Clicks |
| Didn't touch (already live in July) | n/a | +20% |
| Cleanup rewrites (titles) | 60 | +25% |
| Bigger title rewrites | 8 | -27% |
| Summary rewrites | 90 | -39% (195 to 118) |
Across the 130 posts: 13 wins, 76 flat, 35 regressions, 6 underwater.
What I read in that:
Cleanup roughly matched doing nothing. A lot of work to land near the control group.
The summary posts lost ranking, not appeal. Impressions fell 30% along with clicks, while the click rate held. People didn't dislike the new summaries. Google showed those pages less.
Quick math break, on my own tool's forecast:
Predicted across the 8 title rewrites: +2,895 clicks
Actual: 303 to 224, so -79
The biggest bet: the fonts post, predicted +1,746. Actual: +4 (73 to 77).
That "predicted lift" was never a forecast. It's arithmetic: impressions times a gap. It assumes the page can ever reach a normal click rate. The fonts post now sits at position 5.8 with 97,552 impressions and 77 clicks, so it's underwater, which is a page-type problem and not a title one. (Yes, the same fonts post from two issues ago. It keeps teaching me things lol.)
The plan: before any more text rewrites, look at what those 90 pages lost, query by query. October's changes get graded on Nov 7.
So… How Do You Build Your Own Grader?
The lazy version, this week:
Log every change in one line when it ships: URL, what changed, clicks, impressions, position, the date window, and a check date 3 weeks out.
Have your agent write the script: for each row past its date, query the Search Console API for that URL over the same window length.
Use four verdict rules, with a minimum impression floor so tiny pages can't fool you.
Measure a control: the same windows for pages you didn't touch. Without it, you'll give your rewrite credit for the season.
Test it on a page you know moved before you believe a single "flat".
If you take one thing away: AI made shipping a rewrite almost free. It did not tell me whether the rewrite worked. Build the grader before the next batch.
🧠 What I Learned on X
📰 AI News
🛠 Tools to Try
⚡ Skills to Try
seobuild-onpage: Turn Live Search Gaps Into a Complete Page
claude plugin marketplace add gbessoni/seobuild-onpage && claude plugin install seobuild-onpage@seobuildrederive: Learn a Codebase by Re-Deriving Its Design Decisions Yourself
npx skills add EricJujianZou/rederiveFloorplan: See How Your App Fits Together in a Plain-English Map
claude plugin marketplace add haydenschmitty/floorplanthenclaude plugin install floorplan@floorplan
📈 Growth & Money
💬 Builder Discussions
Okay, that's it from me. Reply with your question, I answer one every week. And if you've ever graded your own AI rewrites, tell me what you found. I can't be the only one 👀
Keep shipping,
Nishant
