Comment spam protection that does not track your readers
Comment spam is link placement at scale: one URL pushed into thousands of threads.
How comment spam gets posted
The tool crawls once for the form action and field names, then replays a POST. No JavaScript runs, no images load, and the article is often never fetched.
How PrivCaptcha stops spam comments
Four steps, with the numbers the server uses. Nothing here is configured by you.
The direct POST carries no token
Most comment spam runs no JavaScript, so privcaptcha-response arrives empty, siteverify answers missing-input-response, and the post is refused before moderation.
A scraped sitekey mints nothing
Sitekeys are public, so assume yours is collected. Once you list your domains, any other Origin is refused with invalid-input-origin.
The bare poster starts at level 4
20 for an HTTP client, 40 for a bot User-Agent, 15 for no Accept-Language: 75, level 4, 10 shapes, 6 pixels, 10 degrees.
One token buys one comment
A token is spent by the comment it authorises. It expires 120 seconds after minting, so hundreds of threads is hundreds of challenges.
Add PrivCaptcha to your comment form in two lines of code
Script tag, container in front of the submit button, and your existing verify call. Already on reCAPTCHA or hCaptcha? That backend code stays exactly as it is.
In the comment form above submit, and on every route accepting a public string.
Verify privcaptcha-response server-to-server in the comment handler before the insert. If success is false, reject.
Reply boxes injected after load never get a widget: call privcaptcha.render() on the node.
What this does not solve about spam comments
A challenge gates automation, not content. It will not stop someone pasting links by hand, and nothing here reads the comment. Filtering and moderation stay yours.
Common questions about spam comments
How PrivCaptcha prices spam comments, and what it does not do about it.
Put PrivCaptcha in front of your comment form
10,000 verifications a month are free, and the integration is the one you already have.