Traffic had been falling and I assumed it was an SEO problem. It was three login walls.
The hub that all 113 test pages hang off called an auth guard, so every single person arriving from Google was bounced to an account page before seeing anything at all. The Writing Lab had two gates — a login and a hardcoded access code. The speaking section had a third. All three are gone. Signing in is now optional and only buys you saved results.
The hub itself stopped being a wall of links. It asks one question — choose a skill — and offers five cards: Listening with 73 papers, Reading with 25, Writing, Speaking, and the full mock, with a start-here card pointing at Cambridge 21. The audit also caught that the hub builds its list in JavaScript, so a crawler saw an empty page and none of the catalogue behind it. That is why flarestamina.com/tests now exists: a plain static index of every test, so Google can read what a person could already see.
Then the actual SEO, across 113 separate repositories through the GitHub API. Missing meta descriptions 101 to 0, every one generated from the page's own real headings rather than imagined. Missing canonical tags 107 to 1. Missing analytics 108 to 1. Duplicate titles 2 to 0. Structured data 0 to 106 test pages. Titles rewritten to match what people actually type. Three new landing pages for listening, reading and Uzbek-language search, plus an IndexNow key and a sitemap that stopped lying about its dates.
The audit also found a duplicated analytics snippet double-counting every pageview, 65 pages still carrying a headline from a previous redesign, and nineteen reading pages sharing identical body text, which to a search engine reads as one page repeated nineteen times. All fixed.
Last piece:
flarestamina.com/stats, every site's visitor count in one table with no login. Having to check seven dashboards was exactly why I checked none of them.