The meta description sweep
Meta descriptions are the cheapest click-through-rate lift you can buy, and almost every blog is leaving them on the table. They don’t directly move rankings, but they decide whether your snippet earns the click — and click-through is itself a ranking signal. Most archives are a mess of descriptions auto-generated from the first paragraph, duplicated across similar posts, or never written at all. Fixing them one post at a time inside a CMS editor is the kind of tedium nobody schedules, so it never happens. Done as a single bulk pass, it’s often the highest-return hour you’ll spend this quarter.
What you need
- Specter synced to your blog
- An AI assistant you already use — Claude, ChatGPT, Gemini, or a CLI
- About ten minutes of attention during the dry-run review
The recipe
Every recipe is the same four-step Specter scaffold — pull, AI pass, dry-run, push. Here’s what each step is for this one:
- Pull a fresh copy. Run a Specter pull so your published content lands as a folder of markdown files, each with its
excerpt/ meta-description field in frontmatter. Commit the folder to git first so you have a clean baseline to diff and revert against. - Run the AI pass. Open the folder in your assistant and paste the prompt below. It iterates over every
.mdfile, reads the body, and writes a new meta description into the frontmatter. - Dry-run the diff. Run a Specter dry-run. You’ll see every post that would change, old value vs. new. Spend ten minutes scanning — spot-check five descriptions for length, since models occasionally overshoot 160 characters and get truncated in the results. Reject anything weird by reverting that file (
git checkout -- path/to/post.md). - Push. Push with Specter. Changes round-trip back to your CMS, lossless.
The prompt
You are an SEO copywriter. For every .md file in this folder:
1. Read the post body and the existing frontmatter.
2. Write a NEW meta description that:
- Is between 140 and 158 characters.
- Includes the post's primary keyword naturally.
- Promises a specific outcome or answer, not a teaser.
- Avoids "in this post", "we'll explore", "learn about".
- Uses active voice and a verb in the first four words.
- Is unique across the whole corpus.
3. Set the meta description / excerpt frontmatter field.
4. Do not touch the post body.
When done, list any posts where you couldn't find a clear primary
keyword, and any under 200 words, so I can review them by hand.
What “good” looks like
Before (auto-generated from the first paragraph):
Ghost is an open-source publishing platform built on Node.js. It was launched in 2013 by John O’Nolan and Hannah Wolfe as a Kickstarter…
After (intent-led, keyword-fit):
Ghost vs WordPress: which platform wins for solo bloggers in 2026? Side-by-side on speed, SEO, themes, and total cost over 3 years.
The “after” makes a promise and front-loads the comparison keyword. Click-through moves.
Cost and time
Order-of-magnitude on real blogs, at current Claude pricing:
| Blog size | Tokens | Cost | Wall-clock |
|---|---|---|---|
| 50 posts | ~120k | $0.20 | 8 min |
| 200 posts | ~480k | $0.80 | 35 min |
| 600 posts | ~1.4M | $2.40 | 90 min |
Pitfalls
- Character counting. Assistants sometimes miss on length. Spot-check five random descriptions — over 160 characters and Google truncates with an ellipsis.
- Duplicate descriptions. The same prompt across similar posts can produce near-identical output. The “unique across the corpus” line in the prompt is there for this reason; verify it held.
- Don’t run it twice. Re-running without changing the prompt produces gratuitous churn. Lock the field once you’re happy.
Where to go next
Once descriptions are done, the natural next sweep is the internal link engine — both touch only metadata and link structure, so they review cleanly back to back. Check Google Search Console two to four weeks later for the click-through delta.