A sitemap is a hint, not a promise. A surprising number of important pages get quietly left out of it, and nobody notices because the page still works fine when you visit it directly.
An XML sitemap is a list you hand to Google of pages you'd like it to know about. That's the whole job. It is not an instruction to crawl those pages on any particular schedule, and it is definitely not a promise that any of them will get indexed or rank.
Google still decides independently whether a page is worth crawling and keeping, based on its own signals: internal links, perceived quality, crawl budget, and whatever else it's weighing that month. A sitemap just makes discovery easier. It doesn't override the rest of the decision.
The failure mode I see most is not a missing sitemap. It's a sitemap generator that quietly excludes pages it shouldn't. This usually happens when a CMS reuses one status flag for two different jobs: hiding a page from navigation, and deciding whether to include it in the sitemap.
A page gets marked something like "unlisted" because someone doesn't want it cluttering the main menu. That's a reasonable thing to want. But if the sitemap generator treats "unlisted" the same as "don't index this," the page silently drops out of the one file that's supposed to tell Google what matters, even though the page itself is live, linked, and meant to be found.
This is exactly the kind of bug a casual look at the site won't catch. The page loads fine. Links to it work fine. The only thing missing is a single line in a file most people never open.
Once you find it, the fix is often a one-line change: stop conflating navigation visibility with indexability, and use separate flags for each. The expensive part was never fixing it. It's the months a page sat outside the sitemap before anyone thought to check.
If any of this sounds familiar, I run the same kind of audit for real businesses.