Disclaimer: This content is for informational purposes only and is not financial, legal, or professional advice. It may include AI-generated material and inaccuracies. Use at your own risk. See our Terms of Use.

How I Use the GSC searchAnalytics API, Screaming Frog, and Claude to Catch 90-Day Content Decay Before Rankings Fall Out of the Top 10

How I Use the GSC searchAnalytics API, Screaming Frog, and Claude to Catch 90-Day Content Decay Before Rankings Fall Out of the Top 10

How I Use the GSC searchAnalytics API, Screaming Frog, and Claude to Catch 90-Day Content Decay Before Rankings Fall Out of the Top 10

Quick Answer

  • Pull two Google Search Console API windows with searchAnalytics.query — the trailing 90 days and the 90 days before that — then diff impressions, clicks, and average position per page.
  • A page is decaying, not just noisy, when the drop is sustained across most weeks in the window and shows up on the exact query it used to rank for, not just aggregate traffic.
  • Run the flagged URLs through Screaming Frog’s crawl comparison to rule out the boring causes first: a broken internal link, a stripped H1, a canonical pointing somewhere else.
  • Rank what’s left by lost impressions times remaining search demand, not by position drop alone — a page that fell from position 3 to 9 on a high-volume query usually outranks a page that fell from 45 to 90.

Content decay detectors have a trust problem. Most flag anything with a downward line on a graph, then hand an SEO a spreadsheet of 200 “declining” URLs where 150 are normal seasonal noise.

I run a weekly pull against the Google Search Console API for this site, cross-check the real drops in Screaming Frog, and use Claude to triage what’s left into a short list worth an editor’s time. This is the actual workflow, including the parts that produce false positives.

What Counts as Content Decay Versus Normal Ranking Noise?

Content decay is a page that ranked, earned impressions, and is now losing both — not for one week, but across a sustained stretch of the comparison window. A single bad week after a Google core update is noise until it repeats for several weeks running.

The tell that separates decay from noise is the query-level view, not the page-level total. If a page’s impressions dropped because Google Search Console started attributing traffic to a new AI Overviews-triggered query variant, that’s a SERP feature shift, not decay of the underlying content.

Real decay usually shows the same target query losing average position steadily, month over month, with no algorithm update to point to. That’s the pattern this workflow is built to isolate.

Pro Tip: Before flagging anything, check Google Search Console’s own update markers or a public tracker against your date range. A drop that lines up with a documented core update is a ranking-volatility question, not a content-freshness question — the fix is different.
What Counts as Content Decay Versus Normal Ranking Noise?

How Do You Pull 90-Day vs Prior-90-Day Deltas From the Google Search Console API?

The Search Console API exposes search performance through the searchAnalytics.query method, part of the Search Console API (the successor to the older Webmasters API). You send a POST request with a startDate, endDate, and a dimensions array — typically ["page", "query"] for this workflow.

Run the same request twice: once for the trailing 90-day window, once for the 90 days immediately before it. Google Search Console data has a reporting lag of a few days, so anchor both windows a few days before today, not on today’s date.

POST https://www.googleapis.com/webmasters/v3/sites/{siteUrl}/searchAnalytics/query
{
  "startDate": "2026-05-01",
  "endDate": "2026-07-30",

"dimensions": ["page", "query"],

"rowLimit": 25000 }

Authenticate with a Google Cloud OAuth2 client or a service account that has been added as a user in Search Console property settings. Python’s google-api-python-client library handles both, and the response comes back as JSON you can load straight into a pandas DataFrame or dump to CSV for a spreadsheet review.

Join the two windows on page and query, then compute the delta for impressions, clicks, and average position. That joined table is the raw material for every step that follows.

What Does a Genuine Decay Signal Actually Look Like in the Data?

A genuine signal has three characteristics together, not just one. Average position has moved meaningfully worse — SEOs commonly use a rule of thumb of at least a few positions, not a fractional 0.3 shift that’s within normal SERP volatility.

Second, the position slide is consistent across the window, not a single-week spike caused by a temporary SERP feature test. Third, impressions dropped in proportion to the position change — if impressions held steady while position worsened slightly, Google may simply be testing rank variance, which resolves on its own.

Pages that keep impressions but lose clicks are a different problem entirely. That pattern usually means a title or meta description issue, or a new AI Overview sitting above the organic results and absorbing the click — not page-content decay.

Warning: Don’t rank pages by raw position drop alone. A page that fell from position 2 to position 6 on a query with 50,000 monthly impressions has more recoverable traffic on the table than a page that fell from position 40 to position 90 on a query nobody searches. Position drop without a demand check produces a triage list that wastes an editor’s week on pages nobody will read anyway.

How Does Screaming Frog’s Crawl Comparison Rule Out the Boring Causes First?

Before assuming a decaying page needs a content rewrite, rule out the mechanical causes. Screaming Frog’s crawl comparison feature stores a crawl as a baseline, then diffs a later crawl against it — flagging changed titles, changed canonicals, new noindex tags, and broken internal links.

Run this against every URL that cleared the Google Search Console decay filter, comparing today’s crawl to a saved crawl from before the decline started. Three fixes show up disproportionately often: a canonical tag pointing to the wrong URL after a template change, an internal link that used to point to the page and now points to a related one instead, and a title tag overwritten by a bulk SEO plugin update.

Any of those three explains a ranking drop without the page’s actual content being the problem. Fixing the technical issue is a five-minute task; rewriting the article is not — so this step exists specifically to avoid rewriting pages that don’t need it.

How Do You Pull 90-Day vs Prior-90-Day Deltas From the Google Search Console API?

What Is the “Human-Review Tax,” and Why Do Decay Detectors Trigger It So Often?

The human-review tax is the hours an editor spends opening pages a detector flagged that turn out to be fine. It’s the real cost of a noisy detector, and it’s usually higher than the cost of missing a genuine decay signal a week later.

Three patterns generate most of the false positives. Seasonal topics look like decay every year during their off-season, then recover on their own — a workflow that doesn’t compare year-over-year, not just 90-day-over-90-day, will re-flag the same seasonal pages annually.

SERP feature churn is the second pattern: Google adding a People Also Ask block, a video carousel, or an AI Overview above a result reduces impressions and clicks for reasons that have nothing to do with the page’s quality. The third is measurement noise on genuinely low-volume queries, where a swing from 40 impressions to 25 impressions looks dramatic as a percentage but is statistically meaningless.

The fix for all three is the same: require the sustained, cross-week pattern from the section above before a page ever reaches an editor’s queue, and tag seasonal pages so the detector compares them against the same period last year, not the prior 90 days.

How Do You Triage What’s Left: Lost Impressions Times Remaining Demand?

Once the mechanical fixes and the false positives are filtered out, what remains needs a priority order, because no team rewrites everything in one week. Rank by lost impressions multiplied by whether the query still has demand — not by position drop percentage alone.

SignalWhat it meansTriage weight
High lost impressions, position still top 20Query still has demand, page is close to recoverableHighest — rewrite this week
High lost impressions, position now beyond page 3Demand exists but the page has fallen far; may need a bigger rebuild than a refreshMedium — scope before committing
Low lost impressions, any positionQuery never had much demand; a full recovery won’t move site traffic muchLow — batch into a quarterly cleanup pass instead
Clicks down, impressions flatLikely a SERP feature or title/meta issue, not content decayRoute to a title/meta test, not a rewrite

This is also where a competitive check earns its place. If Ahrefs or Semrush shows a competitor publishing a materially deeper or more current version of the same topic around the same time the decay started, that’s usually the actual cause — not something intrinsic to the page.

Where Does Claude Fit Into the Triage and Rewrite-Prioritization Step?

Claude doesn’t decide which pages decayed — the Google Search Console API data does that. Claude’s job starts after the joined, filtered, ranked table exists: reading the current page content against the decay reason and drafting a rewrite brief.

I feed Claude the page’s current HTML, its target query, the delta table row for that page, and a short prompt asking it to identify what’s missing relative to what currently ranks above it — outdated version numbers, a missing angle, thin sections that used to be competitive and no longer are.

The output is a rewrite brief, not a finished article: which H2s to add, which claims need a current source, where the page reads stale. An editor still writes or approves the final copy. This keeps the model in a research-and-triage role instead of an unsupervised publishing role.

Pro Tip: Give Claude the actual current top-ranking pages for the query, not just the decaying page. A brief written against “what’s missing” in isolation tends to suggest generic additions. A brief written against what specifically outranks the page right now produces sharper, more specific gaps.
What Does a Genuine Decay Signal Actually Look Like in the Data?

What Does the Full Weekly Workflow Look Like Start to Finish?

Monday morning, a scheduled Python script calls searchAnalytics.query twice — trailing 90 days and prior 90 days — and writes the joined delta to a CSV. That script lives in a small GitHub repo alongside the rest of the site’s SEO tooling.

The script filters for the sustained, cross-week decline pattern and drops anything below a meaningful impression floor. What’s left — usually a short list, not hundreds of rows — gets a Screaming Frog crawl comparison pass to rule out canonical, noindex, and internal-link breaks.

Surviving URLs are ranked by lost impressions times remaining demand, and the top few go to Claude for a rewrite brief each. A short Slack message summarizes the week’s list with links to each brief, and an editor picks up the work from there.

Key Takeaway

  • Diff trailing 90 days against the prior 90 days via the Google Search Console searchAnalytics.query API, joined on page and query, not just page-level totals.
  • Require a sustained, cross-week pattern before treating a drop as decay — a single bad week is noise, not signal.
  • Run every flagged URL through Screaming Frog’s crawl comparison before assuming the content is the problem; canonicals, noindex tags, and broken internal links cause a large share of “decay.”
  • Triage by lost impressions times remaining demand, and let Claude draft rewrite briefs against competing pages — not decide what gets published.

Per Google’s own Search Console API documentation for searchAnalytics.query, results can be filtered and grouped by page, query, country, and device dimensions, and the API is the same data source that powers the Search Console Performance report in the UI — meaning a workflow built on it stays consistent with what’s visible in the dashboard.

How Do You Avoid False Positives From Seasonal or Low-Volume Pages?

Tag seasonal pages at publish time — a holiday buying guide, a tax-season explainer — and compare them against the same calendar window a year prior instead of the trailing 90 days. Otherwise a seasonal page gets flagged as “decaying” every single year during its off-season.

For low-volume queries, set an impressions floor before a page enters the decay list at all. A page swinging between 20 and 35 monthly impressions will show large percentage swings that mean nothing at that volume; a floor filters this out before it ever reaches triage.

Finally, exclude pages that changed URL, merged into another page, or were intentionally deprioritized. Those show up as “decay” in raw API data but are decisions someone already made on purpose.

Frequently Asked Questions

How far back should the Google Search Console API comparison window go?

Ninety days trailing versus the ninety days before that is a common baseline because it smooths out weekly noise while still catching decay early. For sites with strong seasonality, add a year-over-year comparison on the same calendar window as a second check.

Can Screaming Frog’s crawl comparison run without a paid licence?

Crawl comparison and scheduling are part of Screaming Frog SEO Spider’s paid tier. The free tier can still run two manual crawls and you can diff the exported CSVs yourself, but the built-in comparison view and change alerts require the licensed version.

Does a drop in Google Search Console impressions always mean the content is decaying?

No. Impressions can drop because of a documented Google core update, a new SERP feature like an AI Overview absorbing the query, a seasonal demand swing, or a technical issue like a broken canonical — none of which mean the article itself got worse.

Should Claude write the replacement content directly?

In this workflow, no. Claude drafts a rewrite brief comparing the decaying page against what currently outranks it. An editor still writes or approves the final published copy, which keeps a human in the loop on every page that goes back out.

What’s a reasonable impressions floor before a page enters the decay triage list?

There’s no universal number — it depends on site size and traffic distribution. A common approach is to look at the site’s own impression distribution and set the floor above the noise band for low-volume queries, rather than borrowing a fixed threshold from a different site.

How is this different from just watching rank tracker alerts?

A rank tracker alerts on position change for tracked keywords you already chose. This workflow pulls the full Google Search Console page-query dataset, which surfaces decay on queries you never manually added to a tracker — often the majority of a site’s long-tail traffic.

Last updated: 2026-08-07

저자 소개

DesignCopy

The DesignCopy editorial team covers the intersection of artificial intelligence, search engine optimization, and digital marketing. We research and test AI-powered SEO tools, content optimization strategies, and marketing automation workflows — publishing data-driven guides backed by industry sources like Google, OpenAI, Ahrefs, and Semrush. Our mission: help marketers and content creators leverage AI to work smarter, rank higher, and grow faster.

ko_KR한국어