Published
Poisoned SERPs: How Google Feeds Scrapers Wrong Results
When Google detects a scraper, it usually responds with a CAPTCHA, its "unusual traffic" page, or an HTTP 429. Scrapers can detect those responses and retry.
Since September 2026, rank trackers and SERP data providers have reported a different response. Google returns a complete results page that looks normal, but most of the sites that usually rank for the keyword are missing. The SEO industry calls these poisoned SERPs.
The status code, layout, result count, titles, and snippets of a poisoned SERP all look normal, so the usual block checks pass. The results themselves are wrong.
What is a poisoned SERP?
A poisoned SERP is a Google results page served to a suspected automated collector with most of its usual organic results swapped for other sites.
Nozzle, the rank tracker that published the most detailed study of the pattern, uses a concrete definition. For each keyword, it identifies the "usual sites": domains that appeared in the top 10 on at least 60% of that keyword's SERPs from August 20 to September 9, 2026. A later page counts as poisoned when fewer than half of those usual sites appear on it.
Under this definition, most of the page changes. In Nozzle's data, page-one organic results normally keep 88.2% of the previous reading's sites, while poisoned pages keep 29.1%.
Poisoning differs from the failures scrapers already handle:
- Blocks return a CAPTCHA, an interstitial, or an error code. A poisoned page returns HTTP 200 with a full set of results.
- Partial pages are missing positions or stop early. A poisoned page is complete.
- Real ranking changes persist. On a poisoned page, the usual sites come back on later fetches, and real users never saw the swapped results.
What the data shows
Almost all public measurements come from Nozzle. Unless noted, the figures below are from its study as updated November 1, 2026. Articles published in October cite different figures from earlier versions of the study.
- Timeline. Nozzle's requests started failing on September 13, 2026. The first poisoned SERPs appeared on September 20.
- Scale. Nozzle's analysis covers 66.7 million judged SERPs across 58 countries. Since September 13, 14.3% of page-one SERPs were poisoned, compared with a baseline of 0.17%. Counting page one or page two, the rate is 26.9% against a 0.28% baseline.
- Volatility. The daily rate swings widely. Across all SERPs, it ranged from 26% to 29% on September 27 to 29, fell to about 3% in mid-October, and rose to about 35% on October 27. Counting page one or page two, it reached 64.0% on October 31.
- Visibility. A tracked site falls out of the top 10 on 63.5% of poisoned readings, compared with 2.6% of normal ones. A sharp drop in a tracker is often how poisoning gets noticed.
- Duration. Nozzle says two in three poisoning spells last for a single SERP. The share of poisoned readings whose usual sites return within three days has fallen over time, to 46.9% as of November 1 from 67.9% through October 21.
- Device. Device type makes little difference: 14.9% on desktop, 14.1% on iPhone, and 13.0% on Android.
Other trackers report the same pattern at different rates. AccuRanker told Search Engine Watch that its rates peaked at 30.2% on desktop and 25.7% on mobile and fell below 1% by October 17. AccuRanker also observed that Google appears to decide per browser session rather than per keyword.
Semrush, in a statement reported by Search Engine Watch, said: "We've been seeing Google return inaccurate results to automated collectors since late summer." It described the impact on its users' tracked rankings as limited, with most cases "beyond the first page of results."
The rates vary because each provider collects results differently and uses its own definition of poisoning.
Why would Google do this?
Google hasn't commented publicly on poisoned SERPs. Every explanation so far is an inference by people outside Google.
Nozzle's view is that the poisoning is aimed at AI scraping and that rank trackers are caught in it. Some SEO consultants have suggested it may target LLM competitors that ground their answers in Google results, with rank trackers as collateral damage.
Whatever the motive, poisoning is harder for a scraper to handle than a block. A blocked request can be detected and retried, but a wrong page that looks normal can be stored, analyzed, or passed to a model before anyone notices. Google has also taken legal action against scraping: it sued SerpApi on December 19, 2025 over automated access to its search results.
Why poisoned SERPs are hard to catch
Most scraper monitoring checks the status code, response size, CAPTCHA detection, parse success, and result count. A poisoned SERP passes all of these checks.
Poisoning is a kind of silent scraper failure: the request succeeds and the data is wrong. Nothing in the HTML marks a poisoned page, so the only way to find one is to compare its results with data you trust.
In a rank tracker, a poisoned reading can show a client's page dropping out of the top 10 and trigger an alert for a ranking change that didn't happen. An AI agent grounded in search results may cite the swapped-in sources with no sign that they're wrong.
How to detect poisoned SERPs
These checks use only data you already collect.
1. Compare each reading with the keyword's history
This is the test Nozzle uses to define poisoning. Keep a set of each keyword's usual domains over a rolling window. Flag any reading where fewer than half of them appear.
from collections import Counter
from urllib.parse import urlparse
def domain(url: str) -> str:
host = urlparse(url).hostname or ""
return host.removeprefix("www.")
def usual_domains(history: list[list[str]], min_share: float = 0.6) -> set[str]:
"""Domains in the top 10 of at least `min_share` of past readings."""
counts = Counter(d for urls in history for d in {domain(u) for u in urls[:10]})
return {d for d, n in counts.items() if n / len(history) >= min_share}
def looks_poisoned(reading: list[str], history: list[list[str]]) -> bool:
usual = usual_domains(history)
if len(history) < 5 or not usual:
return False # not enough history to judge
present = {domain(u) for u in reading}
return len(usual & present) / len(usual) < 0.5
Use a reading's whole page when checking which usual domains are present, not only its top 10. That way, a site that moved from position 4 to position 12 still counts as present.
2. Re-fetch before you report a drop
Because most poisoning doesn't last, a suspicious reading is worth confirming. Re-run the query after a delay, preferably in a new session. If the usual domains return, discard the poisoned reading rather than averaging it into history.
3. Look for corroborating signals
Compared with normal readings, poisoned readings show a tracked site out of the top 10 much more often. Several tracked keywords dropping at once, on one collection run, is a stronger sign of poisoning than a single keyword moving.
4. Use Search Console as the tiebreaker
Poisoned pages are served to automated collectors, so Search Console data reflects the results real users saw. If a tracker says a page dropped but Google Search Console shows steady impressions and clicks, the tracker probably received a poisoned reading.
What to ask your SERP API provider
If you buy Google results from a provider, its responses look the same whether or not Google poisoned the underlying page. Ask your provider:
- Do you detect poisoned SERPs, and how?
- What happens to a reading you suspect is poisoned: is it re-fetched, flagged, or returned as is?
- Can I get the raw HTML for a result I want to verify myself?
- Am I billed for a reading that turns out to be poisoned?
You can also run the history comparison above on a sample of your own keywords, and check whether sudden drops in your data line up with Search Console.
Frequently asked questions
What is a poisoned SERP?
A poisoned SERP is a Google results page served to a suspected scraper that looks complete and normal but has most of its usual organic results replaced with other sites. It returns HTTP 200 with no CAPTCHA or error page.
When did Google start poisoning SERPs?
Rank tracker Nozzle saw requests start failing on September 13, 2026, and the first poisoned SERPs on September 20, 2026. Semrush said it had seen Google return inaccurate results to automated collectors since late summer.
Has Google confirmed it poisons search results?
No. As of early November 2026, Google has not publicly commented on poisoned SERPs. The evidence comes from rank-tracking and SEO vendors analyzing their own collected data.
How can I tell a poisoned SERP from a real ranking change?
Compare the result with the keyword's history. A poisoned page keeps few of the domains that usually rank, does not persist across later fetches, and does not show up in Google Search Console, which reflects what real users saw. A real ranking change persists and appears in Search Console.
Do poisoned SERPs affect SEO rankings?
No. Poisoned pages are served to automated collectors, so they change what a rank tracker reports while searchers still see normal results. A sudden drop in a tracker may be a poisoned reading.