Reach for robots.txt when your goal is crawl control and for a noindex tag when your goal is index control, and never put both on the same page. A robots.txt disallow tells search engines not to crawl a URL, which saves crawl budget, but it does not reliably keep that URL out of the index, since a page linked from elsewhere can still be listed URL-only. A noindex tag tells search engines to drop the page from the index, which is what you want when a page must not appear in results. They solve different problems.

So the choice follows the goal. If you have a sprawl of low-value URLs, faceted parameters, or infinite calendar pages that you simply do not want crawlers wasting time on, robots.txt disallow is the right tool, because it stops the crawling. If you have a real page that you want kept out of search results, a thank-you page, a thin tag archive, a staging duplicate, then noindex is the right tool, because it removes the page from the index while still allowing it to be crawled and understood.

Now the trap, which is why you never use both. A noindex tag only works if search engines can actually read it, and they can only read it by crawling the page. The moment you also block that page in robots.txt, you forbid the crawl, so the crawler never fetches the page, never sees the noindex tag, and never acts on it. Worse, if the URL is linked from elsewhere, it can still get indexed URL-only, the exact outcome you were trying to prevent. The block defeats the noindex. To remove a page from the index, leave it crawlable and let the noindex be seen.

For your next directive decision, write down which problem you are solving first. If it is saving crawl, disallow it in robots.txt. If it is keeping a page out of results, apply noindex and make sure that page is not also blocked in robots.txt, so the tag can be read and obeyed.