What Shopify already requires
Native product options (the variants, like size and color) always have a value selected, so a shopper cannot add a variant to the cart without one. Many themes preselect the first value, so in practice a shopper can add "Small" without ever looking at the size.
Anything outside variants, such as engraving text, a date, a name or a custom choice, is not required by default. A plain extra input on the product form can be left empty, and the item still goes to the cart.
Option 1: A variant for each choice
If the choice is a short list (for example three fabrics), make it a real variant option. Shopify then enforces it. The catch: each combination is a variant, and Shopify limits the number of variants per product, so this does not work for free text or long lists.
Option 2: A field with your own checks
You can add an input to the theme and use the browser's required attribute so the form will not submit empty. It needs theme edits, can be bypassed by themes that add to cart with JavaScript instead of a normal form, and must be maintained.
Option 3: An app that blocks Add to cart
An options app can mark a field as required, show a message and keep Add to cart from working until the field is filled in.
Test it like a shopper
- Open the page and press Add to cart immediately.
- Use the keyboard (Tab and Enter) and the mobile layout.
- Try quick-add buttons on collection pages, since they can skip the product page. If your theme has them, check what they do for products with required options.
- Fill the field, add to cart, and confirm the answer shows on the order.
Doing it with LeDuc Product Options
I built LeDuc Product Options for exactly this job. You install it from the Shopify App Store, create the field, choose which products it appears on, and it shows on those product pages without you editing any theme code. The shopper's answer travels with the item to the cart, the checkout and the order. There is a free plan, and Pro is $9.99 a month.
Two honest limits. It does not charge extra for an option and it does not take file uploads, so if you need either, pick a different app. Check the current plan details on the listing before you install.
In the app each field has a required setting. When it is on, Add to cart stays blocked until the shopper answers. You can combine it with a conditional field, so the answer is only required when it matters, for example engraving text only if engraving is chosen. Fields can be text, dropdown, radio, color swatch, checkbox, number or date.