What Google actually penalised: a 25,000-page post-mortem
In April 2026 a Kerala exam-prep site I run got 75 clicks from Google search in a month. In September it got 3. Impressions went from 2,015 to 396. Nothing on the site had been deleted, nothing had been hacked, and every technical check came back clean.
This is the post-mortem. I am writing it up in detail because almost every piece I have read about “AI content penalties” is written by someone who was not running the site, and because the fix I chose is not the one most SEO advice would give you.
The numbers
| April 2026 | September 2026 | |
|---|---|---|
| Google clicks | 75 | 3 |
| Google impressions | 2,015 | 396 |
| URLs in sitemap | growing | 25,146 |
| URLs that earned any impression in 28 days | about 97 | |
| Homepage average position | 48.8 | |
| Backlinks | 0 | 0 |
The site publishes bilingual mock tests and daily current affairs for Kerala Public Service Commission candidates. English and Malayalam. Fifty scheduled tasks, ten model providers behind one router, about 4,800 YouTube videos in six months. The whole thing cost around 25 dollars in paid model calls over five months. It is, by any definition, scaled content. I built it knowing that.
What I ruled out first
When traffic collapses the instinct is to look for something broken. I spent two days doing exactly that, with the Search Console API, so I could rule it out properly rather than by feeling.
Technical SEO was clean. Canonicals correct. Unique titles and descriptions on every page. 30,000 characters of server-rendered text per mock page, no client-side rendering trap. Valid Quiz and Question structured data. Robots open. The pages were being crawled. Search Console said “crawled, currently not indexed” for most of them, which is the status Google gives when it has seen your page and decided not to bother.
Indexing plumbing had already been fixed. In September I had found and repaired a real problem: IndexNow pings were not wired to the right domain and the core sitemap was three weeks stale. That fix worked at the crawl level. Crawl rate went up. Traffic did not move. That is the moment to stop blaming plumbing.
Two things did turn up in this pass that were genuinely wrong, and they are worth knowing about because they are common.
- Eight groups of English-only pages were emitting a Malayalam
hreflangalternate pointing at URLs that returned 404. When one alternate in a cluster fails, Google discards the whole cluster. Not the cause of the collapse, but it was costing the pages that still ranked. - All sixteen Malayalam cadre hub pages were missing from the sitemap, because they came from a gated dynamic route that the sitemap integration never saw.
Both fixed. Neither was the story.
The actual shape of the problem
The sitemap had 25,146 URLs. Of those, 24,397 were mock-test pages. Twelve thousand English, twelve thousand Malayalam, all generated from the same template with different questions dropped in. Ninety-seven percent of the site was one page, repeated.
About 97 URLs earned any impression at all in 28 days. The homepage took 229 of the site’s 368 monthly impressions, at an average position of 48.8. Page five of the results.
Then the number that reframed everything. The site had no backlinks. Not few. None. Six months, 4,800 videos, a Telegram channel, a Play Store app, and not one external site had linked to the domain, because nothing on it was worth linking to and I had never asked anyone.
Put those together and the diagnosis writes itself. Google’s scaled-content systems saw a domain with no authority where 97 percent of pages were templated near-duplicates, and applied a site-wide quality discount. The handful of pages with real demand behind them, the cadre pages and exam-level pages, were sitting at positions 28 to 39 even when they matched the query exactly. Those are the positions of a site Google has no reason to trust, not of a site with a broken tag.
And here is the part most post-mortems leave out: Google was right. I would not have linked to it either.
The lever I refused to pull
Standard advice for a scaled-content demotion is to noindex the thin pages. Remove 24,000 duplicates from the index and let Google re-evaluate what is left.
I did not do it, and the reason matters if you run anything bilingual or anything that depends on AI assistants for traffic.
A sitemap is a hint. noindex is an instruction, and Bing obeys it too. So do the AI answer engines, which largely inherit from the Bing and Google indexes or honour the tag directly. In October this site’s sessions were up 49 percent week over week, led by Bing and ChatGPT referrals. Those channels were working. The noindex route would have traded the channels that worked for a chance at the one that did not.
So the rule I set for the fix was: do whatever is required for Google, as long as Bing visibility and AI visibility stay intact. That rule ruled noindex out and left three levers.
What I changed
- Cut the sitemap from 25,287 URLs to 1,404. I kept the pages that had earned an impression in sixteen months of Search Console data plus the hubs they hang off. The other 24,000 pages are still live and still reachable through real anchor links, so Bing and the AI crawlers keep their paths in. They are just no longer presented to Google as the site’s priority.
- Built pages for the demand that already existed. Search Console showed 53 impressions a month for one exam category the site had no page for at all. Another exam that people searched for was conducted by a different body entirely and the site had never mentioned it. Four new hub pages, written to match the terms the commission itself uses, with honest coverage notes about what the practice material does and does not cover.
- Fixed the plumbing properly. The hreflang clusters, the missing sitemap entries, lastmod coverage from 232 URLs to 1,194, and one 3.8 MB page turned into lazy-loaded JSON.
- Stopped growing the pile. The nightly tasks that had been adding templated pages every day were paused.
What I expect, honestly
Recovery from a scaled-content discount takes months when it happens at all. With zero backlinks it may not happen for this domain, and if nothing has moved six weeks after the prune the reason will be authority, not the prune. The next piece of work is earning ten to twenty genuine links from aspirant communities and college career pages, and publishing the one dataset on the site nobody else has: 95 official syllabi parsed into subject weightings. That is link-worthy in a way twelve thousand mock tests never will be.
If you want to see what the Google line does from here, it is in the case study, which I update as the data comes in.
What this means if you are building AI content for a business
- Volume is not a strategy, and Google can now tell. Demand-matched pages, written for queries you can see in your own data, are a strategy.
- Check authority before you diagnose content. A domain with no backlinks will look like it has a content problem whatever you publish.
- Know which of your levers are hints and which are instructions. A sitemap change is reversible in a week. A
noindexacross your catalogue removes you from Bing and the AI assistants on the same day. - Wire Search Console before the first publish. Every decision above came from sixteen months of impression data. Without it I would have been guessing like everyone else.
- Write the post-mortem. The consultant who only shows you recoveries is hiding the base rate.
This is a field note from a system I run myself. Questions: hello@tahirhaneef.com