The sentence asking a user to agree to the terms and conditions is doing more work than the terms themselves. A clause is only worth as much as the acceptance behind it, and acceptance is a question about a screen and a record rather than about drafting. Both halves are cheap to get right at the start and close to impossible to reconstruct later.
What the screen has to show
The terms, or a link to them that is plainly a link, immediately adjacent to the action. A button whose label says what pressing it does, so that continue with the terms mentioned beside it beats a bare next. No dark patterns: the agreement should not be pre-ticked in contexts where a real choice is required, the link should not be the same color as the surrounding text, and the text should be large enough to read on a phone. Courts asking whether a user assented ask what the screen looked like, and the screen is a thing you can screenshot and keep.
The four fields to store
Who agreed, by the same identifier your systems use. Which version of the terms, by a version string rather than a URL, since the URL will change content. When, to the second and with a timezone. And what was shown, ideally the exact wording beside the button captured as a string rather than described. Those four answer every question anybody asks about acceptance for years afterwards, and they cost one table.
Separate agreeing from consenting
Agreeing to a contract and consenting to data processing are different acts, and bundling them weakens both. One tick that means I accept the terms and consent to marketing is not freely given consent for the marketing, because the person could not get the service without it. Keep the terms acceptance as the gate and any marketing consent as a genuinely optional, separately recorded choice.
Questions people ask about agree to the terms and conditions
Does the box have to be unticked?
For consent to processing under a European regime, yes: pre-ticked boxes do not produce valid consent. For accepting a contract a clearly labeled button can be enough, but an explicit tick is stronger evidence and costs nothing.
What if we change the terms later?
Publish a new version, keep the old, give the notice your change clause promises, and for material changes capture agreement again at next sign-in. Your record should always name a version.
Is a screenshot really necessary?
It is the cheapest form of the evidence that matters. Keep one per version of the acceptance screen alongside the version of the document, and the question of what the user saw stops being a matter of memory.