I Automated the Most Boring Job in SEO
Content decay quietly drains traffic from your best posts. Here's how to spot it — and the free WordPress plugin that finds it, explains it, and fixes it with AI.
Every few months, a task lands on my list that inspires quiet dread. Not because it’s difficult — because it’s tedious in a way that glazes your eyes over: going through posts one by one, hunting for articles that used to pull traffic and slowly stopped.
It’s the most boring job in SEO. It’s also one of the most valuable, which is exactly why it never gets done. So I automated it. Here’s what content decay actually is, how to catch it manually if you enjoy suffering, and the free plugin I built so you never have to.
What Content Decay Actually Is
Content decay is what happens when a page that used to rank and pull traffic gradually loses both. Nothing breaks. There’s no penalty, no deindexing, no dramatic cliff you’d catch in a weekly glance. The page just slides — position four to six to nine over a few months, impressions holding while clicks quietly thin out.
It happens for ordinary reasons. A competitor publishes something fresher. Search intent shifts. Google’s sense of what a query deserves moves on and your page doesn’t move with it. The facts on the page age out. Decay is the default state of published content — the natural direction is down, and staying flat takes real work.
Why It’s So Easy to Miss
Decay is dangerous because it’s invisible at the cadence most people watch their analytics. It’s gradual, it’s per-page, and it hides inside the aggregate. Your total traffic can look flat — even up — while a dozen of your best evergreen posts bleed out underneath, propped up by one or two winners having a good month.
You only see it if you look page by page, over a long enough window, at the right metrics side by side. Almost nobody does that regularly, because doing it by hand is miserable.
Catching It by Hand
Here’s the manual version. Open Search Console. Pull the last three months of page-level clicks and impressions, then the previous three months. Export both. Match them by URL in a spreadsheet, compute the click delta for every page, and sort for the biggest drops. Cross-reference GA4, because a page can hold impressions while losing the clicks that mattered. Then open each candidate and read it, because the numbers tell you which pages slipped — never why.
Do that across a few hundred URLs. Then do it again next quarter, because a decay audit is only true on the day you run it. That’s the boring job. It’s boring enough that it slides to the bottom of the list and stays there.
So I Built the Button
The plugin is called Content Performance Analyzer. It runs inside WordPress, and every feature is free. Here’s the whole loop, in the order you’d actually use it.
Setup is one click, not one afternoon. Most Google-connected plugins make you create a Google Cloud project, configure OAuth credentials, and paste keys around. I hated that enough to build a hosted sign-in service so you don’t have to: you click “Connect with Google,” approve access, and you’re done. GA4 and Search Console properties appear in dropdowns — no property IDs to hunt down. (If you’d rather use your own Google Cloud credentials, that option still exists.)
It finds the problems for you. The plugin pulls your GA4 and Search Console data, compares periods, and sorts every page into what’s actually wrong with it: decaying (traffic and position sliding), SEO opportunity (lots of impressions, few clicks — you’re visible but not chosen), conversion gaps (traffic with nothing to show for it), or slow (real Google PageSpeed scores, no API key needed — that runs through my infrastructure too).
It reads the pages, not just the numbers. For every flagged URL it scrapes the actual content and lists concrete issues: thin content, missing meta description, no H1, images without alt text — with the exact filenames, not a vague count — missing structured data, headings that pose questions the page never answers.
Then AI writes the fix plan. Each flagged page gets specific recommendations grounded in its own data — “your CTR is 0.8% on 12,000 impressions, rewrite the title to match the question people are actually asking,” not “improve your content.” You bring your own AI key and choose the provider: OpenAI for the highest quality, or Groq and Gemini, which both have free tiers. You can pick the exact model to control cost, and every suggestion is stamped with the model that wrote it.
And for some fixes, it does the work itself. Images missing alt text? One click and the AI looks at each image and writes and applies the alt text — it never touches images that already have it. Ranking on page one for a question your page never answers? The plugin finds those gaps in your Search Console data, writes a grounded answer block from your own content, and adds it to the page with FAQ schema — one click, and you can edit or remove it like any other block.
The point isn’t the individual features. It’s that the boring job becomes a button — and half the fixes become a second button.
The Part I Didn’t Expect to Need: AI Search
Ranking in classic search and getting cited by an AI answer engine are two different games. ChatGPT, Perplexity, and Google’s AI answers don’t reward the same things blue links do. They want clear structure, direct answers, and claims they can lift cleanly off the page. A post can sit comfortably on page one and still be invisible to the models that increasingly sit between your content and the person searching.
So the plugin scores every page for answer-engine readiness — 0 to 100, built from checks you can act on: question-style headings, direct answers under them, FAQ or article schema, freshness signals, scannable structure. Each failed check is named, so the fix is obvious.
It also shows you the other side: which pages already get visitors from ChatGPT, Perplexity, and Copilot. That’s real referral data from your GA4, and it’s the fastest way to see AI visibility stop being theoretical. There’s even an optional llms.txt file — a machine-readable index of your site for AI crawlers — generated with one toggle. If you’ve watched impressions climb while clicks fall, this section is often where the missing clicks went.
What It Caught on My Own Site
An unflattering example, because real ones land better than hypothetical ones.
While testing the plugin this week, it flagged one of my own services pages. Not for decay — for content. The page was still half-filled with placeholder copy I’d never replaced. It had been live for months, quietly telling visitors nothing, and I’d walked past it a hundred times without seeing it, because I knew I’d written that page and my brain filed it as done.
That’s exactly the miss a tool catches and a person doesn’t. The plugin doesn’t get bored, doesn’t skim, and doesn’t assume a page is fine because you wrote it once and remember it fondly. It reads what’s actually there and tells you.
Why This Matters More If You Run Client Sites
One site is tedious. Ten client sites is impossible by hand — which usually means it doesn’t happen, which means decay compounds quietly across an entire book of business until a client asks why their traffic is soft and nobody has a page-level answer ready.
Install the plugin on every site you manage and each one gets its own standing report: what’s decaying, what’s broken, what to fix first, and which pages AI engines are already citing. The quarterly slog becomes something you can pull up in a client meeting. If you run content for other people for a living, this is the part I most want your feedback on.
It’s Free. Go Break It.
Every feature is free — no pro tier, no locked buttons, no URL limits. I built this to scratch my own itch, and I’d rather it be useful to other people than locked up.
Content Performance Analyzer — free on WordPress.org
More details at cpanalyzer.com.
If you install it and something breaks, or the AI suggestions miss, or you wish it did one more thing — tell me. I shipped three releases last week from user feedback alone. I’m especially curious how it holds up against real, messy, multi-site content libraries, because mine is tidy and yours probably isn’t. That’s where the interesting bugs live.