We Added 2,100 Pages in Three Weeks. Then Our Non-Brand Traffic Went to Zero.
Between July 6 and July 30 we took a sitemap from 8,746 URLs to 10,845. Roughly 2,100 new pages: keyword collection pages assembled from our own template catalogue, prompt library pages, explainer and comparison articles — each one translated into twelve locales by an LLM pipeline.
For three weeks the numbers said it was working. Then, over about a fortnight, non-brand organic search went to essentially zero.
This is the diagnostic trail, published because the interesting part is not “programmatic SEO can backfire” — everyone knows that — but how long it looked fine, and which specific signals eventually separated “we were demoted” from the four other explanations that fit the data equally well at first.
The aggregate numbers lied for three weeks
Here is what a 28-day rollup showed us, reviewed on four separate occasions:
| Review date | Clicks (28d) | Impressions (28d) | CTR | Avg. position |
|---|---|---|---|---|
| Jul 21 | 656 | 2,660 | 24.7% | 20.4 |
| Jul 24 | 868 | 2,909 | 29.8% | 19.0 |
| Jul 26 | 1,009 | 3,068 | 32.9% | 18.2 |
| Jul 30 | 1,340 | 3,430 | 39.1% | 16.5 |
| Aug 1 | 1,350 | 3,440 | 39.3% | 16.4 |
Clicks up. Impressions up. CTR improving. Average position improving. Every review concluded the strategy was working, and three consecutive reviews recommended more of it.
Now the same period by day:
| Date | Clicks | Impressions |
|---|---|---|
| Jul 10–13 | 60–90 | 350–407 |
| Jul 20 | 158 | 171 |
| Jul 27 | 69 | 80 |
| Jul 28–29 | 23 | 28–35 |
| Last 24 hours | 5 | 14 |
Daily impressions fell by roughly 90% and never came back. The 28-day rollup kept rising because the good days had not yet aged out of the window — an aggregate over a rolling window will keep reporting a peak that ended weeks ago, right up until the peak scrolls off the end.
Worse, the metrics that improved were the ones improving because of the collapse. Rising CTR and improving average position, alongside falling impressions, is not three good signals and one bad one. It is one signal: you are being shown for fewer queries, and the ones left are the ones you already ranked first for. Our CTR went up because only our brand name was still being served.
CTR up + average position up + impressions down is a warning, not a win. Healthy expansion looks like the opposite: impressions climbing while CTR and position get worse, because you are appearing for things you don’t rank well for yet.
Distinguishing five explanations
Non-brand traffic disappearing has at least five candidate causes, and they demand completely different responses. Here is the evidence chain that eliminated four of them.
Manual penalty? No. The manual actions report was clean. Worth checking first because it is the only cause that comes with an explicit notification and an appeals process.
Deindexing? No. Indexed page count sat flat at 8,300, the same figure as a week earlier. A site: query still returned page after page of results. Pages were in the index; they simply were not being served.
Technical failure? No. Crawl stats reported no issues at 217ms average response. robots.txt allowed the search crawler (we block AI-training user agents only). Every page returned 200 with complete server-rendered HTML — correct title, correct h1, index, follow. The sitemap was valid.
Seasonality or a market-wide shift? No, because of the shape. Brand traffic was untouched.
That last point is what actually clinched it, and it is the single most useful test in this whole exercise:
| Query | Position before | Position now |
|---|---|---|
| A localised head term (was 133 clicks) | 1.9 | not in top 20 |
| A second localised head term | 3.0 | not in top 20 |
| A third, in another language | ~5–7 | not in top 20 |
| Our brand name | 1.0 | still #1, 178 clicks/28d |
Navigational brand intent surviving intact while every non-brand term drops out of the top twenty, with pages still indexed and the site technically healthy, is the signature of a site-level algorithmic demotion. Nothing else produces that specific pattern. A technical fault takes the brand term down too — it is the first thing to break when rendering breaks, and it did not break.
One methodological note, because it cost us time: do not read positions out of your search console’s ranking column and stop there. Search the actual query, in the actual market, and look at the result page. The console’s averages are smoothed over a window that includes the days before the fall.
What the 2,100 pages had actually earned
Once the diagnosis was clear, the obvious question was whether the new pages had been worth it independently of the demotion. We pulled the page-level report over roughly 90 days:
| Page family | URLs | Clicks | Impressions |
|---|---|---|---|
| Template detail pages (pre-existing) | ~12,000 | 874 | 7,872 |
| Home + locale hubs | 13 | 461 | 944 |
| Collection landing pages | 540 | 83 | 338 |
| Articles | 996 | 5 | 51 |
| Prompt library pages | 396 | 0 | 0 |
1,932 landing pages produced 88 clicks — about 6% of site traffic — over three months.
And the distribution inside each family was a cliff, not a slope. Of ten collection pages built in the first week against genuine head terms, all ten earned impressions. Of the thirty-four niche collection pages added afterwards, exactly one ever did. Of 83 articles, 12 ever earned an impression.
The prompt library pages earned nothing at all, and could not have: each one re-listed prompt text that already published on the corresponding detail page, and a grep of the entire codebase found no internal link to them from anywhere. They existed only in the sitemap. We had built 396 URLs of near-duplicate content, orphaned them, and submitted them for indexing.
What we think happened
We cannot prove causation, and we want to be careful about that. What we can say is that the profile matches the published description of scaled content abuse closely: a large volume of pages generated primarily to catch search queries, machine-translated across locales, with body copy on flagship pages in the 1,600–3,900 character range. That policy is enforced algorithmically. It does not generate a manual action notification, which means “no manual penalty” cannot be used to rule it out — a mistake we made for several days.
The honest sequence is also worth recording, because it is a trap. Back in mid-July we had already seen one sharp drop, investigated it properly, and concluded it was the normal “initial evaluation” bump receding after a large batch of new pages — Google discovers a lot of URLs, shows them briefly while assessing them, then settles them at their real position. That analysis was reasonable and probably correct for that week. It also gave us a ready-made explanation that absorbed the next drop, and the one after that.
Once you have a benign explanation for a decline, you will apply it to the following decline without re-deriving it. Ours held up for three reviews.
What we did
We pruned. The rule was mechanical: shipped at least 14 days ago and at most 2 impressions in 90 days. That took 20 collection pages, all 33 prompt library pages and 37 articles — 90 page types, 1,080 URLs across 12 locales, with zero historical clicks lost. Pages shipped in the last week were deliberately left alone; they have not had a fair window.
They were de-indexed rather than deleted: dropped from the sitemap, dropped from every internal link row, serving noindex, follow. Nothing 404s and no inbound link breaks. Because the diagnosis is an inference, the revert is emptying three sets in one file.
There is a real trade-off we made explicitly: removing URLs from the sitemap lowers their recrawl priority, and a noindex only takes effect once the page is recrawled. The alternative is to leave them listed for a few weeks so they get picked up and dropped, then remove them. We chose immediate removal — they are already known URLs and get recrawled regardless — and set a checkpoint: if they are still indexed in a month, switch approaches.
What we would tell someone starting a programmatic build
Review daily, and by country. A rolling aggregate will hide a collapse for as long as the window is wide. We ran four reviews on aggregates and read a 90% decline as growth every time.
Treat improving CTR and position with falling impressions as an alarm.
Check whether a page family earns anything before scaling it. Our first ten collection pages all earned impressions and the next thirty-four did not. That signal was available after the first week and we did not look for it, because the aggregate was rising.
If a page has no internal links, it should not exist. The prompt pages were reachable only via the sitemap. That is not a page, it is a submission.
Write down the point at which you’d conclude a benign explanation was wrong — a date, a number — at the moment you adopt it. Otherwise it will quietly absorb every subsequent decline.
And the one we are living with now: you cannot un-publish your way back to where you were quickly. Removing 1,080 URLs took an afternoon. Whatever recovery follows will be measured in months, if it comes.