field guide · spam protection

Website spam protection that does not punish real people.

Website spam protection is the layered practice of keeping bot-generated comments, form fills, signups, and API abuse out of your product without adding friction for real users. The reliable stack is four layers: an invisible trap, a server-side content classifier, rate limits, and a human review band for borderline scores. CAPTCHAs are optional, not the foundation.

Most spam guides sell one filter. This one starts from the four surfaces attackers actually use, then shows which layer catches which attack — and what each layer costs you in effort, money, and lost conversions.

01

Where spam actually gets in

Spam is not one problem. A comment section, a lead form, a trial signup, and a public API fail in different ways, and a defence that works for one will be the wrong shape for another. Start by naming the surface you are protecting.

Comments and community posts

looks like Link drops, generic praise with a URL, fake “great post!” replies, trackback and pingback noise, AI-written comments that read cleanly but say nothing.

costs you Moderator hours, a comments section readers stop trusting, and outbound links that turn your domain into a link farm.

Comment spam and SEO →

Contact and lead forms

looks like Fake names, disposable emails, gibberish messages, the same pitch across ten submissions, and bot traffic that never converts.

costs you Sales time on dead leads, polluted CRM data, and ad reporting that credits bots as buyers.

Stop contact-form spam →

Signups, trials, and registrations

looks like Throwaway inboxes, automated account creation, multi-step forms filled faster than a human can type, and referral abuse.

costs you Support load, inflated metrics, free-tier abuse, and a user table you cannot trust.

Signup abuse →

APIs, webhooks, and product surfaces

looks like Bulk content submitted through your API, spam in chat or messaging features, and payloads designed to look like normal traffic.

costs you Infrastructure spend, abuse reports, and moderation work that lands on your engineering team.

Headless and API-first stacks →
02

The four layers, in the order you should add them

Each layer below removes a different kind of traffic. Add them in order: the cheap trap first, the classifier second, the limits third, and the human review last. Skipping ahead usually means paying for a classifier to look at traffic a hidden field would have stopped.

  1. 01

    A trap that only bots fall into

    Catches
    Naive form-filling bots, scrapers that parse every input, and scripts that submit in under a second.
    Misses
    Targeted bots that read the DOM, AI agents that fill forms like a person, and human spam farms.
    User friction
    None when implemented invisibly.
    Effort
    About an hour.

    A hidden field plus a timestamp is still the cheapest filter you can ship. It is not a strategy on its own — it removes the lazy traffic so the expensive layer only sees the determined traffic.

    How honeypots work →
  2. 02

    A server-side content classifier

    Catches
    Spam text at any volume, including AI-written comments that pass grammar and tone checks, and payloads submitted through APIs rather than a form.
    Misses
    Pure link spam with no message body, coordinated reputation attacks, and abuse that is behavioural rather than textual.
    User friction
    None visible to the reader — the decision happens after submit.
    Effort
    Half a day for the first integration.

    This is the layer that scales. A calibrated probability lets you choose three outcomes instead of two: allow, hold for review, or block. Binary verdicts force you to either accept false positives or over-moderate.

    Reading a calibrated score →
  3. 03

    Rate limits and reputation

    Catches
    Floods, credential stuffing, repeated submissions from one source, and abuse that arrives faster than a person could type.
    Misses
    Slow, distributed, low-volume spam that stays under every threshold.
    User friction
    None for normal users; a visible error for the abuser.
    Effort
    Half a day, mostly configuration.

    Rate limits are a cost control as much as a security control. They keep a spam wave from becoming a bill, and they give the classifier a smaller, more interesting queue to work with.

    AI-driven abuse →
  4. 04

    A review queue for the middle band

    Catches
    Novel attacks, sarcasm, borderline promotional comments, and the disagreements between layers.
    Misses
    Nothing — but it does not scale without a scoring layer in front of it.
    User friction
    Depends entirely on the thresholds you set.
    Effort
    Ongoing, measured in minutes per day.

    The review band is where trust is won or lost. Route the 0.40–0.75 scores to a human, auto-allow below it, auto-block above it, and tune the band with real examples from your own traffic.

    Audit a form first →
03

Pick the stack by site type

The same four layers combine differently depending on what you run. This is the short version; each row links to the detailed use case.

Recommended spam-protection stack by site type
Site typeStackWhy this shape
Blog with commentsHoneypot, classifier in the comment handler, moderation queue for the middle band.Comment volume is spiky and the cost of a false positive is a lost reader. Score first, hold the ambiguous, block only at the top of the range.
SaaS signup or trialRate limit, classifier on the signup payload, email verification for the allowed set.Fake accounts are cheap to create and expensive to clean up. Score the payload before you spend money provisioning an account or sending mail.
Contact or lead formHoneypot, classifier on submit, CRM dedupe, no visible CAPTCHA.Every extra challenge is a lost lead. A server-side score costs the buyer nothing and keeps the CRM clean.
Marketplace or UGC platformClassifier, rate limits, reputation, review queue, and an appeal path.You are moderating other people's livelihoods. Three-way decisions and a visible appeal path matter more than raw accuracy.
Ghost blogClassifier in the theme's comment or member handler, honeypot on the signup form.Ghost gives you the webhook or server route, so one classification call covers comments and member signups without a plugin.
Static site or headless CMSClassifier call from a serverless function or edge worker, with the provider's secret held server-side.There is no backend to hook into, so the classification call becomes the backend. Keep the key out of the browser.
04

A 30-minute setup that removes most text spam

  1. Add a hidden field and a timestamp

    Reject submissions that fill the hidden input or complete in under two seconds. This is a few lines in the form handler and it removes the cheapest bots before they cost you anything.

  2. Score the submission server-side

    Send the text to a classifier from your backend, never from the browser. Keep the API key in the server environment.

    curl
    curl -sX POST https://api.siftfy.io/v1/predict \
      -H "X-API-Key: $SIFTFY_KEY" \
      -H "Content-Type: application/json" \
      -d '{"text": "Great post! Visit my site for cheap backlinks"}'
    json
    {
      "spam_probability": 0.93,
      "likelihood": "high",
      "max_confidence": 0.84,
      "score_source": "model"
    }
  3. Choose three bands, not two

    Allow below 0.40, hold between 0.40 and 0.75, block above it. Start wider than you think and tighten with real examples.

  4. Rate-limit the submit path

    Cap submissions per IP and per account per minute. Rate limits protect your bill and keep a flood from becoming a classification bill.

  5. Log every decision

    Store the score, the band, and the text you blocked. Without that log you cannot tell whether a threshold change helped or just moved the problem.

05

What not to do

Blocking every comment that contains a link

Legitimate readers link to their own work and to sources. You train people to stop commenting, and you lose the good signal with the bad.

Putting the classifier in the browser

A client-side check is a suggestion. Anyone can skip it, and an API key in a bundle is a key you have already leaked.

Using a CAPTCHA as the whole strategy

Puzzles cost real conversions, fail accessibility, and still lose to human farms. Use them when you must, not as a default.

Deleting silently

A spam comment that disappears with no trace teaches you nothing. Log the score, the reason, and the text you blocked so you can tune later.

Blocking by keyword list

Keyword lists are easy to write and easy to evade. They also produce the worst false positives, because the words people use to describe their own business are the words you banned.

Treating spam as a one-time project

Spam adapts. The thresholds that worked in January are usually too loose by summer. Put a review on the calendar.

06

How to measure it

Spam protection is a trade between two errors: letting spam through and blocking real people. Measure both, or you will optimise one into the other.

Metrics for evaluating spam protection
MetricDefinitionWhat to watch
Spam capture rateShare of known spam blocked or queued before it reaches a human.Establish a baseline first; it is only meaningful against your own traffic.
False-positive rateReal submissions blocked or held. Measure on a labelled sample, not on vibes.Should fall as you tune the middle band; watch it weekly after any threshold change.
Moderator minutes per 100 submissionsThe real cost of the middle band.Falls when the classifier is doing its job; rises when the review band is too wide.
Form completion rateReal users who finish the form after you add a defence.Should be flat or up. If it drops, the defence is visible and you have paid in conversions.
Blocked-then-allowed rateSubmissions your rules blocked that a reviewer later restored.A leading indicator that a threshold is too aggressive.
07

Choosing a provider without the marketing

The honest split is between plugins that live inside a platform and APIs that return a score your application owns. Both are correct answers to different questions.

Spam protection methods compared
MethodBlocksCost to real usersUpkeepVerdict
Honeypot + time trapLazy botsNo frictionLowNecessary baseline, never sufficient alone.
CAPTCHA or proof-of-workScripted submissionsVisible challenge for some usersLow, but adds a third-party scriptStrong at blocking, weak at conversion. Accessibility and privacy costs are real.
CMS plugin (Akismet, CleanTalk)Comment and form spam on supported platformsNo frictionLow until you leave the platformExcellent fit for WordPress. Less so for a custom product or API.
Content classification APIText spam at any volume, including AI-written spamNo frictionOne integrationReturns a score you own. Best fit when the spam is text and the stack is yours.
IP and reputation blockingKnown bad sourcesRisk of shared-IP false positivesMediumUseful as a layer. Dangerous as the only layer, especially behind CGNAT or corporate proxies.

Ready to compare specific products? Read the alternatives hub or the spam detection API buying guide. Both are written to be useful even if you choose someone else.

Spam protection questions

What is the best way to stop spam on a website?

Use layers, not a single filter: an invisible honeypot or time trap, a server-side content classifier that returns a score, rate limits on the submit path, and a human review queue for borderline scores. The combination catches the lazy traffic cheaply, the targeted traffic accurately, and keeps the ambiguous cases out of your users' way.

Do I need a CAPTCHA to stop spam?

No. Most text spam is a content problem, not a humanity problem. A server-side classifier can block spam comments and form fills without showing a puzzle, which removes the conversion cost and the accessibility problems a CAPTCHA introduces. Keep a challenge for high-abuse paths where behavioural signals matter.

Is a honeypot enough on its own?

No. A honeypot catches bots that fill every field, which is still a large share of cheap traffic, but it misses targeted bots that parse the DOM and any human or AI agent filling the form deliberately. Treat it as the first layer that keeps the expensive layer's queue small.

How do I stop AI-generated comment spam?

Score the text rather than the grammar. AI-written comments are usually fluent, generic, and promotional, so a content classifier trained on spam signal still catches them. Combine the score with a link count, a submission-time check, and a review band for the ambiguous ones.

Will spam protection hurt my conversion rate?

Only if the user can see it. A server-side classifier adds no fields and no challenges, so conversion stays flat while the spam rate falls. Visible CAPTCHAs, puzzle challenges, and aggressive link blocking are the changes that cost you real submissions.

What should I do with the comments I am unsure about?

Hold them. A three-way decision — allow, hold, block — is the main practical advantage of a calibrated score over a binary verdict. Review the middle band for a week, label what you see, and use those labels to move the thresholds rather than guessing.

When should I switch from a plugin to an API?

When your spam is no longer confined to one platform. A plugin is the right answer while you run a single WordPress or Ghost site. Once you have a custom product, an API endpoint, a mobile app, or a second CMS, one server-side classifier is cheaper to maintain than three plugins and gives you one consistent threshold.

start here

Score your first submission in five minutes.

10,000 requests a month free. One endpoint, a calibrated probability, and no puzzle for your readers.