Clickwrap vs. browsewrap
Clickwrap makes users tick a box to accept your terms. Browsewrap just links them in the footer and hopes. Clickwrap holds up far more reliably.
See it
What it is
Clickwrap puts the agreement in front of the user and demands an affirmative act: a checkbox, or a button whose label sits right beside 'I agree to the Terms' with the terms hyperlinked. Browsewrap buries a Terms link in the footer and claims continued use equals acceptance. US courts have battered browsewrap for years (Nguyen v. Barnes & Noble is the standard citation) because there is neither reasonable notice nor any manifestation of assent. Conspicuous affirmative assent is substantially more reliable than a footer link, but 'clickwrap always wins' overstates it: enforceability still turns on the jurisdiction and on what the screen actually looked like.
What makes it stick is notice plus assent, captured. Put the terms link in high-contrast underlined text at the exact moment of commitment (sign-up, checkout, first purchase), not on a page nobody visits. Then log it: user id, timestamp, IP, and the version of the terms they saw. Without that record you cannot prove which version they accepted, which is the whole ballgame when you later try to enforce an arbitration clause or a liability cap.
The middle ground people actually ship is 'sign-in wrap': a Create account button with 'By clicking Create account, you agree to the Terms and acknowledge the Privacy Policy' underneath. Note the two different verbs. The terms are a contract you agree to; the privacy policy is a disclosure you receive, and dressing it up as consent muddies whichever lawful basis you were actually relying on. Sign-in wrap holds when the notice is conspicuous and collapses when it is 9px grey text below the fold. One more trap: changes that materially affect the agreement usually need fresh assent, not a quiet bump of the last-updated date.
Ask AI for it
Build a clickwrap terms acceptance flow for a sign-up form. Place the checkbox immediately above the primary submit button reading 'I agree to the Terms of Service and confirm I have read the Privacy Policy'. Keep the two roles distinct: the Terms are the contract the user accepts, while the Privacy Policy is a disclosure the user receives, so link it and record acknowledgement of receipt without presenting it as consent to anything. Both links underlined, opening in a new tab with rel='noopener', at the same size and contrast as surrounding body copy, never pre-checked. Block submission until the box is ticked, with an accessible inline error message tied to the input. On success, write an acceptance receipt: user id, UTC timestamp, IP, user agent, the terms version identifier and content hash, the privacy notice version shown, and the exact wording displayed. Add a re-acceptance prompt that fires on next login only for changes that materially affect the agreement, with a documented rule for who decides that and a changelog entry for every version either way.