Our August 2026 Google Traffic Drop: A Search Console Postmortem
We build an AI SEO tool. On 18 August 2026 our own site’s search impressions fell from 1,152 to 26.

This is a measured postmortem, not proof that Google penalized us. It separates observed Search Console data, product changes, and hypotheses. Every number comes from our Google Search Console property or our production database; nothing here is modelled or estimated.
Download the raw GSC snapshot (CSV) used for the 10–18 August table. It contains the exact property, search type, scope, dates, impressions, and average positions shown here.
We are publishing it because three separate audits of our own site got the cause wrong, and the reason they got it wrong is a mistake we suspect a lot of people are making right now.
The number
Daily impressions, sc-domain:seobase.co, web search, all countries and devices:
| Date | Impressions | Average position |
|---|---|---|
| 10 August | 248 | 84 |
| 11 August | 287 | 84 |
| 12 August | 752 | 79 |
| 13 August | 1,470 | 74 |
| 14 August | 1,005 | 75 |
| 15 August | 1,342 | 75 |
| 16 August | 1,560 | 73 |
| 17 August | 1,152 | 71 |
| 18 August | 26 | 84 |
| 19 to 30 August | 23 to 57 | ~80 |
| 1 to 7 September | 6 to 13 | 20 to 45 |
Two things in that table are easy to misread.
The 12 to 17 August spike was not success. It was Google discovering a batch of new pages and testing them, mostly at positions 70 to 90. We were briefly visible on page 8 for a lot of queries.
The September “improvement” in average position is not recovery either. The impressions that sat at position 80 to 90 disappeared, so the small number that remain average better. Position improved because the traffic left.
What changed on 18 August
Google’s Search Status Dashboard records the August 2026 spam update as starting on 18 August and ending two days and 16 hours later. Our collapse began on the same day. That is a temporal match, not proof that the update caused our loss.
Google’s spam policies describe scaled content abuse as publishing many pages primarily to manipulate rankings rather than help users. We compare that guidance with our own publishing record below, but we cannot see which system, if any, evaluated our site.
The timing changed our hypothesis, but it did not establish causality. We are recording the overlap because it is useful evidence, not presenting it as a confirmed penalty.
We had a genuinely bad backlink profile: 277 backlinks across 140 referring domains, a Semrush authority score of 2, and a cluster of 33 links from 28 domains all using a private blog network’s own sales copy as anchor text. Two of our three internal audits concluded that this was the cause and made disavowing it the top priority. A third called the cause unproven.
Our earlier audits over-weighted the backlink profile. Those links remain a real authority problem, but the available evidence does not prove they caused the one-day drop, and we have no evidence that disavowing them would restore impressions.
The audit lesson was simple: check the date against Google’s update calendar. We also checked deployments, robots.txt, and 200 responses. A same-day overlap is a lead to investigate, not a diagnosis; keep technical evidence and causal inference separate.
If your traffic dropped off a cliff on a specific day, search that date before you audit anything.
What our publishing history shows
Here is our own publishing record, straight out of our production database. Articles published per week to seobase.co:
| Week beginning | Articles published |
|---|---|
| 10 August | 8 |
| 17 August | 24 |
| 24 August | 10 |
| 31 August | 11 |
Twenty-four articles went live in the week the update landed, on top of 55 tool pages already live. The pages were structurally competent, but many did not add enough original value or evidence. That publishing pattern is a risk we now treat as a product failure, not proof of what Google classified.
It is consistent with the kind of scaled publishing we now avoid, but our records cannot prove that a particular Google system made a particular decision.
The code defect behind the burst
We did not deliberately publish 24 articles that week. Our own scheduler did it, and the reason is three lines of our own code. This explains the burst in our publishing record; it does not, by itself, prove why visibility fell.
When our pipeline generated a content calendar it scheduled one keyword per day, like this:
const today = new Date();
for (let i = 0; i < keywords.length; i++) {
const scheduledDate = new Date(today);
scheduledDate.setDate(today.getDate() + i);
}
One article per day. Correct, in isolation.
The defect is that every generation run restarted from today. Run the calendar generator twice and you get two articles on the same day. Run it three times across a fortnight and days start stacking three deep. One run looks like a sensible cadence; several overlapping runs can make a site resemble a content farm to an evaluator.
Scheduling now starts after whatever the product already has queued, so one per day is an actual ceiling rather than a per-run intention.
How bad it was, precisely
Because the spike made things look busy, it is worth stating what our search performance actually was underneath it. Over 90 days (10 June to 7 September), across every page and query pair Search Console reports:
- 683 page and query pairs
- 10,992 impressions
- 4 clicks
All four clicks were on the query “seobase”, our own brand name.
Of those 683 pairs, five ever reached position 20 or better, and three of those five were brand searches or single-impression flukes. 609 pairs, or 89 percent, sat past position 50.
Our blog specifically: 6,104 impressions, zero clicks, in 90 days.
We were not ranking badly. We had no non-brand top-20 rankings at all.
The barbell
The distribution of what did rank is the most useful thing we found, because it explains the ceiling better than any score does.
| Ranks in the top 10 | Ranks 70 to 95 |
|---|---|
/tools/grammar-checker, position 2 (1 impression) |
/tools/headline-checker, position 82 (3,180 impressions) |
/tools/bio-generator, position 3 (2 impressions) |
/tools/meta-description-generator, position 89 (942) |
/tools/robots-txt-file-generator, position 7 (2) |
/blog/find-backlinks-in-google, position 72 (2,890) |
/blog/etsy-seo-tools, position 3 (1) |
/blog/moz-vs-ahrefs, position 79 (740) |
Top three for queries with essentially no volume. Page eight for every query with volume. Nothing at all in between.
That is what a domain with no earned authority looks like in a saturated niche. It can win, but only where nobody is competing.
Why “low difficulty” was a lie for us
Every one of the 78 keywords in our calendar had a difficulty score of 40 or lower. Thirty-four of them scored 15 or lower. By the numbers we were targeting nothing but easy wins.
| Keyword | Stored difficulty | Volume | Our live position |
|---|---|---|---|
| how to find low hanging fruit keywords | 8 | 1,300 | 91 |
| find backlinks in google | 29 | 1,300 | 72 |
| search google or type a url | 22 | 49,500 | no top-50 presence |
Difficulty scores are calibrated against an average site, not against yours. In a niche where every first-page result belongs to Ahrefs, Semrush, Moz or Backlinko, a difficulty of 8 still means you will not rank. The number describes the competition. It says nothing about your ability to beat it.
We then went looking for genuinely low-difficulty opportunities properly: 540 keyword rows across ten technical SEO seeds, keeping the hardest difficulty reading wherever two sources disagreed. At difficulty 30 or below with at least 150 monthly searches, here is what the “easy” pool actually contained:
zuhio keyword count checker, 18,100 a month: another company’s brand nameخرید اکانت ahrefs, 3,600 a month: Persian for “buy an Ahrefs account”php 后门守护进程技术seocreed login: somebody else’s login pagepetaluma search engine optimization,search engine optimization edmonds,coquitlam search engine optimization: local agency terms in towns we do not operate in
About 24,800 monthly searches of that pool was unusable. Difficulty 0 because nobody competes, and nobody competes because there is nothing there.
One coherent, genuinely uncontested cluster did survive: LLM rank tracking. Thirty-seven keywords, roughly 8,900 monthly searches, maximum difficulty 5, things like copilot rank tracking and best perplexity rank tracker. That is the one case where a difficulty of 0 is real rather than mis-calibrated, because the category is months old and nobody has built authority in it yet.
The distinction is the whole lesson. Difficulty 8 on hreflang generator is mis-calibration. Difficulty 0 on copilot rank tracking is an absent competitor.
The gate that let it through
We already had the mechanism that should have caught petaluma search engine optimization: a semantic relevance check that scores every candidate keyword against a description of the product.
We tested it against our real product description after the fact. It scores petaluma search engine optimization at 0.386 and seocreed login at 0.343, both well under our 0.45 floor. It would have rejected both.
It never ran on them. One line was responsible:
const exemptFromRerank = (c) => c.source === "gsc" || c.source === "competitors";
Any keyword mined from a competitor’s rankings was exempted from the relevance check and handed a perfect score. Almost every keyword we had was mined from a competitor, so for practical purposes the relevance gate was off.
The exemption was protecting something real, which is why it was written that way. A prose description of your product does not read as similar to a legitimate comparison keyword: moz vs ahrefs scores 0.336 against ours, and that page is our best performer. Judge it on prose similarity and you delete your own best content.
The fix was to make the exemption something a keyword earns with evidence rather than something it inherits from its source. A competitor ranking in the top 10 at real volume is evidence. A comparison against a named competitor is evidence. “Some competitor ranked for this once” is not.
We also found that our near-duplicate check did no stemming at all, so seo for architectural firms, seo for architect firms and seo for architecture firm were three different topics as far as it was concerned. All three were scheduled as separate articles.
What we changed
- Halted publishing on our own site entirely.
- Unknown keyword difficulty now fails the winnability gate instead of passing it. Every one of our keyword data providers was failing when we checked on the morning of 8 September (two recovered later the same day), and a run during that window would have produced a calendar of candidates whose difficulty nobody had ever checked.
- Scheduling anchors to the existing queue instead of restarting at today.
- The relevance exemption now follows evidence, not source.
- Near-duplicate detection stems, so one intent is one article.
- Removed a fabricated case study from one of our own posts. It claimed “within 45 days, 11 of the 18 targeted queries moved into positions 2 through 5” and attributed it to an anonymous “Site X”. It was not true. We replaced it with the real numbers above. We scanned all 66 of our articles and it was the only fabricated outcome claim, which is one more than acceptable.
- Repaired 11 dead internal links. One pointed at an article that was still sitting unpublished in the queue.
- Removed 27 tool pages from our index that targeted head terms owned by Grammarly and QuillBot and were never going to rank.
Related workflow: use the internal linking tool to connect revised pages, then start a free Seobase trial only after the page, evidence, and review gate are ready.
What we do not know yet
We have not recovered. Nothing in this post should be read as a recovery case study.
Recovery from an algorithmic spam demotion requires Google to recrawl and re-evaluate the site, and it takes months. We are publishing our baselines now so that we cannot quietly move the goalposts later:
| Measure | Baseline, 10 June to 7 September |
|---|---|
| Page and query pairs at position 20 or better | 5, of which 3 are brand or flukes |
| Non-brand blog clicks | 0 |
| Share of pairs past position 50 | 89% |
We will re-measure against equal windows and report what happened either way.
What we would tell you
If you publish with automation, do not equate a high internal score with a ranking outcome. Our internal score measures structure; it does not measure authority, intent fit, or Google’s evaluation. A safer workflow starts with a small canonical set, a review gate, and a Search Console baseline. Use the SEO roadmap template and content brief generator to make those decisions explicit.
Three things we would check in your position:
- Check the date first. Search your drop date for a confirmed Google update before auditing anything internal.
- Look at your publishing velocity as Google sees it, not as you intended it. Count what actually went live per week. We intended one a day and shipped 24 in a week without deciding to.
- Stop treating a difficulty score as permission. Open the results page. If every result is a decade-old domain, the fruit is not low hanging, whatever the tool says.
Put this on autopilot
Seobase runs the whole loop for you: it finds the keywords worth ranking for, writes and publishes the articles, and reports back from Search Console on what actually moved.
Start a free Seobase workflow
