I discovered that someone here wrote a "UrlTreeHelper" class that starts from a root node and uses the ResourceResolver and sees if the primary node is "cq:Page", or if it has child nodes. If the former, it gets the URL path from the node and adds that to a list to return. If the latter, it recurses through that list. That results in a final list of urls that we can at least do a GET on and verify we get a 200. If we don't, we at least know something's wrong with that page, even if we don't know what failed.
They call this from a JSP page, so they can get the ResourceResolver. Is it possible to get the ResourceResolver in plain Java code, so we could call this from something besides a JSP?