AI Engineering9 min read

3,572 Impressions, Zero Clicks: What Agentic Search Looks Like in Search Console

By Ergini, Software & AI Developer

TL;DR

Between 10 and 30 August 2026 a single page on this site collected 3,572 impressions at average position 8.2 and zero clicks, from 225 near-identical permutations of one query. Some permutations carried a stray % or + prefix; most were suffixed 2026; one asked for 2024. On 30 August it stopped in a single day, taking site-wide impressions from roughly 400 a day to 110 and average position from 14 to 47 at the same time. Both metrics moving together is the signature: a penalty cannot do that. This is what an agent enumerating query space looks like from the publisher's side, and if you do not segment it out, your CTR is measuring a machine.

The anomaly

In August 2026 one page on this site started collecting impressions at a rate nothing else here has ever managed. Over twenty-one days it accumulated 3,572 impressions at an average position of 8.2. A page sitting on the first page of Google for three straight weeks.

It received zero clicks. Not a low number. Zero.

At position 8, published click-through curves would predict somewhere between 1 and 2 percent, so roughly 35 to 70 clicks. Getting none is not a bad title. Getting none across 3,572 chances is a different kind of event, and the query report explains it immediately.

225 permutations of one question

The page ranks for a technical reference topic, OpenAI's structured outputs. The queries driving those impressions were these, and about two hundred more like them:

QueryImpressionsPosition
openai structured outputs json schema official docs1978.1
openai structured outputs official docs json schema1218.6
openai structured outputs json schema official documentation668.9
%openai structured outputs json schema official docs577.7
openai api structured outputs json schema official docs458.0
openai structured outputs json schema official docs 2026426.9
+openai structured outputs json schema official docs367.9

Six tokens, recombined. Docs and documentation swapped. The word api inserted and removed. A year appended, usually 2026, once 2024. And on a handful of them, a leading % or + that no human types and no keyboard produces by accident.

Two hundred and twenty-five of these. Every one of them pointed at the same page. Every one of them with a click-through rate of zero.

Nobody looking for OpenAI's documentation searches for it two hundred and twenty-five different ways. They search once, and if the first result is platform.openai.com, which it is, they click it and leave. What produces this shape is a program: something enumerating the query space around a topic, reading the result list, and moving on without ever following a link.

Then, on 30 August, it stopped

Not tapered. Stopped. Site-wide daily impressions went from roughly 400 to roughly 110 across two days, and in the same two days the site's average position moved from 14 to 47.

DateImpressionsAverage position
29 August 202624918.5
30 August 202623624.0
31 August 202612146.8
1 September 202610742.6

On any dashboard that is a catastrophe. Impressions down 70 percent, average position down thirty-three places, over a weekend. It is the exact shape of a manual action, and I would guess a fair number of teams have filed a reconsideration request over less.

Why both numbers moving together is the proof it was not a penalty

A demotion makes position worse while impressions continue, because the pages are still being shown, just lower. A deindexing removes impressions but leaves the average position of whatever survives roughly where it was. Neither one moves both metrics in the same direction at once. The only ordinary cause of that is a large, well-ranking cluster vanishing entirely and leaving a smaller, worse-ranking remainder behind to define the average.

The arithmetic closes cleanly. Before the drop, roughly 330 impressions a day at position 8 plus roughly 120 a day at position 34 gives a weighted average of (330 x 8 + 120 x 34) / 450 = 14.9, against the 13 to 15 actually observed. Remove the first term and you are left with 120 a day at position 34, against the 29 to 47 actually observed afterwards. Nothing was lost. Something that was never there in a meaningful sense went away.

What was it, actually

I cannot prove which system this was, and I am not going to pretend otherwise. What the data supports is a narrower claim: something automated was issuing queries to Google Search, at scale, over a three-week window, with a fixed generation template, and it terminated on a single day.

The candidates are unglamorous and all plausible:

  • A research or retrieval agent doing query fan-out against a live search API. Query expansion is exactly this: take one user question, generate a dozen or more reformulations, run them all, synthesise the results. The 2026 suffix and theofficial docs qualifier are the kind of thing a model adds when told to prefer current, authoritative sources.
  • A rank tracker or SERP scraper run by somebody monitoring the topic, which would explain the fixed template and the clean termination when a subscription lapsed or a job was deleted.
  • An evaluation harness for a search-augmented model, generating query variants to test retrieval consistency.

The stray % and + prefixes point at the first or third: they look like a template-injection artefact, a formatting token that leaked into the query string rather than a search operator anyone intended. A commercial rank tracker is less likely to ship that bug for three weeks.

Worth being precise about one thing, because it is the most common confusion: this is not GPTBot or ClaudeBot crawling the site. Declared AI crawlers arrive as identifiable user agents in your server logs and never appear in Search Console at all. This traffic appeared only in Search Console, which means something was querying Google and being served the result, not fetching pages here. Those are two entirely different surfaces, and your robots.txt governs only one of them.

The part that costs you money

The rankings were never affected. The reporting was wrecked.

MetricAs reportedExcluding the cluster
Site-wide click-through rate0.40%1.07%
Share of impressions from two pages63%n/a

A factor of nearly three, on the single number most teams use to judge whether their titles and descriptions are working. Left uncorrected it produces two consecutive wrong conclusions: first a month of apparent growth while nothing commercial moves, then a month of apparent collapse while nothing commercial moves.

The fix is unglamorous and takes an afternoon. Filter the cluster out by its distinguishing tokens, not by page, because the same page usually serves both real and synthetic demand. Report qualified impressions and qualified CTR as the headline figures and push the raw totals into a footnote. Then write down what the cluster looked like, because when it stops you will want the note.

The wider thing this is evidence of

Set aside the reporting problem and something more interesting is visible. For a couple of decades the assumption behind every search metric was that an impression corresponds to a person, and a click corresponds to interest. Both halves of that are now unreliable, and they are becoming unreliable in opposite directions.

On one side, machines generate impressions that mean nothing, as here. On the other, machines consume your content and generate no impression at all: when an assistant reads your page and paraphrases it into an answer, the value transferred is real and the analytics event is absent. Search Console will show you the first and never the second.

The practical consequence for anyone publishing technical content is that a page can be doing its job perfectly while every number attached to it looks like failure. The page in this story is a reference page, competing against platform.openai.com for a navigational query. The click was never winnable, by anyone, at any position. Its job is to be quoted, and the metric that would actually capture whether it is working is whether an assistant names the source when it reproduces the claim. That is a metric nobody gets in a dashboard, and it has to be checked by hand.

Which is a strange place for the web to have arrived at, and it is worth saying plainly rather than pretending the dashboards still mean what they used to.

What to do on Monday

  1. Sort your query export by impressions and read the top fifty rows as text, not as numbers. Machine clusters are obvious to the eye and invisible to a chart.
  2. Segment before you optimise. Any page with high impressions, a decent position, and a categorically zero CTR should be checked for query shape before anyone touches a title tag.
  3. Change the headline metric to qualified impressions and qualified CTR, and define the exclusion rule in writing so the number is reproducible next quarter.
  4. Write down the cluster's signature and date. When it stops, the drop will look exactly like a penalty, and the note is what stops somebody spending a fortnight on a phantom.
  5. For pages whose click is genuinely unwinnable, stop grading them on clicks. Ask the assistants the questions those pages answer, once a month, and record whether you get named. It is a manual process and it is currently the only honest scoreboard.

Method and limits

Source: Google Search Console performance export, search type web, one verified property, 10 August to 6 September 2026. Figures are as exported and unrounded except where stated.

Two limits worth stating. Search Console anonymises rare queries, and in this window 58 percent of impressions never appeared in the query report at all, so the 225 permutations are a floor rather than a count. And attribution of clicks is page-level rather than query-level for the same reason, which is why every click figure here is per page.

If you have seen the same pattern, the shape is distinctive enough to compare notes on: a single page, a template-generated query cluster, a good position, no clicks, and a hard stop. I am curious whether the 30 August termination shows up in anyone else's data, because that would say something about what was running it.

Related reading on the page at the centre of this: OpenAI structured outputs and strict JSON schema, and on building agents that can account for their own behaviour, AI agent design patterns and human-in-the-loop review that people actually use.