Comment spam from AI bots: what changed in 2026 and what filters catch it
Bots are now the majority of web traffic, and the comment spam they post no longer looks like spam. This is what the 2026 reports actually say, why keyword lists and CAPTCHAs stopped working, and the order of filters that still does, with EchoThread's own pipeline as the worked example.
For fifteen years comment spam announced itself. Misspelled pharmaceuticals, a paragraph of keywords, twenty links to a casino, the same body pasted onto a thousand blogs. Filters that pattern-matched on those tells worked well enough that most site owners stopped thinking about the problem. In 2026 the problem has changed shape, and the filters that solved the old one are the ones failing quietly. This post sets out what the published data says, what it does not say, and which filters still hold, with EchoThread's pipeline as the worked example. We build EchoThread, so treat our claims as claims and check the sources.
What the 2026 data says
Three sources, each quoted as written.
Automated traffic is now the majority. The 2026 Bad Bot Report from Imperva, a Thales company, published on 29 April 2026, found that "automated traffic continues to outpace human activity online, accounting for more than 53% of all web traffic in 2025, up from 51% the year before", leaving human activity at 47% (Imperva). Not every bot posts comments, and most of that traffic is scraping, credential stuffing and API abuse. But every form that accepts text from the public sits in front of it.
The old spam never went away. Akismet's own counter, read on 3 September 2026, stood at 572,983,592,575 "blocked pieces of spam" across "100+ million websites" (akismet.com). Classic comment spam is still arriving in enormous volume; it is simply the part that existing filters catch.
Search engines hold you responsible for it. Google's spam policies define user-generated spam as "spammy content added to a site by users through a channel intended for user content", give "comment spam on blogs" as an example, and note that "site owners are often unaware of the spammy content" (Google Search Central). The same document names "using generative AI tools or other similar tools to generate many pages without adding value for users" as scaled content abuse. That policy is about pages, not comments, but it names the tooling that changed comment spam.
What changed
Nothing about generated text is new; what is new is that generating it is free, fast and fluent. Three properties follow, and each one defeats a different filter.
It is unique per comment. Old spam was the same body pasted everywhere, so a shared fingerprint, which is Akismet's whole model, caught it after the first few sightings. Generated spam is written fresh for each post. There is nothing to match against a database of things already seen.
It is on topic. A model given your post's title and first paragraph produces a plausible comment about your post. It reads like engagement. Its purpose is the link in the author field, or the link it asks to add in a follow-up, or simply to establish an account that will post links later.
It has no keywords. A blocklist of pharmaceutical brands and casino terms matches nothing in "Great breakdown of the trade-offs here, especially the point about caching. We ran into the same issue at scale and wrote up our approach." There is no word in that sentence you could ban.
A caution about the phrase "AI spam". No filter reliably tells you whether a human or a model wrote a comment, and EchoThread does not claim to. What a classifier can score is the probability that a comment is spam, whoever or whatever produced it, from the text and the signals around it. That is the number worth acting on, and it is the only one we act on.
What still catches it, in order
The order matters, because each layer costs something in friction or false positives, and the cheap ones should run first. This is EchoThread's pipeline as it runs on every new comment; the design notes are in how EchoThread and Siftfy stop comment spam and the summary is on stop AI comment spam.
1. Your own rules run first
Before any model sees a comment, the site owner's restricted-words list is checked against the comment body and the author's display name. A body match takes the action you chose, hold for review or reject; a display-name match always holds and never rejects, because a name is a weaker signal than a body. The queue then tells you your rule fired, not "spam", so your own policy is never mislabelled as a model's opinion. This catches a small share of generated spam (the link domain in the body is the usual hit), but it catches your particular pests exactly, and it costs nothing.
2. Trusted people skip the queue
A commenter you have marked trusted is approved outright, past pre-moderation and past a restricted-word hold, though never past a reject. Trust is tied to a signed-in identity, so a logged-out guest can never reach it. The point is to spend your moderation attention on strangers.
3. A classifier scores everything else, and fails closed
Every remaining comment is scored by Siftfy, the machine-learning spam classifier EchoThread runs, which returns a probability between 0 and 1. Two rules make the score safe to act on:
- Guests are always screened. A logged-out comment is scored even if the site owner has switched the spam filter off for signed-in users. The toggle governs your regulars, never anonymous strangers.
- Unreachable means pending. If the classifier cannot be reached, the comment waits for a human instead of being published. A filter that fails open is not a filter.
4. High scores are hidden only with corroboration
A score above the block threshold hides the comment as spam only when a second, deterministic signal agrees: link density, all-caps, character runs, promotional phrasing. A high score with nothing corroborating it goes to the review queue, never to a silent auto-hide. This rule exists because of false positives on short, non-Latin, emoji-heavy comments, which a model trained mostly on English is prone to over-flag; the threshold is raised for that class of text rather than lowered for everything.
5. The uncertain middle goes to a human
Between the review threshold and the block threshold, the comment lands in the moderation queue with its score and the signals that explain it beside it, so a decision takes a second rather than a read. An otherwise-approved guest comment with more than a handful of links is downgraded to review regardless of score.
6. Pre-moderation for the moment you need it
Per site, or per thread, you can require every comment to be approved before it shows, and pair that with auto-approve for signed-in commenters. It is the right setting for a post that has just been linked from somewhere large, and the wrong one for a quiet blog, which is why it is a switch and not a default.
What does not work any more, and why
Keyword blocklists as the main filter. Fluent text has no keywords. Keep the list for your specific pests, but it is layer one of six, not the filter.
CAPTCHAs. A CAPTCHA tests whether a browser can complete a puzzle, and the operators posting generated comments have browsers that can. Meanwhile it costs every real reader a few seconds, and costs some of them the comment. We have not shipped one and do not plan to; the reasoning is in preventing comment spam without a CAPTCHA.
Requiring an account as the spam filter. Sign-in raises the cost of spamming and lowers the number of comments about equally. It is a legitimate choice for some communities, but it is a choice about who may speak, not a spam filter, and generated spam arrives with accounts too.
Shared fingerprints alone. A database of previously seen spam still catches the pasted kind, which is most of the volume. It cannot catch a body that has never existed before. Pair it with a classifier, or replace it with one.
A checklist for this week
- Turn on the spam filter for your site. Guest screening is on regardless; it cannot be turned off for guests.
- Add your known pests to the restricted-words list: the domains that keep showing up, the "business" names, the phrases. Choose hold rather than reject until you have watched it work for a week.
- Mark your regulars trusted, so the queue only ever shows you strangers.
- Look at the review queue once a day. A generated comment that fooled the classifier is usually obvious to a person in a second, and every decision you make there is one the model did not have to.
- Check the author links, not just the body. Generated spam often puts the payload in the website field and leaves the comment itself clean.
- Export your comments occasionally as JSON or CSV. Not for spam, but because a comment system you can leave is one you can trust to keep.
Spam filtering runs on every EchoThread plan, including the free one: one site, comments included, no ads, no reader tracking. The pricing page has the rest.
Discussion
Comments
This thread runs on EchoThread — the same widget you would add to your own site.