content-decay-scan
Scan the content library for decay — declining traffic, falling keyword positions, stale content, broken links, lost AI citations — scoring each URL 0-100 via creative-fatigue-predictor.py and ranking refreshes by recoverable revenue, with actionable refresh briefs and traffic-recovery estimates for top-priority tiers. Triggers on \"/digital-marketing-pro:content-decay-scan\", \"which content is losing traffic\", \"find stale content to refresh\", \"our blog traffic keeps dropping\", \"prioritize content refreshes\". Pulls performance data from Google Analytics/Search Console MCPs or exported CSVs; cross-reference causes with /digital-marketing-pro:seo-drift. Reads the brand profile for content strategy context.
git clone --depth 1 https://github.com/indranilbanerjee/digital-marketing-pro /tmp/content-decay-scan && cp -r /tmp/content-decay-scan/skills/content-decay-scan ~/.claude/skills/content-decay-scanSKILL.md
# /digital-marketing-pro:content-decay-scan
## Purpose
Scan the entire content library for decay signals and prioritize refreshes by business impact. Content decay is invisible revenue loss — pages that once ranked well and drove conversions silently lose traffic as competitors publish fresher content, search algorithms evolve, statistics become outdated, and AI systems stop citing stale sources. This command detects declining organic traffic, falling keyword positions, outdated content (stale dates, broken links, deprecated information), lost AI citations, and conversion rate drops. It then ranks every piece of content by business impact — traffic multiplied by conversion rate multiplied by revenue per conversion — so you refresh the content that recovers the most revenue first, not just the content that lost the most traffic.
## Input Required
The user must provide (or will be prompted for):
- **Content library data**: URLs of the content to scan — can be a full sitemap, a specific content directory (e.g., /blog/*, /resources/*), or a curated list of high-value pages. For each URL, the system will pull or needs: current monthly traffic, traffic 3 and 6 months ago for trend analysis, primary keyword rankings (current and historical positions), publish date and last updated date, conversion rate if tracked (form fills, signups, purchases), and revenue attribution if available
- **Analytics source**: Where to pull performance data — Google Analytics and Google Search Console via connected MCPs, or exported CSV data. If MCPs are connected, data is pulled automatically. If not, the user provides exported analytics covering at least the past 6 months
- **Priority metrics**: Which decay signals matter most for this scan — traffic decline (default highest weight), ranking drops, content freshness (time since last update), AI citation loss, broken links, or conversion rate decline. The user can adjust weights or accept defaults. Revenue impact is always calculated regardless of signal weights
- **Decay thresholds (optional)**: Brand-specific thresholds for what constitutes "decay" — e.g., "flag anything with 20%+ traffic decline over 3 months" or "flag content not updated in 12+ months." If not provided, standard thresholds are applied: 15% traffic decline over 3 months, 10+ position drop on primary keyword, 18+ months since last update, or 20%+ conversion rate decline
- **Exclusions (optional)**: Content to exclude from the scan — seasonal pages, archived content, redirect targets, or pages scheduled for removal. Prevents false positives and focuses the scan on content the brand intends to maintain
## Process
1. **Load brand context**: Read `~/.claude-marketing/brands/_active-brand.json` for the active slug, then load `~/.claude-marketing/brands/{slug}/profile.json`. Apply content strategy priorities, target keyword clusters, historical content performance baselines, and industry context for freshness expectations (fast-moving industries like tech need more frequent updates than evergreen niches). Also check for guidelines at `~/.claude-marketing/brands/{slug}/guidelines/_manifest.json`. Check for agency SOPs at `~/.claude-marketing/sops/`. If no brand exists, ask: "Set up a brand first (/digital-marketing-pro:brand-setup)?" — or proceed with industry defaults.
2. **Gather content performance data**: Connect to analytics MCPs (Google Analytics, Google Search Console) and pull performance data for the content library — monthly traffic for the past 6 months per URL, keyword position data for primary and secondary keywords, click-through rates from search results, and conversion data if available. For content not covered by MCPs, use any exported data the user provided. Build a performance timeline for each content piece showing the trajectory over the past 6 months.
3. **Score each content piece for decay**: Run the decay scorer with the performance data:
```bash
python "${CLAUDE_PLUGIN_ROOT}/scripts/creative-fatigue-predictor.py" \
--action decay-scan \
--data '[{"content_id":"blog_01","url":"/blog/post-a","monthly_traffic_current":1200,"monthly_traffic_previous":1600,"monthly_traffic_6mo_ago":2100,"keyword_positions_current":{"seo tips":12},"keyword_positions_previous":{"seo tips":7},"last_updated":"2024-11-01"}, ...]'
```
(`creative-fatigue-predictor.py` actions: `score-health`, `predict-fatigue`, `generate-refresh-brief`, `decay-scan`, `priority-refresh`, `batch-health`. `--data` is a JSON object or array; there is no `--brand` flag on this script.) The decay scoring model evaluates multiple signals per content piece — traffic trend (3-month and 6-month decline rates, weighted by the user's priority metrics), keyword position changes (drops on primary keyword, movement direction and velocity), content freshness (months since last substantive update, presence of dated statistics or references), broken links (internal and external link health), and conversion rate trend (declining conversion even with stable traffic indicates content quality decay). Each piece receives a decay score from 0-100 where 0 is healthy and 100 is severely decayed.
4. **Calculate business impact score**: For each content piece, compute the revenue impact of its decay — current monthly traffic multiplied by conversion rate multiplied by estimated revenue per conversion. Then calculate the recoverable revenue — the difference between peak performance (from the last 12 months) and current performance, multiplied by the probability of recovery based on decay type and refresh feasibility. Content with high recoverable revenue is prioritized regardless of its raw decay score.
5. **Prioritize refreshes by impact**: Rank all decaying content by recoverable revenue impact — highest-impact decaying content first. Group into priority tiers: Critical (top 10% by revenue impact, refresh immediately), High (next 20%, refresh within 2 weeks), Medium (next 30%, schedule for refresh within 1-2 months)Invoke when the user needs to manage multiple client brands, view portfolio-level dashboards, generate client reports, manage SOPs, switch credential profiles, assign team tasks, configure regions, or generate executive summaries. Triggers on requests involving multi-client management, agency workflows, client onboarding, or portfolio oversight.
Invoke when the user needs help with marketing measurement, KPI definition, dashboard design, attribution reporting, performance analysis, competitive benchmarking, or translating data into marketing decisions. Triggers on requests involving metrics, reporting, analytics setup, or data interpretation.
Invoke when marketing content needs quality control review — brand voice consistency checks, regulatory compliance verification (GDPR, CAN-SPAM, CCPA, HIPAA, FTC, industry-specific), accessibility auditing (WCAG 2.2), inclusive language review, or brand safety assessment. Automatically invoked as a final review step before any content is published or delivered.
Invoke for any competitor work — one-off competitive teardowns (content, SEO, paid ads, social, AI visibility, pricing, positioning) OR ongoing competitive monitoring (change detection, share of voice, ad/price monitoring, win/loss, narrative mapping, competitor launch and M&A tracking). Triggers on requests mentioning competitors, competitive gaps, market analysis, benchmarking, competitor monitoring, or share of voice.
Use when the task requires ongoing competitive monitoring, competitor change detection, share of voice tracking, competitive alerts, ad monitoring, price monitoring, win/loss analysis, or competitive narrative mapping.
Invoke when the user needs any form of marketing content created or refined — blog posts, ad copy, email campaigns, social media posts, landing page copy, press releases, video scripts, product descriptions, or newsletter content. Triggers on requests to write, draft, rewrite, or improve marketing copy.
Invoke when the user needs to manage CRM operations — creating contacts, importing leads, updating deals, syncing campaign data, segmenting audiences, managing pipelines, or connecting marketing data to Salesforce, HubSpot, Zoho, or Pipedrive. Triggers on requests involving CRM data, lead management, pipeline updates, or sales-marketing alignment.
Invoke when the user needs help with conversion rate optimization — landing page audits, A/B test design, form optimization, pricing page strategy, checkout flow improvement, personalization, statistical significance calculations, page speed impact analysis, or mobile conversion optimization. Triggers on requests involving conversions, landing pages, A/B testing, or optimization experiments.