Skip to content
Content
Skill

/stale-content-detector

Use when the user says 'find old content', 'what is stale', 'what needs refreshing', or 'what should i archive'. Categorizes pages and posts as fresh, aging, stale, or archive-candidate by age, traffic signal, and internal link count, with a refresh, redirect, or archive call

From plugin
respira-wordpress-skills
4351 skills
Install
$ npx -y skills add respira-press/agent-skills-wordpress --skill stale-content-detector --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/stale-content-detector

Context preview

The summary Claude sees to decide when to auto-load this skill.

Use when the user says 'find old content', 'what is stale', 'what needs refreshing', or 'what should i archive'. Categorizes pages and posts as fresh, aging, stale, or archive-candidate by age, traffic signal, and internal link count, with a refresh, redirect, or archive call

SKILL.md

stale-content-detector.SKILL.md
name: stale-content-detector
description: "Use when the user says 'find old content', 'what is stale', 'what needs refreshing', or 'what should i archive'. Categorizes pages and posts as fresh, aging, stale, or archive-candidate by age, traffic signal, and internal link count, with a refresh, redirect, or archive call per item."
license: MIT
metadata:
  author: Respira for WordPress
  author_url: https://respira.press
  version: 1.0.0
  mcp-server: respira-wordpress
  category: audit

Stale Content Detector

**Version:** 1.0.0 **Updated:** 2026-05-24 **Category:** audit **Status:** stable **Requires:** Respira for WordPress plugin 7.1+ + MCP server

---

Description

Find pages and posts that haven't been updated in a long time, categorize them as fresh / aging / stale / archive-candidate, and suggest action per item: refresh, redirect, archive, or leave alone. Stale content is an SEO drag and a credibility tax — if your "2023 trends" article still ranks but nobody's touched it since 2023, you're losing trust the day a reader notices the date.

This skill is intentionally focused. It's not a content audit (use [SEO & AEO Amplifier](https://respira.press/skills/seo-aeo-amplifier) for that). It's the "what's old" question, answered fast.

---

What it categorizes

| Bucket | Age since last update | Suggested action | |---|---|---| | Fresh | < 6 months | leave alone | | Aging | 6–12 months | review the headline + opening paragraph; if still accurate, leave; if outdated, refresh the date | | Stale | 12–24 months | refresh the content meaningfully (new data, new examples), update the modified date | | Archive-candidate | 24+ months **and** low traffic / orphan | archive, redirect, or 410 — depends on if anything links to it |

Plus an "evergreen" override: pages tagged as evergreen (`/about/`, `/contact/`, `/pricing/`, `/privacy/`) skip the staleness check entirely.

---

When to Use

  • Quarterly content review
  • Migrating a site and trying to decide what to bring vs leave behind
  • After a content team change — find the inherited backlog of old work
  • Before publishing the next batch of new content (so the old stuff doesn't drag the rankings of the new stuff)
  • After a Google update that emphasizes "freshness" signals

---

Trigger Phrases

  • "find old content"
  • "what's stale"
  • "what needs refreshing"
  • "audit my content age"
  • "find content to update"
  • "stale content scan"
  • "what should i archive"

---

Execution Workflow

Step 1 — Confirm site

Call `respira_get_active_site` + `respira_get_site_context`.

Step 2 — Pull pages and posts

Call:

  • `respira_list_pages(per_page=100)` for pages
  • `respira_list_posts(per_page=100, status=publish)` for posts
  • `respira_list_custom_posts(post_type=<each non-default CPT>, per_page=100)` for any CPT detected via `respira_list_post_types`

Each result includes `modified` and `date`. Sort by `modified` ascending — oldest first.

Step 3 — Identify evergreen pages

Pull the list of pages and check each against the evergreen list (`/about`, `/contact`, `/pricing`, `/privacy`, `/terms`, `/legal`, `/imprint`, `/faq`, `/support`). If the URL or slug matches, flag as evergreen and skip the staleness check.

Also check if the post type has `has_archive=false` and a single URL pattern matching contact/legal/utility — those are usually evergreen.

Step 4 — Compute staleness

For each non-evergreen page or post, compute days-since-modified. Bucket:

  • 0–180 days → **fresh**
  • 181–365 days → **aging**
  • 366–730 days → **stale**
  • 731+ days → **archive-candidate** (further filtering in Step 5)

Step 5 — Add traffic + orphan signals (archive-candidate filter)

For items in the archive-candidate bucket, we need to know if anyone is reading them or linking to them. Two signals:

1. **Internal link count.** Call `respira_find_element` with the page's URL as a search term. Count incoming internal links. If zero, the page is an orphan. 2. **External traffic** (if available — depends on whether the site has Plausible / GA4 / similar wired to Respira). If not available, skip.

Recompute:

  • Archive-candidate + orphan + no traffic → **archive (or 410)**
  • Archive-candidate + has internal links + no traffic → **archive + redirect** (preserve link equity)
  • Archive-candidate + has traffic → **refresh** (downgrade from archive-candidate to stale)

Step 6 — Output the report

## Content age audit for {site_url}

Scanned {n_pages} pages + {n_posts} posts + {n_custom} custom posts ({n_total} total). Evergreen pages skipped: {n_evergreen}.

### Summary

| Bucket | Count | % |
|---|---|---|
| Fresh (<6mo) | {n_fresh} | {pct_fresh}% |
| Aging (6–12mo) | {n_aging} | {pct_aging}% |
| Stale (12–24mo) | {n_stale} | {pct_stale}% |
| Archive-candidate (24+mo) | {n_archive} | {pct_archive}% |

### Stale (12–24 months)

| Title | Last modified | Action |
|---|---|---|
| {title} | {modified} ({days_ago}d) | refresh |
| ... | | |

### Archive-candidate (24+ months)

| Title | Last modified | Internal links | Suggested action |
|---|---|---|---|
| {title} | {modified} ({days_ago}d) | {link_count} | {action} |
| ... | | | |

### What I'd refresh first (top 5 by traffic or link equity)

1. **{title}** ({days_ago}d old) — {one-line reason: high incoming link count / high traffic / topical relevance to current focus}
2. ...

Step 7 — Offer to act on a chosen item

Ask: *"Want me to refresh one of these now? I can pull the existing content, suggest updates, create a duplicate with the refresh applied, and you review."*

If yes, route to the SEO & AEO Amplifier skill or directly compose `respira_create_page_duplicate` + targeted updates.

---

Hard rules

  • **Never delete a page directly.** Even archive-candidates get a recommendation, not a deletion. The user decides. Use `respira_delete_page` only if the user explicitly asks for deletion of a specific named page.
  • **The evergreen list is opinionated but overridable.** Outp
Read more
Ships withrespira-wordpress-skills

The community hub for WordPress AI workflows. Skills that run inside Claude Code, Codex, Antigravity, Cursor, and any AI agent that supports Skills + MCP to analyze, audit, optimize, and fix WordPress sites. Built by the community. Curated by Respira.

Get the whole plugin
Stats
43
Stars
8
Forks
Active
Maintenance
JavaScript
Language
MIT
License
4d ago
Last commit
6mo ago
Created

Repo: respira-press/agent-skills-wordpress

Other skills on respira-wordpress-skills.