Affiliate-skills content-decay-detector
git clone https://github.com/Affitor/affiliate-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/Affitor/affiliate-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/blog/content-decay-detector" ~/.claude/skills/affitor-affiliate-skills-content-decay-detector && rm -rf "$T"
skills/blog/content-decay-detector/SKILL.mdContent Decay Detector
Monitor existing content for ranking drops and generate a prioritized refresh queue. Refreshing decaying content is the highest-ROI SEO activity — it's faster and cheaper than creating new content, and recovering a lost position is easier than earning a new one.
Stage
S3: Blog & SEO — Blog maintenance and optimization. This skill keeps your existing content competitive and prevents rankings from silently eroding.
When to Use
- User has existing blog content and wants to check for decay
- User notices traffic declining on specific pages
- User asks "what content needs updating?"
- User says "content decay", "ranking drops", "stale content", "refresh", "content audit"
- Monthly maintenance check — should run every 30 days on active blogs
- After
reveals declining pagesseo-audit
Input Schema
site_url: string # REQUIRED — the site to audit # e.g., "myblog.com", "example.com/blog" content_list: object[] # OPTIONAL — specific pages to check - url: string # Page URL title: string # Page title publish_date: string # Original publish date last_updated: string # Last update date target_keyword: string # Primary keyword check_competitors: boolean # OPTIONAL — whether to check if competitors published fresher content # Default: true timeframe: string # OPTIONAL — "30d" | "90d" | "6m" | "1y" # Default: "90d"
Chaining from S6 seo-audit: Use
declining_pages as the content_list.
Workflow
Step 1: Gather Content Data
If
content_list not provided:
:web_search
— discover indexed pagessite:[site_url]- Identify the top 15-20 most important pages (by topic relevance)
- For each page, note: title, URL, apparent publish/update date
Step 2: Check for Decay Signals
Read
shared/references/seo-strategy.md for decay signals and refresh methodology.
For each page:
for the page's target keyword — check current ranking positionweb_search- Look for decay signals:
- Outdated information: Product features, pricing, dates mentioned
- Competitor freshness: Newer, better content published by competitors
- Missing elements: No images, no data, thin content compared to current SERP
- Broken patterns: "2023" in a title when it's 2025+, discontinued products mentioned
Step 3: Score Decay Priority
For each decaying page, assign priority:
| Factor | Score | Criteria |
|---|---|---|
| Revenue impact | 1-5 | Contains affiliate links + had traffic = high revenue impact |
| Decay severity | 1-5 | Major outdated info = 5, minor = 1 |
| Fix effort | 1-5 (inverted) | Easy fix = 5, full rewrite = 1 |
| Competitor threat | 1-5 | Competitor published better version = 5 |
Priority = Revenue × Decay × Fix_Ease × Competitor_Threat (normalized)
Step 4: Generate Refresh Instructions
For each page in priority order, specify:
- What's decayed — specific outdated elements
- What to update — concrete changes to make
- What to add — new sections, data, or elements competitors have
- Internal linking — new pages to link to/from since original publish
- Estimated effort — time to refresh
Step 5: Self-Validation
- Decay signals are evidence-based (not guesses)
- Priority ordering makes business sense (revenue-impacting first)
- Refresh instructions are specific and actionable
- Effort estimates are realistic
- Not recommending refreshes for content that's performing fine
Output Schema
output_schema_version: "1.0.0" content_decay: site: string pages_analyzed: number pages_decaying: number total_refresh_effort: string # Estimated total hours decaying_pages: - url: string title: string priority: string # "P0-critical" | "P1-high" | "P2-medium" | "P3-low" decay_signals: string[] refresh_actions: string[] estimated_effort: string revenue_impact: string # "high" | "medium" | "low" healthy_pages: string[] # Pages that don't need refresh chain_metadata: skill_slug: "content-decay-detector" stage: "blog" timestamp: string suggested_next: - "affiliate-blog-builder" - "seo-audit" - "internal-linking-optimizer" - "keyword-cluster-architect"
Output Format
## Content Decay Report: [Site] ### Summary - **Pages analyzed:** XX - **Pages decaying:** XX - **Total refresh effort:** XX hours - **Estimated traffic recovery:** XX% ### Priority Refresh Queue #### P0 — Critical (do this week) **[Page Title]** — [URL] - Decay: [what's wrong] - Action: [what to do] - Effort: [time estimate] - Impact: [expected result] #### P1 — High (do this month) [same structure] #### P2 — Medium (schedule) [same structure] ### Healthy Pages (no action needed) - [Page] — still ranking, content fresh - [Page] — recently updated ### Monthly Maintenance Schedule - Week 1: Refresh P0 pages - Week 2: Refresh P1 pages - Week 3: Create new content for gaps found - Week 4: Internal linking review
Error Handling
- No site URL: "I need your blog URL to check for content decay. What's the site?"
- Site has no indexed pages: "I can't find indexed pages for this URL. Check that the site is public and indexed by search engines."
- All content is fresh: "Great news — no significant decay detected. Run this check again in 30 days."
- Can't determine ranking positions: Use available signals (content age, competitor freshness, outdated info) for prioritization.
Examples
Example 1: "Check my blog for content decay" → Discover indexed pages, check each for decay signals, generate prioritized refresh queue with specific actions per page.
Example 2: "Which of my articles need updating?" → Analyze content list, identify outdated pricing, stale comparisons, missing new products. Rank by revenue impact.
Example 3: "Content decay check" (after seo-audit) → Pick up declining pages from seo-audit output. Deep-dive each with competitor analysis and specific refresh instructions.
Flywheel Connections
Feeds Into
(S3) — refresh instructions for specific articlesaffiliate-blog-builder
(S6) — decaying pages may need better internal linksinternal-linking-optimizer
(S3) — content gaps revealed by decay analysiskeyword-cluster-architect
Fed By
(S6) — declining pages to investigateseo-audit
(S6) — pages with weak link structure may be decayinginternal-linking-optimizer
(S6) — traffic decline dataperformance-report
Feedback Loop
- After refreshing,
(S6) tracks whether rankings recovered → measure refresh ROI, refine decay detection sensitivityseo-audit
Quality Gate
Before delivering output, verify:
- Would I share this on MY personal social?
- Contains specific, surprising detail? (not generic)
- Respects reader's intelligence?
- Remarkable enough to share? (Purple Cow test)
- Irresistible offer framing? (refresh actions feel actionable)
Any NO → rewrite before delivering.
References
— Decay signals, refresh methodology, priority matrixshared/references/seo-strategy.md
— Master connection mapshared/references/flywheel-connections.md