Skip to content
Back to skills

Retire Content

ASecurity

Take a post or a page off the site without breaking an indexed URL - a post becomes a draft (its URL stays indexed), a page is removed only once a redirect is in place - and prove it with the lint and the build. Use when asked to retire, unpublish, hide, take down, archive or delete a post or a page.

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 23, 2026
developmentgobashgit

Security analysis

A100/100

Scanned November 9, 2026

npx -y skills add HKamkar/agentic-cms --skill retire-content --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Retire Content?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Retire Content
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/hkamkar-retire-content/badge)](https://www.skillsdirectory.com/skills/hkamkar-retire-content)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: retire-content
description: Take a post or a page off the site without breaking an indexed URL - a post becomes a draft (its URL stays indexed), a page is removed only once a redirect is in place - and prove it with the lint and the build. Use when asked to retire, unpublish, hide, take down, archive or delete a post or a page.
argument-hint: <post slug | page slug>
---

# Retire content

The repo is the current directory. Public URLs are indexed; deleting a
file makes its URL a 404. Redirects live on the host, in whatever list
the repo's instructions file (`AGENTS.md`) or `README.md` documents;
until one exists,
retiring means hiding, not deleting.

## Read first

The repo's notes on redirects (`AGENTS.md`, `README.md`), the file being
retired, and `grep -rn "<slug>" content src` for everything that points
at it.

## Steps for a post

1. Set `draft: true` in `content/blog/<slug>.md`; keep the file, the dates
   and the images (a draft still counts as a post for the lint's orphan
   rule, and the URL comes back the day the post does).
2. Remove the slug from every other post's `related` list (a draft is a
   valid reference, but "Read next" must not point at a hidden post).
3. Add a row with status `retired` to `content/editorial/calendar.md`: the
   status report shows it, and the lint's `draft-stale` rule leaves a
   retired draft alone (any other draft older than 30 days is nagged).
4. `pnpm content:lint`, then **verify** (below): the sitemap and the feed
   lose the entry; `check-seo` confirms nothing links to it.
5. Commit `Retire: <slug>` on the repo's working branch.

## Steps for a page

Only once a redirect for its route exists (stop and say so otherwise):
delete `content/pages/<slug>.yaml`, its entries in `links`, `nav` and
`footer.quickLinks` in `src/config/site.ts`, every internal link to it
(`check-seo`'s links rule catches the rest), `public/images/<slug>/` and
its OG image. `pnpm kit parity` before and after must differ only in
that page and the chrome of the others. Verify, commit `Retire: /<slug>`.

## Verify

```bash
pnpm lint && pnpm test && pnpm content:lint && pnpm build   # 0 failures
pnpm preview                                                # pnpm start where the site has none; the route is gone (a retired post 404s); then stop it
git push                                                    # when the user says
```

## Stop for the user

Before touching a page at all (unless a redirect exists); before deleting
any file rather than drafting it; the push.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in development →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.