A checkout does not usually fail with an error page. It fails quietly: the Add to Cart button stops binding, a payment script blocks the continue button, a theme update renames the element the basket drawer looks for. The page still loads. The server still returns 200. Nothing alerts.
In practice, checkouts almost never go down in the way monitoring expects. The four we see most often:
The button stops doing anything. A JavaScript error earlier on the page stops the handler binding. The button still renders, still highlights on hover, and does nothing when clicked.
An app or script blocks the step. A newly installed review widget, consent banner or upsell modal covers the continue button. On desktop it looks fine because the modal sits elsewhere; on the layout your customers use it sits on top.
The theme renames something. A template update changes a class or an id. Anything keyed to the old one - your own scripts, a third-party integration - silently stops matching.
A variant or region fails alone. Checkout works for the default currency and breaks for another, or works logged out and breaks logged in.
Uptime monitoring answers one question: did the server respond? For all four failures above, the answer is yes. The HTML is served, the status code is 200, the response time is normal. The dashboard is green for the entire time the checkout is dead.
Analytics eventually shows it, but as a shape rather than an alert - a dip in conversion that you notice on Monday and that started on Friday afternoon. By then the money is gone and you are reconstructing which deploy did it.
The gap is not that these tools are bad. It is that they measure the response, and a checkout is a sequence of interactions. Nothing in a status code describes whether clicking Add to Cart puts something in the basket.
Four steps, none of which involve writing a test script.
Add your site, describe one journey, and let it run. Free, no credit card.