Most SEO reporting describes what happened. The analysis below tells you why, because it works from data the search engine produced rather than from a third-party estimate. All of it uses sources you already own.
Log files are the only record of what a crawler actually requested. Pull a month of access logs, filter to verified crawler traffic, and you can answer questions no rank tracker can:
# which URLs Googlebot hits most
grep -i googlebot access.log \
| awk '{print $7}' | sort | uniq -c | sort -rn | head -40
# status code distribution for crawler traffic
grep -i googlebot access.log | awk '{print $9}' | sort | uniq -c
Verify the bot before trusting the user agent: run a reverse DNS lookup on the IP and confirm it resolves into googlebot.com or google.com, then forward-resolve that hostname back to the same IP. Roughly speaking, a large share of traffic claiming to be Googlebot is not.
What you are looking for: crawler budget spent on faceted URLs, paginated archives, or parameterised duplicates; a rising share of 404s and 301 chains; and important pages that have not been requested in weeks. The last one is usually an internal linking problem, not a content problem.
The interface caps you at 1,000 rows and hides the long tail where most of the opportunity is. The Search Analytics API returns up to 25,000 rows per request and lets you pull query and page dimensions together, which is what makes the following analyses possible:
Crawl the site (Screaming Frog, Sitebulb or a scripted crawler) and compare three sets: URLs in your sitemap, URLs discoverable by crawling internal links, and URLs Search Console reports as indexed. The gaps are diagnostic. In the sitemap but not linked internally means orphaned. Linked but not indexed means quality, duplication or crawl-budget. Indexed but not in the sitemap means you are shipping pages you did not intend to.
Interaction to Next Paint replaced First Input Delay as a Core Web Vital in March 2024. The threshold is 200 ms at the 75th percentile of real users. Lab tools cannot measure it properly because it needs actual interactions — use the Chrome UX Report data in Search Console or the web-vitals JavaScript library reporting into your own analytics. The usual culprit is a long task on the main thread during hydration; break work up with scheduler.yield() or defer non-critical hydration.
Export your crawl's link edges and compute internal PageRank, or simply count unique internal inlinks per URL. Pages with commercial intent and two inlinks are being starved. The cheapest ranking improvement available to most sites is adding contextual links from established pages to the ones that need authority — and unlike external link building, you control it entirely.
Set up monitoring for four failure modes rather than checking manually: a noindex tag appearing on a template, robots.txt changing, canonical tags pointing somewhere unexpected, and structured data failing validation after a deploy. Each of these has taken sites out of the index within days, and each is trivially detectable by a scheduled script that fetches a sample of URLs and asserts on the response.