Design forms that convert, validate well, resist spam, and integrate cleanly with downstream systems. Use this skill when designing or auditing any form (contact, signup, checkout, multi-step, embedded), planning validation logic, fighting spam, choosing form tooling, or improving form conversion. Triggers on form design, form validation, form conversion, multi-step form, form spam, captcha, honeypot, form abandonment, signup form, contact form. Also triggers when form completion rates are low or spam is overwhelming.
67
81%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
Forms are where intent becomes action. Design them well or lose conversions, frustrate users, and drown in spam. Stack-agnostic.
cro-optimization)landing-page-copy)frontend-component-build, code-review-web)accessibility-audit)Every form decision falls into one of these dimensions.
The biggest lever. Every additional field reduces conversion.
Questions to ask for each field:
Default rule: ask for the minimum to make the next step happen. Everything else later.
For a B2B contact form: name and email get you started. Phone, company size, role are nice-to-haves that often hurt conversion more than they help qualification.
For a checkout: country, postal code, address, name, payment. Anything else (referral source, marketing opt-in, account creation) is optional or moved to post-purchase.
How each field looks and behaves.
email for emails, tel for phone, number for numbers, date for dates. Mobile keyboards adapt.autocomplete="email", autocomplete="given-name", etc. Browsers and password managers fill them in.Tell users what's wrong, when, and how to fix it.
For format-flexible fields (phone numbers, postal codes), validate liberally. Reject only what's clearly wrong, not what's "non-standard." Many phone formats exist.
Public forms attract spam. Plan for it from day one.
Layered defense:
For most contact forms: honeypot + time check + Turnstile (or similar) is sufficient.
What happens after submit.
For multi-step forms:
For each form on the site:
Different forms have different success metrics:
Track the metric that matters, not just submissions.
Apply the field strategy filter. For each field, answer:
A 7-field form becomes a 3-field form. Conversion rises.
Before launching a public form:
After launch, monitor. Tune layers based on what's actually getting through.
Walk through each field:
Critical baseline:
aria-label)aria-describedby, aria-invalid)See accessibility-audit for the full WCAG audit.
Submit the form. Verify:
Forms break silently when downstream systems change. Test after any integration update.
Too many fields. Most B2B contact forms have 3x more fields than they need. Cut.
Validation that fires while typing. Annoying. Causes errors before the user has finished.
Generic error messages. "Invalid input." Where? Why? Be specific.
Required fields not marked. Users discover they're required only after submission fails. Mark required (or, for short forms, mark optional).
Autocomplete disabled. "For security." It's almost never a security improvement and always a UX cost. Leave autocomplete on.
Tab order is broken. Tab key skips fields or jumps backward. Set tabindex only when necessary; use natural DOM order.
Submit button below the fold. Especially on mobile. Users don't see it.
No save on error. User submits, has one error, returns to the form, all fields empty. Nightmare. Save the state.
Captcha as the only spam defense. Captchas are friction. Layered defense beats brute-force friction.
Captcha visible by default. Modern CAPTCHAs (Turnstile, reCAPTCHA v3) are invisible most of the time and only escalate when needed. Use those.
Newsletter signup that's actually a marketing list. Honor opt-in scope. If the user signed up for product updates, don't add them to the marketing newsletter.
Confirmation page that's a dead end. "Thanks for submitting" with no next step. What now? Provide an action (read related content, return to homepage, follow on social).
No double opt-in for marketing email. Bots and typos pollute the list. See email-deliverability for why this matters.
Email field accepting name@ as valid. Browser spec validation is loose. Validate against an actual format.
Custom date pickers worse than native. The native <input type="date"> is now good on most platforms. Don't reinvent unless you have a specific reason.
Forms that lose state on refresh. For long forms, save to localStorage and restore on load.
A form audit document includes:
references/form-anatomy-checklist.md: A field-by-field, behavior-by-behavior checklist for auditing or designing a form, covering structure, accessibility, validation, and spam defense.8e70d03
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.