Seo freshness
The SEO + AI-search (GEO/AEO) optimization toolkit for Claude Code — two-score audit + opt-in fixer. Built for 2026-2027.
npx -y skills add Hainrixz/claude-seo-ai --skill seo-freshnessAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Audit and repair freshness & temporal signals on a page — reconcile visible publish/update dates with schema datePublished/dateModified, flag staleness against topic volatility, and inject honest dateModified. Module M13. Feeds both the Search SEO and AI Visibility scores.
SKILL.md
3.9 KB, as published. Nobody here has run it
seo-freshness (M13)
Freshness is a recency signal both classic ranking systems (Query Deserves Freshness) and AI answer engines weigh — Perplexity in particular favours recently-updated sources when citing. Date fields tie directly to Article schema (cross-check M5); see references/schema-tier1.md for the date rules.
Audits
Working from the PageSnapshot (rendered_dom if present, else raw_html):
- Visible dates: detect on-page "Published" / "Updated on" / "Last reviewed" patterns and their values (ISO or human-readable).
- Schema dates: parse
datePublished/dateModifiedfrom JSON-LDArticle/BlogPosting/NewsArticle. - Agreement: visible date and schema date must match; flag mismatches and schema dates with no visible counterpart (AI engines distrust hidden-only dates).
- Staleness: estimate content age (most recent reliable date) vs topic volatility — fast-moving topics (prices, tooling, "best X 2026", regulations) decay faster than evergreen reference content. Report stale, not just old.
- Pattern hygiene: "updated on" with no substantive content change is a freshness anti-pattern — note it, never recommend it.
Fixes
- AUTO (
fixable: auto): inject a missingdateModifiedinto existing Article schema as an additive diff forfix. Never backdate to a false date — use the verifiable last-change date (e.g. Last-Modified header / repo mtime / today) or leave a clearly-markedTODOplaceholder the user confirms. - PROPOSED (
fixable: proposed): surface visible-vs-schema date mismatches with the corrected value as a draft requiring per-item accept; never auto-rewrite a date the user must verify. - ADVISORY (
fixable: advisory): recommend a genuine content refresh for stale-on-volatile pages — the tool never writes editorial content. Never fabricate dates or invent an update that did not happen.
Verification
dom_assert: visible date string present and parses; matches schema value.schema_validator:datePublished/dateModifiedpresent, valid ISO 8601,dateModified >= datePublished.header_check: HTTPLast-Modifiedheader corroborates the claimed modification date.- When the live tier (header fetch / validator) is unavailable, status is
needs_api, never a falsepass.
Findings
Findings conform to schema/finding.schema.json. Examples:
M13.datemodified.missing— Article schema withdatePublishedbut nodateModified(statusfail, severity 3,fixable: auto, axisboth, confidencedirectional).M13.dates.visible_schema_mismatch— visible "Updated May 2025" vs schemadateModified: 2023-01-10(statuswarn, severity 3,fixable: proposed, axisboth, confidencedirectional).M13.content.stale_volatile— "best X 2024" page unchanged for 2 years on a fast-moving topic (statuswarn, severity 2,fixable: advisory, axisboth, confidencedirectional). Each finding:evidence.observedquotes the page (date string + selector);verification.reproduceis a runnable assertion (e.g.node scripts/check-freshness.mjs --url <u>);expected_impactis banded + confidence-tagged, with any published number confined torationalewith a citation.
Honesty
- Freshness is a contextual signal, not a universal ranking boost — refreshing evergreen content rarely moves rankings, and a
dateModifiedbump without a real content change is detectable and adds no durable value. Confidence here is directional, neverestablished; never present a date edit as a guaranteed ranking gain or backdate to fake recency.