Relaunch — update an old winner instead of starting cold
The course's most under-used lever: Ahrefs spends ~half its time updating and relaunching
old content, not making new (STRATEGY.md §3). A page that already earned rank + links is the
single best ROI on the blog — it starts from authority, not from zero. Anti-pattern #12 is
"abandon old content or settle for any position below #1." This skill is how we refuse to
abandon it: take a decayed-but-valuable article, make it the best result for its query again,
and re-promote it as new.
A relaunch is not a tweak. It is the full update loop — re-research against today's SERP,
rewrite where the page lost ground, refresh the data and visuals, bump the date, and promote it
like a brand-new piece. Half-measures (change the year in the title, call it "updated") are
exactly the abandonment this lesson warns against.
When this fires
The audit (scripts/content_audit.py → content-pipeline/audit/latest.md, the "Relaunch
plan" section) produces the work orders. A slug lands there when it is:
compound == "decaying" (organic traffic is fading — Lesson 1, it stopped compounding), OR
- rank-slipping vs the prior snapshot (its
best_rank worsened by ≥3 positions),
and it was ever valuable (had organic traffic, first-touch entries, or referring domains).
Each row carries {slug, reason, best_rank, referring_domains, what_to_refresh} — what_to_refresh
is your tailored checklist for this page. Start there; it already names the specific gaps.
Pure-dead pages (no traffic, no entry, ever) are not relaunch candidates — they're DELETE
or REVIVE in the audit. Don't relaunch a page that never won; relaunch one that's slipping.
Input
For slug {slug}:
content-pipeline/audit/latest.md — the Relaunch plan row for this slug (reason +
what_to_refresh + best_rank + referring_domains). The brief.
content-pipeline/scorecard/latest.md — the per-article line (trajectory, compound class,
rank_keyword, paid). The evidence.
content-pipeline/8-publish/{slug}/article.md — the live published body (the thing you're
updating). If it's missing, pull the live page or the Strapi/blog_posts copy first.
content-pipeline/1-research/{slug}.md (+ {slug}-deep.md, {slug}-data.json) — the original
dossier/BEAT SPEC, if it exists, so you re-research against it rather than from scratch.
STRATEGY.md — §3 (cadence/relaunch), §5 (uniqueness), §6 (spine: BV + intent + compound).
brand-config.md — voice, audience, products, forbidden phrases.
Process — the relaunch loop
This is an update of a live article, so the spine never changes: it must still be
intent-matched, BV ≥ 2, unique, and built to compound (STRATEGY.md §6). You're re-earning #1,
not bolting "(2026)" onto a stale page.
Read the brief. Open the audit row + scorecard line. Note why it decayed/slipped and the
rank_keyword it ranks (or used to rank) for. The what_to_refresh field is your punch list.
Re-verify intent against the LIVE SERP (the non-negotiable first move). Pull today's top
10 for the rank_keyword. The SERP shifts — what ranked a year ago may now be a different
shape (listicle → tool page, guide → comparison). Match the current dominant intent
exactly (STRATEGY.md §6, anti-pattern #9). If the SERP shape moved, the relaunch is a
re-architecture, not a copy-edit — route through /research → /outline for the new shape.
Find what made us slip. Read the new #1–3 side by side with our live body. We lost rank
because a competitor out-updated us: fresher data, a section we lack, a sharper take, better
coverage. List the specific gaps — these are what the rewrite must close.
Freshen the substance (not the chrome).
- Data & examples: replace every stale stat/number/screenshot-able claim with current
figures (re-cite). Dated examples → current ones. A "best apps 2024" page with 2024 prices
is why it fell.
- Squeeze new keywords: the page already ranks for a family — pull the new long-tail and
"people also ask" the SERP now rewards and widen the keyword family the article covers
(one strong page ranks for ~1,000 queries —
STRATEGY.md §1; don't leave the new ones on
the table). Add the subsections that capture them. Never keyword-stuff (anti-pattern #10).
- Information gain (still blocking): the refresh must carry ≥1 thing the current top 10
don't — our own data, first-hand testing, a sharper angle (
STRATEGY.md §5). A relaunch that
just re-clones the new page 1 is the same clone failure, one year later.
- Refresh visuals: re-capture screenshots that show stale UI/old years; regenerate charts
off the new data. Follow
templates/visual-strategy.md (resolvable data, value-first ~80/20,
annotate screenshots). A 2024 screenshot dates the page as hard as a 2024 stat.
Rewrite where it lost ground — reuse where it didn't. Apply the changes through the normal
craft (/draft conventions: persona by content-type, voice from examples/voice/, the
component menu with restraint). Keep the sections that still win; rewrite the weak ones; add the
missing ones. The published byline persona stays the same unless the content type genuinely
changed.
*Bump the published date (this is what makes it a relaunch).* Set published_at /
publishedAt to today on the refreshed package — the article re-enters the calendar as fresh.
Keep the slug and URL identical (we're updating the same page to keep its rank + links —
never spin up a new URL and orphan the old authority; that throws away the whole point).
Re-run the gate. A relaunch ships through the same publish gate as a new article —
/quality-check must PASS (floors + the 3-reviewer "do they keep ours over the live #1?" panel).
A refresh that can't beat the current #1 isn't done. On FAIL, route the punch list and iterate;
never lower the bar to ship the update.
Re-publish. Run /format-for-publish on the refreshed package (same slug, new date). Then
mirror-verify it's live (the formatter's Supabase blog_posts assertion).
Re-promote as if brand new (the 110/110 half). The update is only half the relaunch — Lesson
8's whole point is you promote it again. Surface it for the off-page loop exactly like a new
piece: refresh internal links pointing at it from the cluster, re-share it, and treat it as a
fresh promotion target. Promotion = building backlinks, not chasing a traffic spike
(STRATEGY.md, anti-patterns #13–14); don't stop promoting until it's back to #1.
DO / DON'T
DO
- Relaunch pages that were valuable and are slipping — start from earned rank + links.
- Re-verify searcher intent against the live SERP first — the SERP shape moves; match today's.
- Genuinely freshen the substance — current data, new keywords, refreshed visuals, ≥1 new
information-gain element.
- Keep the same slug/URL and bump the published date — update the page, re-date the launch.
- Re-promote it as new — relaunch = refresh + re-promotion (the second half is the point).
- Send it back through
/quality-check — it must beat the current #1, not the old one.
DON'T
- Don't abandon old content or settle for any rank below #1 (anti-pattern #12 — the reason this
skill exists).
- Don't fake a relaunch: changing the year in the title or stamping "updated" without refreshing
the substance is the abandonment, dressed up.
- Don't mint a new URL for the refreshed page — that orphans the rank + backlinks you're
relaunching for.
- Don't re-clone the new page 1 — a relaunch still owes ≥1 information-gain element
(
STRATEGY.md §5).
- Don't keyword-stuff the new terms or over-engineer on-page SEO (anti-pattern #10) — widen the
family by genuinely covering the subtopics.
- Don't ship a refresh that fails the gate, and don't chase a one-off traffic spike instead of
backlinks (anti-patterns #13–14).
Winning =
The relaunched page reaches page 1 again and stays (Lesson 8) — its organic traffic resumes
compounding (compound flips back toward compounding in a later scorecard), its best_rank
recovers toward #1, and it converts (BV ≥ 2). The opposite — and what we refuse to call a relaunch
— is a stale page left to drift to page 2, or a cosmetic "(2026)" refresh that doesn't move the
rank. A real relaunch turns a decaying asset back into a compounding one.
Autonomous behavior
- The audit's Relaunch plan is the queue; in autonomous mode (
BLOG_AGENT_AUTONOMOUS=1) work
the rows top-down (worst rank-slips first — the audit already orders them).
- A relaunch is AUTONOMOUS-SAFE — it's an update of an existing page, not a destructive or
outward-facing action (unlike DELETE / merge-301 / ghost-redirect, which stay board-gated). EO
can execute it via the update path without an approval gate.
- Same publish discipline as new content:
/quality-check PASS required, the orchestrator owns the
revision budget, and a FAIL is quarantined to 9-needs-review/ — never publish a FAIL or
lower the bar to ship a refresh.
- One relaunch at a time per slug; keep the slug/URL stable and only the date + body change.
1---2name: relaunch3description: Execute a relaunch on a decayed-but-valuable article (Lesson 5 audit + Lesson 8 "don't abandon old winners"). Take a page the audit flagged as decaying or rank-slipping, refresh it against the LIVE SERP (freshen data, re-verify searcher intent, squeeze new keywords, refresh visuals), bump its published date, and re-promote it as if brand new. The "update ~half the calendar" half of the strategy. Triggered from the audit's Relaunch plan.4---56# Relaunch — update an old winner instead of starting cold78The course's most under-used lever: Ahrefs spends **~half its time updating and relaunching**9old content, not making new (`STRATEGY.md` §3). A page that already earned rank + links is the10single best ROI on the blog — it starts from authority, not from zero. **Anti-pattern #12 is11"abandon old content or settle for any position below #1."** This skill is how we refuse to12abandon it: take a decayed-but-valuable article, make it the best result for its query *again*,13and re-promote it as new.1415A relaunch is **not** a tweak. It is the full update loop — re-research against today's SERP,16rewrite where the page lost ground, refresh the data and visuals, bump the date, and promote it17like a brand-new piece. Half-measures (change the year in the title, call it "updated") are18exactly the abandonment this lesson warns against.1920## When this fires2122The audit (`scripts/content_audit.py` → `content-pipeline/audit/latest.md`, the **"Relaunch23plan"** section) produces the work orders. A slug lands there when it is:2425- `compound == "decaying"` (organic traffic is fading — Lesson 1, it stopped compounding), **OR**26- **rank-slipping** vs the prior snapshot (its `best_rank` worsened by ≥3 positions),2728**and** it was ever valuable (had organic traffic, first-touch entries, or referring domains).29Each row carries `{slug, reason, best_rank, referring_domains, what_to_refresh}` — `what_to_refresh`30is your tailored checklist for *this* page. Start there; it already names the specific gaps.3132> Pure-dead pages (no traffic, no entry, ever) are **not** relaunch candidates — they're DELETE33> or REVIVE in the audit. Don't relaunch a page that never won; relaunch one that's *slipping*.3435## Input3637For slug `{slug}`:38- `content-pipeline/audit/latest.md` — the **Relaunch plan** row for this slug (`reason` +39 `what_to_refresh` + `best_rank` + `referring_domains`). The brief.40- `content-pipeline/scorecard/latest.md` — the per-article line (trajectory, compound class,41 `rank_keyword`, paid). The evidence.42- `content-pipeline/8-publish/{slug}/article.md` — the **live published body** (the thing you're43 updating). If it's missing, pull the live page or the Strapi/`blog_posts` copy first.44- `content-pipeline/1-research/{slug}.md` (+ `{slug}-deep.md`, `{slug}-data.json`) — the original45 dossier/BEAT SPEC, if it exists, so you re-research *against* it rather than from scratch.46- `STRATEGY.md` — §3 (cadence/relaunch), §5 (uniqueness), §6 (spine: BV + intent + compound).47- `brand-config.md` — voice, audience, products, forbidden phrases.4849## Process — the relaunch loop5051> This is an **update of a live article**, so the spine never changes: it must still be52> intent-matched, BV ≥ 2, unique, and built to compound (`STRATEGY.md` §6). You're re-earning #1,53> not bolting "(2026)" onto a stale page.54551. **Read the brief.** Open the audit row + scorecard line. Note *why* it decayed/slipped and the56 `rank_keyword` it ranks (or used to rank) for. The `what_to_refresh` field is your punch list.57582. **Re-verify intent against the LIVE SERP (the non-negotiable first move).** Pull today's top59 10 for the `rank_keyword`. The SERP shifts — what ranked a year ago may now be a different60 *shape* (listicle → tool page, guide → comparison). **Match the current dominant intent61 exactly** (`STRATEGY.md` §6, anti-pattern #9). If the SERP shape moved, the relaunch is a62 re-architecture, not a copy-edit — route through `/research` → `/outline` for the new shape.63643. **Find what made us slip.** Read the new #1–3 side by side with our live body. We lost rank65 because a competitor *out-updated us*: fresher data, a section we lack, a sharper take, better66 coverage. List the specific gaps — these are what the rewrite must close.67684. **Freshen the substance (not the chrome).**69 - **Data & examples:** replace every stale stat/number/screenshot-able claim with current70 figures (re-cite). Dated examples → current ones. A "best apps 2024" page with 2024 prices71 is *why* it fell.72 - **Squeeze new keywords:** the page already ranks for a family — pull the new long-tail and73 "people also ask" the SERP now rewards and **widen the keyword family** the article covers74 (one strong page ranks for ~1,000 queries — `STRATEGY.md` §1; don't leave the new ones on75 the table). Add the subsections that capture them. Never keyword-stuff (anti-pattern #10).76 - **Information gain (still blocking):** the refresh must carry ≥1 thing the current top 1077 don't — our own data, first-hand testing, a sharper angle (`STRATEGY.md` §5). A relaunch that78 just re-clones the *new* page 1 is the same clone failure, one year later.79 - **Refresh visuals:** re-capture screenshots that show stale UI/old years; regenerate charts80 off the new data. Follow `templates/visual-strategy.md` (resolvable data, value-first ~80/20,81 annotate screenshots). A 2024 screenshot dates the page as hard as a 2024 stat.82835. **Rewrite where it lost ground — reuse where it didn't.** Apply the changes through the normal84 craft (`/draft` conventions: persona by content-type, voice from `examples/voice/`, the85 component menu with restraint). Keep the sections that still win; rewrite the weak ones; add the86 missing ones. The published byline persona stays the same unless the content type genuinely87 changed.88896. **Bump the published date (this is what makes it a *re*launch).** Set `published_at` /90 `publishedAt` to today on the refreshed package — the article re-enters the calendar as fresh.91 Keep the **slug and URL identical** (we're updating the same page to keep its rank + links —92 never spin up a new URL and orphan the old authority; that throws away the whole point).93947. **Re-run the gate.** A relaunch ships through the same publish gate as a new article —95 `/quality-check` must PASS (floors + the 3-reviewer "do they keep ours over the live #1?" panel).96 A refresh that can't beat the *current* #1 isn't done. On FAIL, route the punch list and iterate;97 never lower the bar to ship the update.98998. **Re-publish.** Run `/format-for-publish` on the refreshed package (same slug, new date). Then100 mirror-verify it's live (the formatter's Supabase `blog_posts` assertion).1011029. **Re-promote as if brand new (the 110/110 half).** The update is only half the relaunch — Lesson103 8's whole point is you **promote it again**. Surface it for the off-page loop exactly like a new104 piece: refresh internal links pointing at it from the cluster, re-share it, and treat it as a105 fresh promotion target. **Promotion = building backlinks, not chasing a traffic spike**106 (`STRATEGY.md`, anti-patterns #13–14); don't stop promoting until it's back to #1.107108## DO / DON'T109110**DO**111- Relaunch pages that **were valuable and are slipping** — start from earned rank + links.112- **Re-verify searcher intent against the live SERP first** — the SERP shape moves; match today's.113- **Genuinely freshen the substance** — current data, new keywords, refreshed visuals, ≥1 new114 information-gain element.115- **Keep the same slug/URL** and **bump the published date** — update the page, re-date the launch.116- **Re-promote it as new** — relaunch = refresh **+** re-promotion (the second half is the point).117- Send it back through `/quality-check` — it must beat the *current* #1, not the old one.118119**DON'T**120- Don't **abandon old content** or settle for any rank below #1 (anti-pattern #12 — the reason this121 skill exists).122- Don't fake a relaunch: changing the year in the title or stamping "updated" without refreshing123 the substance is the abandonment, dressed up.124- Don't **mint a new URL** for the refreshed page — that orphans the rank + backlinks you're125 relaunching *for*.126- Don't **re-clone the new page 1** — a relaunch still owes ≥1 information-gain element127 (`STRATEGY.md` §5).128- Don't **keyword-stuff** the new terms or over-engineer on-page SEO (anti-pattern #10) — widen the129 family by genuinely covering the subtopics.130- Don't ship a refresh that fails the gate, and don't chase a one-off traffic spike instead of131 backlinks (anti-patterns #13–14).132133## Winning =134135The relaunched page **reaches page 1 again and stays** (Lesson 8) — its organic traffic resumes136**compounding** (`compound` flips back toward compounding in a later scorecard), its `best_rank`137recovers toward #1, and it converts (BV ≥ 2). The opposite — and what we refuse to call a relaunch138— is a stale page left to drift to page 2, or a cosmetic "(2026)" refresh that doesn't move the139rank. A real relaunch turns a decaying asset back into a compounding one.140141## Autonomous behavior142143- The audit's **Relaunch plan** is the queue; in autonomous mode (`BLOG_AGENT_AUTONOMOUS=1`) work144 the rows top-down (worst rank-slips first — the audit already orders them).145- A relaunch is **AUTONOMOUS-SAFE** — it's an *update* of an existing page, not a destructive or146 outward-facing action (unlike DELETE / merge-301 / ghost-redirect, which stay board-gated). EO147 can execute it via the update path without an approval gate.148- Same publish discipline as new content: `/quality-check` PASS required, the orchestrator owns the149 revision budget, and a FAIL is quarantined to `9-needs-review/` — **never** publish a FAIL or150 lower the bar to ship a refresh.151- One relaunch at a time per slug; keep the slug/URL stable and only the date + body change.