Note 06 Studio perspective
When the query is the bug.
A failed request tells you it failed. An empty result tells you nothing — it looks exactly like a true negative, and it arrives with the same calm confidence as a correct answer. In one afternoon of auditing our own sites, three separate findings turned out to be our lookup being wrong rather than the world being empty.
Three empties, none of them real
The first: a search engine's API reported zero crawl activity for one of our domains,
across every date range we tried. The obvious reading was that the site had never been
crawled. The actual cause was a trailing slash. The API stores the property as
https://example.com/ and we were asking about
https://example.com. A string mismatch returns an empty set, not an error,
because as far as the API is concerned you asked about a site it does not have.
The second: an index-status check on a section page came back "unknown to Google," which reads as a discovery failure worth investigating. The page was unknown because it does not exist. We had assumed a URL pattern from the other site in the portfolio instead of reading the sitemap we ourselves publish.
The third was ours all the way down. Our audit script reported a meta description of 30 characters on a page where the real value was 220. The regular expression pulling the attribute stopped at the first apostrophe inside a double-quoted string — the word web's ended the match. The page was fine. The measurement was broken, and it had been quietly reporting a defect that did not exist while being equally capable of hiding ones that did.
Why empty is more dangerous than broken
An exception interrupts you. It arrives with a stack trace, a status code, something to search for. Every instinct you have is already pointed at it.
Zero rows does none of that. It is a legitimate answer to a legitimate question, and the only thing distinguishing "there is nothing there" from "you asked the wrong question" is context that lives outside the result. So the empty case passes straight through review, gets written into a summary as a finding, and by the time anyone revisits it, it has been repeated enough times to feel established.
This is the same failure we design against everywhere else in our data work. A scrape that returns a blocked page as valid HTML, a write that returns success before it settles, an extraction that confidently produces the wrong field from a redesigned page: all of them are systems reporting completion for work that did not happen. We had a name for the pattern and still walked into it three times in an afternoon, because it wears different clothes when the tool is your own.
The habit that catches an empty result
Before treating an empty result as evidence, prove the query would have found something if something were there. Ask the same system for a case you already know exists. Query the identifier the system itself reports rather than the one you typed. Read the sitemap instead of assuming the URL. In our third case the check was cheap and obvious in hindsight: measure a page whose description you can see with your own eyes, and confirm the number matches.
None of this is sophisticated. It is one extra step, and the reason it gets skipped is that empty results do not feel like they need verifying — the work already appears done. That feeling is precisely the signal. A tool that returns nothing has told you about itself as much as about its subject, and you cannot tell which until you check.
What we changed in the tooling
The attribute parser is fixed and the audit re-run. The lookup helpers now query both places a value can live rather than the one we expected, because half of these mistakes came from asking a single field a question it could not answer. And the audit itself moved earlier: it runs against built output before anything deploys, so a measurement disagreeing with reality surfaces while both are still in front of us.
The broader lesson is not about parsing. Any pipeline that turns queries into conclusions needs a step where the query itself is on trial, and the natural moment for that step is exactly when the result is empty and the temptation is to write it down and move on.