Blog refresh optimizer
Audits and optimizes EXISTING, already-published Acquia blog posts — historical content optimization, not new content. Takes a URL (or a batch) plus its performance data (GSC, GA4) and produces a triage decision (Keep / Refresh / Consolidate / Repurpose / Retire), then a section-by-section refresh plan: on-page fixes, freshness/accuracy updates, content gaps, internal links, CTR, a GEO/AI-search retrofit, and cannibalization checks. Pulls data itself from Porter/Supermetrics, the live SERP, Conductor, and Screaming Frog. TRIGGER on "optimize old blog posts", "refresh content", "update an old post", "historical optimization", "content decay", "why did this post drop", "should we update or delete this", pasting an existing URL to improve, or a content-audit batch of published URLs. Do NOT use for planning a brand-new post — that is blog-seo-content-brief. Repetitive, high-volume task; default to producing the plan, not a long questionnaire.From its SKILL.md
npx -y skills add aarushibhatt-cloud/blog-refresh-optimizerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- 29 days oldThe repository was created 29 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
12.4 KB, ~2.7k tokens by cl100k_base, as published. Nobody here has run it
Blog Refresh Optimizer
Purpose: Turn an existing, published blog post into a decision plus a do-this refresh plan. Most organic traffic and most leads come from older posts, not new ones — so re-investing in a post that already has index history and link equity usually beats writing net-new. This skill decides whether a post is worth the investment, then tells the writer or developer exactly what to change to move it.
Scope: Existing content only — one URL or a batch. It covers the full refresh lifecycle:
triage → refresh plan → GEO retrofit → cannibalization/consolidation → post-publish tracking.
It does not plan brand-new posts (use blog-seo-content-brief) and it is not a full
site-wide technical audit (use seo-geo-optimizer for that).
Design principle — act, don't interrogate. This is a repetitive task run across many URLs. Pull the performance data yourself from the connected tools before asking anything. Ask for missing inputs only once, batched, and only when they can't be discovered (see Step 1). Never recommend deleting or redirecting a URL without showing the data behind that call.
Workflow
Run in order. Steps 2–4 gather evidence; Step 5 triages; Step 6 writes the plan.
Step 1 — Confirm the inputs (fast)
You need four things. Discover or infer as many as possible before asking:
- The URL(s) — required. One post, or a batch from a content audit. If the user pasted a URL, use it. If they named a topic instead ("our Drupal migration posts"), find the matching URLs via Screaming Frog crawl or GSC (Step 2) rather than asking.
- The post's goal — what this post is for: lead gen, authority/thought leadership, brand awareness, direct conversion, or funnel/education. Infer from the topic and the CTA on the page; state the assumption. The goal changes which metrics matter and which refresh moves win.
- Time window — default to last 12 months vs. the prior 12 for decay detection. Only ask if the user wants a different comparison.
- Author / byline & approver — for the handoff (e.g. Sam for content approval, Elisa/Matt for review). Optional; leave a placeholder.
If ONLY the URL is missing, ask one short question. Otherwise proceed. The whole point of this skill is speed across many posts.
Step 2 — Pull performance data (the evidence)
Read references/data-pull.md for exact tool calls, parameter names, and fallback order. For
each URL, assemble:
- Search performance (GSC via Porter/Supermetrics): clicks, impressions, CTR, average position — current window vs. prior window. This is the primary decay signal.
- Engagement (GA4 via Porter/Supermetrics): sessions, engagement rate, average engagement time, conversions/key events, and any downstream event (form start, form submit) tied to the page. This tells you if traffic actually does anything.
- The queries the page ranks for (GSC): which terms drive impressions, and which sit on page 2 (positions 8–20) — the "striking distance" terms a refresh can push onto page 1.
- Content decay pattern: is this a slow slide, a cliff (algorithm/SERP change), or seasonal?
- Freshness signals (Screaming Frog / page fetch): last-modified date, word count, thin/ broken elements, outbound links (some may be dead or point to outdated resources).
Never invent a metric. If a number can't be retrieved, write "not retrieved" and note why.
Step 3 — Read the current SERP + GEO landscape
Read references/data-pull.md §C–D. For the post's primary query:
- Live Google SERP (
Porter:serp_organic_live_advanced): who outranks the post now, what format wins (guide, listicle, tool, video), which SERP features are present (Featured Snippet, People Also Ask, AI Overview), and the content gaps the top pages cover that this post doesn't. PAA questions are prime FAQ + heading material. - GEO / AI-search layer (Conductor): the real prompts users ask AI engines on this topic and who gets cited. A refresh isn't just about Google rank anymore — it's about whether ChatGPT, Perplexity, and Google AI Overviews can quote this post. If a Conductor endpoint is feature-gated (past 403s on some AI Search Performance features for account 14868), note it inline and fall back to PAA — don't stall.
Step 4 — Cannibalization check
Read references/triage-framework.md §Cannibalization. Before recommending a refresh, check
whether Acquia has more than one URL competing for the post's main query (common on large
blogs and a frequent cause of a post that "won't move"). Use GSC (multiple URLs for one query)
and Porter:google_page_intersection. If two posts overlap, the right move is often
consolidate + 301, not refresh both — flag it here so the plan doesn't polish a page that
should be merged away.
Step 5 — Triage: assign one action
Read references/triage-framework.md fully. Score the post on three axes — performance
(is it working?), strategic value (does it serve a current priority / pillar / product?),
and accuracy/decay (is it stale, wrong, or declining?) — then assign exactly one action:
- KEEP — performing and accurate. Leave it; add to the monitor list.
- REFRESH — good bones, decaying or beatable. The main path: rework in place, keep the URL.
- CONSOLIDATE — overlaps/cannibalizes another URL. Merge the best of both into one, 301 the loser to preserve link equity.
- REPURPOSE — topic still useful but the post is weak; rebuild as a new angle/format (or lift the good parts into a pillar/service page) and 301 the original.
- RETIRE — no traffic, no strategic value, inaccurate beyond saving, and no salvageable equity. 301 to the nearest relevant page (rarely: unpublish/410). Never recommend a bare delete without a redirect target.
State the action, the one-line rationale, and the data that drove it.
Step 6 — Write the refresh plan (for KEEP-with-tweaks, REFRESH, CONSOLIDATE, REPURPOSE)
Read references/refresh-playbook.md for the tactic library, then fill in
references/refresh-report-template.md completely for each URL. The plan is section-by-section
and buildable — the person executing should never have to ask "change what, to what?"
Step 7 — Load Acquia guardrails (before any copy is drafted)
If the refresh includes rewritten copy, new sections, or new CTAs, apply the Acquia guidelines so
the output ships clean the first time. Start with the bundled references/acquia-guidelines.md
— a self-contained quick reference (voice, writing rules, accessibility, product naming, and
claims) that works even if the marketing-essentials plugin isn't installed. For anything it
doesn't cover (full word list, complete product table, full claims checklist), defer to the
authoritative plugin skills below — pull the specifics that matter, don't restate the whole guide:
marketing-essentials:acquia-writing-style— voice, no contractions, Oxford comma, capitalization, numbers/dates, en/em dashes.marketing-essentials:acquia-product-naming— correct current product names (Acquia Source, DAM, etc.) and renamed/EOS products. Old posts often use outdated product names — a refresh is the moment to fix them.marketing-essentials:acquia-marketing-policy— any competitor comparison, superiority claim, or analyst citation added in the refresh must be substantiated. Flag claims to back up.marketing-essentials:acquia-context— grounding facts and approved proof points for any new stats or positioning.marketing-essentials:acquia-humanizer— if rewriting large chunks, de-slop so it reads human and on-brand.
Related skills to hand off to: schema-generator (FAQ/Article schema for the GEO retrofit),
cro-expert (if the main problem is conversion, not traffic), pseo-comparison-pages (if
REPURPOSE turns the post into a competitor-alternative page).
Output rules
- Evidence first, decision second. Every triage call shows the numbers behind it (current vs. prior window). No "this looks stale" without the data.
- One action per URL. Keep / Refresh / Consolidate / Repurpose / Retire — pick one, justify it. For a batch, deliver a triage table first, then full plans only for the actionable ones.
- The refresh plan is buildable. Section-by-section: what to change, why, and — where copy is involved — the actual replacement text or a tight spec for it. Include the striking-distance queries the refresh targets.
- Preserve equity. Any URL change, merge, or retirement specifies the 301 target. Never a bare delete. Keep the existing URL on a REFRESH unless there's a strong reason to change it.
- GEO retrofit is standard, not optional. Every refresh plan includes the AI-search layer: answer-first intro, self-contained answer blocks, FAQ, entities, and stats with sources.
- Freshness is real, not cosmetic. Update facts, dead links, tense, product names, and trend data — and only then update the visible "last updated" date. Do not just change the date.
- Acquia-compliant. Voice and current product names correct; every added comparison/claim flagged for substantiation.
- Don't fabricate data. Missing metric → "not retrieved". A refresh plan built on invented numbers is worse than one honest about gaps.
Reference files
references/triage-framework.md— The Keep/Refresh/Consolidate/Repurpose/Retire decision model, the 3-axis scoring, decay-pattern reading, and the cannibalization check.references/data-pull.md— Exact tool calls for GSC + GA4 (Porter/Supermetrics), live SERP, Conductor GEO layer, and Screaming Frog crawl, with fallback order.references/refresh-playbook.md— The tactic library: on-page, freshness, content gaps, internal linking, CTR, CRO, and the full GEO/AI-search retrofit.references/refresh-report-template.md— The fill-in per-URL refresh plan, plus the batch triage table.references/acquia-guidelines.md— Self-contained Acquia guidelines (voice, writing rules, accessibility, product naming, claims) plus a pre-publish refresh checklist. Works without the marketing-essentials plugin; points to the full plugin skills for edge cases.assets/example-refresh.md— A worked example refresh plan for depth and tone reference.
Key principles
- Old content is an asset, not a liability. A post already in Google's index has history and equity a new post has to earn from scratch. Refreshing usually beats writing new — but only for posts the data says are worth it.
- Decide before you polish. The most expensive mistake is refreshing a page that should be consolidated or retired. Triage first.
- Chase striking-distance, not vanity terms. The fastest wins are queries the post already ranks 8–20 for. Find them in GSC and aim the refresh there.
- Freshness means accuracy, not a new date. Fix the facts, links, tense, and product names. Changing only the timestamp is a trick Google and readers see through.
- Refresh for the answer, not just the ranking. If AI engines can't cleanly quote the post, a rank refresh leaves the fastest-growing surface — AI search — on the table.
- Never delete blind. Every retirement or merge routes its link equity somewhere with a 301.
What ships with it: 8 files
60.4 KB alongside SKILL.md
- acquia-guidelines.md5.3 KB
- blog-refresh-optimizer.zip24.2 KB
- data-pull.md6.2 KB
- example-refresh.md4.5 KB
- README.md4.3 KB
- refresh-playbook.md6.4 KB
- refresh-report-template.md4.1 KB
- triage-framework.md5.3 KB