What a Spam Audit Taught Me About Shipping AI Content at Scale
I run [MushroomPro](/portfolio/mushroompro) through an agent-driven AI publishing pipeline. Then Google's spam patterns started flagging it. Here is the audit, the bugs I found, and the loop I run now.

I run MushroomPro through an agent-driven AI publishing pipeline. Openclaw handles topic selection, on-page polish, and publishing; the Draftly drafting engine handles research-to-draft. The pipeline pulls signal from a curated set of sources, drafts an article, generates a header image, picks a category, and pushes the result to WordPress. It has done this on a regular schedule for the better part of a year. The site grew. The traffic grew. The pipeline kept doing its thing.
Then Google noticed.
This is the story of the audit I ran when I saw the first signs, the bugs I found that had nothing to do with AI quality, and the loop I now run on every AI publishing pipeline I touch.
The Audit That Started It
The signal that something was wrong was not a manual penalty. It was a drift in the kind of traffic the site was getting. Branded queries held. Long-tail informational queries that the site had been doing well on started softening. The pattern matched what I have seen on other sites where Google starts quietly applying a spam classifier to the content.
I pulled a sample of recent posts. Reading them with fresh eyes was the most humbling part of the whole exercise. The posts were not bad. They were also unmistakable. There were phrases showing up across dozens of posts that were the exact phrases I have seen flagged in every AI-content guide for the past two years. I had read those guides. I had even put a banned-phrase list into my own LinkedIn pipeline. I had not put one into this one. The drift had been quiet and consistent over months.
The Tells: How Google Spots AI Content
If you have not done one of these audits, here is the surface area that matters.
Phrases that show up across a body of content at a frequency that no human writer would produce naturally. The classic ones are "delve into," "in the realm of," "a tapestry of," and variants that include the word "realm" or "tapestry" doing work no human ever asked them to do. None of these phrases are inherently bad. The pattern is the frequency.
Openings that all read the same. Every post starting with the same kind of hello-and-welcome-back-to-the-site move. Human writers do this sometimes. AI writers do this every single time unless you stop them.
Structural sameness. Every post the same length. Every post the same number of headings. Every post the same kind of conclusion paragraph. A human content team produces variation by accident. An AI pipeline produces uniformity by accident.
Internal linking that does not actually link to anything related. This was the one I missed for the longest. I had told the pipeline to add internal links. It was adding them. It was adding them to whatever it picked first that matched the loosest keyword overlap. The links existed and pointed nowhere useful.
Duplicate or near-duplicate content. This was the one that surprised me.
The Slug-Collision Bug That Doubled My Duplicate Content
The pipeline generated slugs from titles. Two posts with similar titles produced similar slugs. The publishing platform, when it saw a slug already in use, appended a numeric suffix and published the new post anyway. Numbered duplicates of titles I had already published were quietly racking up over months. The pages were ranking against each other on the long-tail queries the site cared about.
The fix was to deduplicate against the full publishing history, not against the recent window I had originally checked. The reason this had not surfaced earlier is that the dedup check was looking at the last thirty days. Anything older than that was invisible to the check. The site had enough history that the assumption "nothing older than thirty days would ever collide" was no longer true.
I cleaned up the duplicates by hand. There were not as many as I feared, but there were enough that the cleanup itself was a real day of work. The fix in the pipeline took about an hour.
What I Did About It
The full intervention had four parts.
A banned-phrase list got added to the drafting step. Every phrase I had read about in the AI-content guides went on the list. A few that I had personally caught in my own audit went on too. Drafts that contain a banned phrase get rejected and redrafted.
The opening structure got loosened. Instead of a single template, the pipeline now picks from a small library of opening shapes, and the rubric requires the first sentence to be specific to the actual article rather than a generic welcome.
Internal linking got rebuilt to look at semantic overlap with existing posts, with a minimum threshold below which the link does not get added at all. A post with no good internal link to make now just does not get an internal link, which is correct.
Cornerstone content got written. Four long, deeply researched posts on the topics that anchor the rest of the site. These are the posts I would have written by hand if I had infinite time. The pipeline did not write them. I did, over a few weeks of evenings. They serve as the gravitational center the rest of the content links into.
The traffic recovered within about a month. The recovery was not dramatic. It was steady. The site stopped getting penalized for being an AI farm and started getting credit for being a useful resource on a real topic.
The Audit Loop I Now Run Like Negative Keywords
The real lesson from this is the audit cadence.
If you have ever run paid ads, you know that a healthy account needs a regular negative keyword sweep. Not because the campaigns are bad. Because every campaign drifts toward irrelevance over time, and the only thing that keeps it tight is someone going in and pruning. The exact same thing is true of an AI publishing pipeline.
I now run a quarterly audit on every AI publishing pipeline I operate. I pull a sample of recent posts. I read them with fresh eyes. I check for banned-phrase drift, structural sameness, slug collisions, broken internal links, and orphan posts that nothing links into. Anything I find goes into the rubric, into the banned-phrase list, or into a one-off cleanup task.
The audit is not the kind of work that compounds. It is the kind of work that prevents the compounding work from quietly going to waste.
If you are publishing AI content at any kind of scale, this is the part nobody talks about and the part that actually matters. The drafting model is rarely the problem. The pipeline around the drafting model, left unaudited for long enough, always is.
And if you want this kind of audit run on your own site, AI-written or not, it is the same sweep I do inside my WordPress SEO services: duplicate content, internal links, orphan pages, the works.
More Notes
SEOGEO vs SEO: Why GEO Optimization Advice Is Mostly Noise
GEO vs SEO is a false debate. GEO is just a data layer built on top of existing SEO. Here's what actually gets your content cited by AI systems.
SEONiche Market SEO: 5 Steps That Beat Competing on Volume
Niche market SEO is the only realistic path for a site with no authority. Here are the five steps I use to find and win keywords that bigger competitors will never bother to target.
SEODecentralized Search and SEO: What Actually Changed
Decentralized search was going to break Google's monopoly and rewrite SEO. It did not happen, but search did fragment in a way nobody predicted, and that fragmentation is the thing worth preparing for.
SEOWeb3 Domains: An Honest Guide to What They Actually Do
Web3 domains were sold as the replacement for the traditional DNS system. Years later, here is what they actually do, the one real use case, and why I would not buy one for a business website.
