本文へ移動
cccskills
無料GitHub で公開

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 per item.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md6.8 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

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

BucketAge since last updateSuggested action
Fresh< 6 monthsleave alone
Aging6–12 monthsreview the headline + opening paragraph; if still accurate, leave; if outdated, refresh the date
Stale12–24 monthsrefresh the content meaningfully (new data, new examples), update the modified date
Archive-candidate24+ months and low traffic / orphanarchive, 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. 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, n_pages / n_posts / 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

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Use when the user asks for a client report, a monthly or activity report, a case study draft, or says 'what did i ship this month'. Turns the site audit log into a written report in one of six framings: agency client report, case study, internal recap, testimonial draft, build-in-public, personal recap.

日本語の概要は準備中です。原文の説明を表示しています。

respira-press/agent-skills-wordpress442026年9月13日 更新

Use on any page build, redesign, or 'make it look better' request on a site that has (or needs) a saved Art Direction. Loads the direction before the first element is written, plans tokens in two passes against the direction's donts and the known AI-default aesthetics, builds with tokens preserved, checks the result with respira_check_design, and mints a live preview. Also the import lane for Claude Design output and other design-system documents.

日本語の概要は準備中です。原文の説明を表示しています。

respira-press/agent-skills-wordpress442026年9月13日 更新

Use when the user says 'extract my brand voice', 'what is my writing style', or 'analyze my tone', or before any skill that writes copy for the site. Reads 5-10 published posts and persists tone, lexicon, sentence patterns, formality, signature phrases, and phrases the site never uses.

日本語の概要は準備中です。原文の説明を表示しています。

respira-press/agent-skills-wordpress442026年9月13日 更新

Use when building or rebuilding a page, header, footer, or template on an Oxygen 6 (Jenga) site, or when a previous attempt produced a blank page, one raw HTML block, or 'Unknown element'. Hands the agent the Oxygen 6 element schemas and the Template Content Area rule. Not for Oxygen Classic.

日本語の概要は準備中です。原文の説明を表示しています。

respira-press/agent-skills-wordpress442026年9月13日 更新

Use when the user says 'export my site', 'backup my pages before editing', 'download my content locally', or 'migrate content to my other site'. Exports pages, posts, and custom posts to portable local packages with builder data, media, and markdown, then imports elsewhere with ID remapping.

日本語の概要は準備中です。原文の説明を表示しています。

respira-press/agent-skills-wordpress442026年9月13日 更新

Use when the user says 'audit my conversion rate', 'cro check', 'find conversion leaks', or asks what is hurting conversion before a paid campaign or after a redesign. Scores six friction dimensions: above-the-fold clarity, CTA hierarchy, form length, social proof, speed, trust signals.

日本語の概要は準備中です。原文の説明を表示しています。

respira-press/agent-skills-wordpress442026年9月13日 更新

respira-press のスキルをすべて見る

このスキルの問題を報告する