seoskills.sh
Catalog/Content and Writing/Content Freshness Auditor

Content Freshness Auditor

Crawls content and detects staleness signals — old publish and modified dates, outdated years and statistics, deprecate…

Updated

New

Use this skill

$ npx skills add seoskills.sh/content-freshness-auditor
Repository
seoskills.sh
GitHub stars
License
MIT

About this skill

Content Freshness Auditor is a Content and Writing skill for AI agents, published in the seoskills.sh catalog. Reach for it when your work involves content briefs from SERP intent, editorial planning, and SEO writing. Install it with one command and it runs inside your own agent, so the work happens in your workflow, not a separate SEO tool.

SKILL.md

Content Freshness Auditor

AGENT ROLE: Autonomous freshness-audit agent. Detect concrete staleness signals per page, cross-check recency against the ranking set, and emit the JSON in references/output.schema.json. Flag specific, fixable claims — not vague "seems old".

OBJECTIVE

Score each page's staleness from datable, verifiable signals and list the exact outdated elements (dates, years, statistics, deprecated terms) to update, prioritized by traffic and how far behind the SERP the page has fallen.

INPUTS

  • urls (REQUIRED string[]) OR sitemap_url.
  • check_serp_recency (OPTIONAL bool, default false): compare against competitor freshness for the page's target query (needs SERP API).
  • current_year (OPTIONAL): default the system year; used to detect stale year references.
  • traffic (OPTIONAL): map of url → monthly_clicks for prioritization.

AUTHENTICATION

  • Page fetch: keyless HTTPS GET, UA seoskills-freshness/1.0, honor robots.
  • check_serp_recency: REQUIRE env SERP_API_KEY. IF unset AND requested THEN skip that check and note serp_recency="skipped_no_key".

EXPECTED TOOL CALLS

  • Run scripts/freshness.py --urls a,b,c [--serp-recency].
  • Per URL: GET; parse datePublished/dateModified, visible "last updated" text, and scan body for datable claims.

PROCEDURE (deterministic, per URL)

STEP 1 — DATES: extract datePublished, dateModified (schema + visible). age_days from the most recent reliable date. STEP 2 — STALE YEARS: find explicit year mentions (\b20\d{2}\b) especially in titles/H1/"best X 2023"; flag any year < current_year in a "current-year" context (title/intro) as stale_year. STEP 3 — OUTDATED STATISTICS: detect numeric claims tied to a year ("as of 2022", "in 2021, X%") older than 2 years → aging_statistic. STEP 4 — DEPRECATED REFERENCES: match a configurable list (e.g., "Universal Analytics", "AMP", "FLoC", named-old-versions) → deprecated_reference. STEP 5 — SERP RECENCY (optional): for the page's likely query, fetch the top results and compare their freshness; IF competitors are materially newer THEN behind_serp=true with the median competitor age. STEP 6 — SCORE staleness = f(age_days, stale_year, aging_statistics, deprecated_refs, behind_serp) → 0–100; classify fresh (<30) | aging (30–60) | stale (>60). STEP 7 — PRIORITIZE by traffic * staleness/100; EMIT pages sorted desc with the specific signals list per page.

RATE LIMITS & ERROR HANDLING

  • Crawl: ≤ 5 concurrent, ≥ 150ms per host. Per-URL fetch failure (timeout 12s, non-200, robots) → record {url, status:"unreachable"}, continue.
  • SERP recency 429/quota → backoff 2^attempt (max 5); on persistent failure disable that check and set serp_recency="rate_limited".

MISSING / INSUFFICIENT DATA

  • IF no reliable date is found THEN base age_days on null and rely on content signals only; set date_confidence="low".
  • A year reference is only stale_year in a currency context (title/intro/"best…2023"); a historical mention ("founded in 1998") is NOT stale — require the currency cue.
  • Never claim a statistic is wrong — only that it is aging and should be re-verified.

OUTPUT

One JSON object per references/output.schema.json. No prose.

FILES

  • scripts/freshness.py — page parse, staleness-signal detection, optional SERP-recency compare, scoring.
  • references/output.schema.json — output contract.

Not using the CLI? Copy the SKILL.md and paste it straight into ChatGPT, Claude, or any agent.

Embed a badge

seoskills.sh install badge

More in Content and Writing

Content and Writingcalm-north/seojuice-skills

brief

Produce an editor-ready content brief for a target keyword or topic. Use when the user asks for a content brief, writing guidelines, article outline, SEO brief, what to include in a blog post, or how to structure content for a keyword. For choosing which topics to write about, see find-keywords. For a full site-wide SEO audit, see audit.

6.4K installs
Content and Writingagricidaniel/claude-seo

seo-content

Content quality and E-E-A-T analysis with AI citation readiness assessment, plus last-mile draft cleanup (AI-typical phrasing and invisible Unicode watermark characters). Use when user says "content quality", "E-E-A-T", "content analysis", "readability check", "thin content", "content audit", "humanize", "AI phrasing", "remove watermarks", or "invisible characters".

6K installs
Content and Writingagricidaniel/claude-seo

seo-content-brief

Generate competitive SEO content briefs with per-section word counts, competitor scoring, keyword density guidance, and page-type templates. Supports both new page briefs and improve-existing-page briefs. Use when user says "content brief", "write a brief", "content outline", "blog brief", "service page brief", "brief for", "writing brief", "content plan", or "outline for".

4.3K installs
Content and Writingonewave-ai/claude-skills

seo-content-optimizer

No description available.

487 installs
Content and Writingsickn33/agentic-awesome-skills

seo-content-auditor

Analyzes provided content for quality, E-E-A-T signals, and SEO best practices. Scores content and provides improvement recommendations based on established guidelines.

404 installs
Content and Writingseoskills.sh

Content Decay Predictor

Builds per-URL clicks and impressions time-series from Search Console, fits a trend to detect sustained decline and inf…

New