Install
$ agentstack add skill-respira-press-agent-skills-wordpress-stale-content-detector ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
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 for that). It's the "what's old" question, answered fast.
What it categorizes
| Bucket | Age since last update | Suggested action | |---|---|---| | Fresh | , perpage=100) for any CPT detected via respiralistposttypes`
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:
- Internal link count. Call
respira_find_elementwith the page's URL as a search term. Count incoming internal links. If zero, the page is an orphan. - 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_pageonly if the user explicitly asks for deletion of a specific named page. - The evergreen list is opinionated but overridable. Output the list at the top of the report so the user can see what got skipped and add/remove items.
- Don't conflate stale with bad. A 2-year-old page that still has 1,000 monthly views is not a problem. The "refresh" recommendation is based on age, not quality.
- Modified date is canonical. Don't read
date(published) as a staleness signal. A 2018 post updated last month is fresh. - Custom post types matter. Case studies, podcast episodes, properties — these often need different staleness windows. If the user runs a podcast and the latest episode is 6 months old, that's stale for podcast content even though "fresh" for blog posts. Offer to set per-CPT windows on a v1.1 of this skill.
Telemetry
Records: site URL hash, npages / nposts / n_custom counted, bucket distribution, success/failure, total duration. No page titles, no URLs, no decisions sent.
Endpoint: POST https://www.respira.press/api/skills/track-usage
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: respira-press
- Source: respira-press/agent-skills-wordpress
- License: MIT
- Homepage: https://respira.press/skills
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.