Installation
$npx skills add YogeshKu7877/claude-seo-skills --skill seo-gsc-content-decaySummary
Identifies pages losing both clicks and impressions over 90 days using GSC data, filtering out seasonal noise by requiring simultaneous metric decline. The agent can assess which pages are experiencing true decay versus temporary fluctuation, assign severity ratings, and recommend targeted fixes based on position change patterns.
SKILL.MD
GSC Content Decay — 90-Day Decline Detection
@skills/seo/references/mcp-degradation.md @skills/seo/references/gsc-api-reference.md
Identifies pages experiencing true content decay: both clicks AND impressions declining over a 90-day comparison period. Filters out seasonal variation by requiring both metrics to decline simultaneously.
MCP Check
Before calling any GSC tool, verify the MCP is connected:
- Use ToolSearch with query
+google-search-console - If tools returned — note the actual tool name prefix, proceed to Inputs
- If no tools returned — display the GSC MCP error template from
references/mcp-degradation.mdand stop:
## Google Search Console MCP Not Available
The `/seo gsc content-decay` command requires the GSC MCP, which is not currently connected.
**What you can do:**
- Use `/seo technical <url>` for crawlability and indexability analysis (no live data)
- Use `/seo audit <url>` for a full static SEO audit
**To connect GSC MCP:**
- Install and configure a Google Search Console MCP server (see README for setup)
- Add it to ~/.claude/mcp.json at user scope (NOT project scope)
- Verify GSC property access before running commands (domain vs URL prefix format)
- See references/gsc-api-reference.md for property format details
Inputs
site: The GSC property URL. Accept both formats:- Domain property:
sc-domain:example.com - URL prefix:
https://example.comorhttps://www.example.com - If user provides a bare domain (no prefix), call
list_sitesto identify the correct property format registered in GSC.
- Domain property:
Date Calculation
Use Bash to calculate 90-day comparison windows (GSC has ~3 day delay):
currentEnd=$(date -v-3d +%Y-%m-%d)
currentStart=$(date -v-93d +%Y-%m-%d)
previousEnd=$(date -v-93d +%Y-%m-%d)
previousStart=$(date -v-183d +%Y-%m-%d)
echo "Current: $currentStart to $currentEnd | Previous: $previousStart to $previousEnd"
Execution
Call compare_performance with 90-day window:
siteUrl: the site propertycurrentStartDate: currentStartcurrentEndDate: currentEndpreviousStartDate: previousStartpreviousEndDate: previousEnddimension:"page"limit: 1000
Post-processing — identify true decay: Filter results to rows where BOTH conditions are true:
clicksChange < 0(clicks declined)- Impressions declined (if
impressionsChangefield available, checkimpressionsChange < 0; if not available, use the presence of lower current impressions vs previous)
This double-filter removes pages that lost clicks but maintained/grew impressions (which often indicates seasonal or competitor CTR changes, not content decay).
Sort by clicksChangePercent ascending (most severe decay first).
Calculate decay severity:
For each decaying page, compute click change percentage if not provided:
changePercent = abs(clicksChange / previousClicks) * 100
Severity classification:
changePercent > 50: CRITICALchangePercent >= 30 and <= 50: HIGHchangePercent >= 10 and < 30: MEDIUM
Recommendation per page based on position change:
- Position declined significantly (positionChange > 5): "Review competitor content — rankings lost"
- Position stable but impressions fell: "Check for technical issues — may have indexing problems"
- Position slightly declined (positionChange 1-5): "Update and refresh content to regain relevance"
- Position improved but clicks fell: "Review search intent — content may no longer match query intent"
CTR display rule: API returns CTR as decimal — multiply by 100 for display.
Output Format
## GSC Content Decay: [site property]
**Current Period:** [currentStart] to [currentEnd] (90 days)
**Previous Period:** [previousStart] to [previousEnd] (90 days)
**Decay pages found:** [count]
### Content Decay Report
| Decay Severity | URL | Current Clicks | Previous Clicks | Change% | Curr Position | Prev Position | Pos Change | Action |
|----------------|-----|---------------|-----------------|---------|---------------|---------------|------------|--------|
| CRITICAL | [url] | [n] | [n] | -X.X% | [X.X] | [X.X] | ↑/↓ X.X | [action] |
| HIGH | [url] | [n] | [n] | -X.X% | [X.X] | [X.X] | ↑/↓ X.X | [action] |
| MEDIUM | [url] | [n] | [n] | -X.X% | [X.X] | [X.X] | ↑/↓ X.X | [action] |
...
### Summary by Severity
| Severity | Pages | Avg Click Loss |
|----------|-------|----------------|
| CRITICAL (>50% drop) | [n] | [X.X%] |
| HIGH (30-50% drop) | [n] | [X.X%] |
| MEDIUM (10-30% drop) | [n] | [X.X%] |
Truncate long URLs to 60 characters with ... for readability.
If no decay pages found, report: "No content decay detected. No pages show simultaneous
decline in both clicks and impressions over the 90-day comparison period."