- Published
- Byline
- GoHighLevel Partners Editorial
- Filed under
- GoHighLevel Automation
It costs the visitor nothing and removes most crude automated traffic — and it is usually implemented in a way that fails silently.
Honeypot spam protection form fields: the trap and its limits
A honeypot is a form field that a person never sees and never fills in, placed there so that anything which does fill it can be identified as automated. It costs the visitor nothing — no puzzle, no extra step, no third-party script — and it removes a large share of crude automated traffic. That combination makes it the first thing to add and the least likely thing to regret.
It is also frequently implemented in a way that either does not work or blocks real people, and both failures are silent. This is how the mechanism actually behaves, where it breaks, and what it cannot do. the wider set of defences and what each costs is the wider picture.
How it works, and what “hidden” has to mean
The form carries an extra field with an ordinary-looking name. A visitor never sees it, so it arrives empty. An automated script that reads the form’s structure and fills every field it finds arrives with it populated, and that submission can be rejected. The whole mechanism rests on the field being invisible to people and visible to a naive script.
How you hide it matters more than it looks. Hiding it in a way that removes it from the page entirely, rather than merely from view, defeats the purpose because the script does not see it either. Hiding it in a way that leaves it reachable by keyboard means someone navigating with a keyboard will land in it, be confused, and possibly type something — which rejects a genuine customer for using their computer normally.
The accessibility failure nobody sees
This is the part that is worth being careful about, because it fails invisibly. A visually hidden field that a screen reader still announces will be read aloud to someone who cannot see it is decorative, and they may well fill it in — after which their enquiry is silently discarded. They receive no error and no confirmation, and you never learn it happened.
Two things prevent it. Mark the field so assistive technology skips it, and take it out of the keyboard tab order so nobody arrives in it accidentally. If the field must carry a visible label for any reason, word it as an explicit instruction to leave it blank rather than as a plausible question.
The same reasoning is why hiding an element on mobile is not a substitute here: a device-based hide is about layout, not about the accessibility tree, and the two are different questions.
Autofill is the other way a real person fills it
Browser and password-manager autofill matches on field names, so a honeypot called something like address, company or phone2 is a strong candidate for being filled automatically for a visitor who has never seen it. That visitor is then rejected for having a browser.
Give the field a name that is plausible to a script and implausible to autofill, and turn autofill off for it explicitly. Then test with autofill switched on in a browser that has your details stored, because this failure does not appear in a clean testing profile — which is exactly why it survives so often.
What it catches and what it does not
| Traffic | Caught | Why |
|---|---|---|
| Generic scripts filling every field | Yes, most of it | They cannot tell which field is decorative |
| Scripts targeting your specific form | No | Whoever wrote it looked at the form once |
| Browser automation driving a real browser | Rarely | It sees the page the way a person does |
| People submitting nonsense | No | They are people |
So a honeypot is a filter for volume rather than a defence against someone who has decided to target you. If the noise continues after adding one, that is information: it says the traffic is not indiscriminate, and the next measure should be verification rather than another trap. double opt-in is the usual next step, because an address that does not exist cannot be confirmed.
Pair it with a timing check
The natural companion is a check on how long the form took. Record when the form was rendered and reject a submission that arrives implausibly soon after — faster than anyone could read the fields, let alone type. Together the two cover different scripts: one catches those that fill everything, the other catches those that submit instantly.
Keep the timing threshold generous. A returning customer using autofill can complete a short form remarkably quickly, and a threshold set to a few seconds will reject them. This is another failure that shows up as an unexplained dip in enquiries rather than as an error.
Where it goes in the form
Place it among the real fields rather than at the end, since some scripts fill only the first several inputs. Keep where to enforce required fields configured on the genuine fields only — marking the honeypot required is a contradiction that some form handlers resolve by refusing every submission. And check it interacts sanely with conditional fields that behave: a conditional block that hides and reveals fields can restore the honeypot to visibility if the rules are written loosely.
splitting a form across steps raises a small question of which step to put it on. The first is usually right, because that is where an automated submission starts. Confirm it survives inline against popup placement, since a form rendered in a popup is sometimes built from a different template than the inline version.
Silent or explicit rejection
Discarding a caught submission silently tells whoever wrote the script nothing, which is the point. But it means a false positive is invisible to you as well as to them. Record the rejects — a log kept outside the platform is enough — with the field contents and the timing, and read the log occasionally. Real people appear in it in recognisable ways: a plausible name, a real-looking message, an entry in the honeypot that came from autofill.
Then make sure a rejected submission does not create records. creating an opportunity from a submission should happen after the checks, not before, and nothing rejected should reach a sequence — that is the connection to sending reputation and the reason this is worth doing properly rather than approximately.
Checks before you consider it done
- Submit normally and confirm the enquiry arrives.
- Submit with browser autofill enabled on a profile that has your details.
- Tab through the form with the keyboard only and confirm you never land in the honeypot.
- Check the field is not announced by a screen reader.
- Fill the honeypot deliberately and confirm the submission is rejected.
- Confirm submit button wording and state still shows a sensible state, since a silent rejection that looks like a successful send is fine for a script and confusing for a person.
- Check the form still loads cleanly — a honeypot added through code placed in the page header rather than the form builder is easy to leave behind, and easy to see in a page speed score if it pulled in a script it did not need.
Frequently Asked Questions
What is a honeypot field on a form?
An extra field that a person never sees and never fills in, added so that anything arriving with it populated can be identified as automated. It adds no step for the visitor and no third-party script, which is why it is the first measure to add and the least likely to regret.
How should the honeypot field be hidden?
In a way that keeps it in the page for a script but out of reach for a person: visually hidden, skipped by assistive technology, and removed from the keyboard tab order. Removing it from the page entirely defeats the purpose, because the script does not see it either.
Can a honeypot block real visitors?
Yes, in two ways that both fail silently. A screen reader may announce the field to someone who then fills it in, and browser autofill may populate it based on its name. Both produce a discarded enquiry with no error shown to anyone, so neither is ever reported to you.
Why does autofill fill in my honeypot?
Because autofill matches on field names, so anything called address, company or phone2 is a candidate. Give the field a name that is plausible to a script but not to autofill, disable autofill on it explicitly, and test with a browser profile that actually has details stored.
Does a honeypot stop all spam?
No. It catches indiscriminate scripts that fill every field they find. It does not stop a script written specifically for your form, browser automation that sees the page as a person does, or people submitting nonsense. Noise continuing after you add one is a useful signal about which you have.
Should I combine it with anything else?
A timing check is the natural companion: reject a submission arriving faster than anyone could read and type. Keep the threshold generous, because a returning customer using autofill completes a short form very quickly and a tight threshold rejects them.
Should a caught submission be rejected silently?
Silently to the sender, but logged for you. Telling a script why it failed helps whoever wrote it, while keeping no record means a false positive is invisible. Log the field contents and timing, and read it occasionally — real people appear in it in recognisable ways.
We build your GoHighLevel account for you
CRM, pipelines, funnels, SMS and automation — configured for your business, not left for you to figure out.
- Setup (one-time)$850
- Ongoing (per month)$38.80
No obligation quote · reply within 1 business day
This site is independently operated and is not officially affiliated with, endorsed by, or sponsored by HighLevel LLC. We do not receive referral commissions — this is our own flat-fee implementation service.