Skip to content
Back to skills

Youtube Packaging

ASecurity

Use when writing or fixing the text that ships with a YouTube upload — title, description, tags, hashtags and chapters — when click-through is weak and the words are the suspect, or when closing the loop on what last performed. NOT designing the thumbnail image (that is `youtube-thumbnails`), NOT inventing the idea or angle (that is `youtube-ideation`), NOT the channel growth plan (that is `youtube-strategy`), NOT pushing the fields via the Data API (that is `youtube-api`).

  • 134 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 2, 2026
ai-agentspythongonextjsdebuggingapiperformance

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned September 2, 2026

npx -y skills add ericrisco/rsc-harness --skill youtube-packaging --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Youtube Packaging?

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

Security grade badge for Youtube Packaging
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ericrisco-youtube-packaging/badge)](https://www.skillsdirectory.com/skills/ericrisco-youtube-packaging)

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: youtube-packaging
description: "Use when writing or fixing the text that ships with a YouTube upload — title, description, tags, hashtags and chapters — when click-through is weak and the words are the suspect, or when closing the loop on what last performed. NOT designing the thumbnail image (that is `youtube-thumbnails`), NOT inventing the idea or angle (that is `youtube-ideation`), NOT the channel growth plan (that is `youtube-strategy`), NOT pushing the fields via the Data API (that is `youtube-api`)."
tags: [youtube, video-seo, titles, descriptions, chapters]
recommends: [youtube-thumbnails, youtube-ideation, youtube-strategy, youtube-api, video-shorts, seo-geo, social-publisher]
profiles: []
origin: risco
---

# YouTube packaging

You write the text that ships with the upload — title, description, tags,
hashtags, chapters — and you optimize it against what actually performed, not
against a hunch. A strong video dies on a weak package. You are not the picture,
not the idea, not the channel plan, and not the API that uploads any of it.

## What you produce

Five concrete text artifacts plus one feedback entry, every time:

1. **A title SET** — 2-3 titles, never one. (Why: YouTube tests titles, so you
   ship a hypothesis to measure, not a guess to defend.)
2. **A description block** — above-the-fold line + body + links + hashtag line.
3. **A tag list** — 5-8 tags, first = exact target phrase.
4. **A hashtag line** — 3-5 hashtags inside the description.
5. **A chapter list** — timestamps that obey four exact rules.
6. **A feedback-log update** in `02-DOCS` — what you tried, what won, the numbers.

**Co-ownership note, up front:** YouTube tests the title+thumbnail pair as ONE
unit. The *title hypothesis to test* is co-owned with
[youtube-thumbnails](../youtube-thumbnails/SKILL.md); the **wordsmithing of the
title and all other metadata lives here**. Draw the image there, write the words
here.

## Ground first (STOP gate)

Before you write a single title, read the channel. Skipping this is how you
produce generic copy in someone else's voice.

- Read `02-DOCS/wiki/youtube/` for the channel's **brand voice**, prior packages,
  and the **performance feedback log** (winners and losers from past tests).
- Pull the decided **idea/angle** from [youtube-ideation](../youtube-ideation/SKILL.md)
  output if it exists.
- **No decided topic/angle yet? Route OUT to `youtube-ideation`. Never invent the
  topic here.** (Why: packaging a video with no settled angle is guessing at the
  hook, the keyword, and the audience all at once.)

Persist what you write under `02-DOCS/wiki/youtube/` (the package) and raw test
results under `02-DOCS/raw/youtube/`. `02-DOCS/wiki/` is an **OKF v0.1** bundle:
every package or log file persisted there carries YAML frontmatter with a
non-empty `type` (`youtube-package`) plus the OKF surface (`title`, `description`,
`tags`, `timestamp`) shared with the strategy/thumbnail/api siblings, and all
cross-references use standard markdown links — never `[[wikilinks]]`. The OKF
frontmatter shape for the persisted package and log is in
[references/description-and-chapters.md](references/description-and-chapters.md).

## The title

The single highest-leverage field. Rules, each with one reason:

- **Hard limit 100 chars; visible budget ~60.** Titles truncate around 60-70 chars
  on desktop and ~50-60 on mobile. The most compelling words + the primary keyword
  must land in the first ~60 chars / first 5 words — everything after that may
  never be seen.
- **Front-load the keyword and the hook.** Shape: Hook + Keyword + Benefit inside
  the first 60 chars. Channels report 15-25% higher CTR for titles kept in the
  60-70 char range.
- **Use numbers and specificity.** Titles with numbers report ~20-30% higher CTR;
  a parenthetical qualifier (year, difficulty, format) adds precision without
  burning the budget.
- **Emit a SET of 2-3 titles framed as an A/B hypothesis** — never ship one.
  Test & Compare auto-applies the variant with the highest *watched time per
  impression*, **not raw CTR**. (Why this matters: a clickbait title that wins the
  click but loses the viewer will LOSE the test. Write for the click AND the stay.)

Bad -> Good (front-load, cut the filler, add specificity):

```text
Bad   In this video I'll show you how to learn Python
Good  Learn Python in 2026: 12-Minute Beginner Tutorial

Bad   My honest thoughts after using the new framework for a while
Good  I Shipped 3 Apps on This Framework — Here's the Verdict

Bad   Tips for better sleep that actually work I promise
Good  7 Sleep Fixes That Doubled My Deep Sleep (No Pills)
```

Decide the title shape by how the video will be found — this is a real branch:

| Discovery mode | Title shape | Example |
|---|---|---|
| Search-led (tutorial, how-to, "best X") | Keyword first, literal, benefit-clear | `Fix Slow Next.js Builds: 5 Proven Steps` |
| Browse-led (commentary, vlog, story) | Curiosity/stakes first, keyword secondary | `I Rebuilt My App and Regretted Everything` |

Search-led titles answer a query; browse-led titles win a scroll. Most videos
lean one way — pick it deliberately, then write the set inside that shape.

## The description

Only the first ~125 chars are above the fold — the rest hides behind "Show more"
and is unseen by most viewers.

- **First 1-2 lines (~100-150 chars): primary keyword + who-it's-for.** This is
  the one part that shows in search and the watch page before the fold. Spend it on
  substance, not "Welcome to my channel."
- **Body: ~200-350 words of natural, keyword-rich prose. No stuffing.** Write for a
  human; weave the keyword and 1-2 variants in naturally. Keyword lists read as
  spam and help nothing.
- **Links block** (resources, socials, gear) then the **3-5 hashtag line**.
- **One clear CTA** (subscribe / next video / comment prompt).

The full template + a fully filled example live in
[references/description-and-chapters.md](references/description-and-chapters.md).

## Chapters

Chapters obey **four exact rules. Break any one and YouTube ignores ALL chapters.**
Run this checklist on every chapter block:

- [ ] **At least 3 timestamps.**
- [ ] **The first timestamp is `00:00`.** (This is the silent killer — omit `0:00`
      and every later timestamp is discarded.)
- [ ] **Each chapter is at least 10 seconds long.**
- [ ] **Timestamps are in ascending order.**

Compliant block:

```text
00:00 Intro — what you'll build
00:42 Installing the tools
03:15 Writing your first function
07:50 Debugging the common error
11:20 Recap & next steps
```

Why bother: chapters lift watch time and give search a jump-to target. The four
failure cases worked through line by line are in
[references/description-and-chapters.md](references/description-and-chapters.md).

## Tags & hashtags

Different fields, different rules — and one of them barely matters:

| Field | Count | Placement | Weight |
|---|---|---|---|
| Tags | 5-8 (up to 10-20), ~500-char budget | the Tags input box | **minimal ranking impact**; first tag weighted slightly more |
| Hashtags | 3-5 relevant; **max 15** | inside the description | first 3 render above the title; **>15 = ALL stripped** |

- **Tags: make the first tag the exact target phrase; do not over-invest.** YouTube
  calls tags' discovery role "minimal" — they mainly fix misspellings and
  disambiguate. Spend 2 minutes here, not 20.
- **Hashtags: pick 3-5 relevant ones; never exceed 15.** Only the first three show
  above the title, so order them best-first. Exceed 15 and YouTube strips every
  hashtag — you get zero, not 15.

## The learning loop

This is what makes the skill *learn* instead of guess. Because Test & Compare
measures variant performance directly, every package is logged and graded.

**Read before you write.** Open the feedback log in `02-DOCS/wiki/youtube/` and
carry forward what won as priors: if numeric titles beat curiosity titles 3 tests
running on this channel, the new set leans numeric. If a hashtag set tanked, drop
it.

**Append after you test.** One row per test, into `02-DOCS/wiki/youtube/packaging-log.md`
(OKF v0.1: file-level `type: youtube-package` frontmatter at the top, the table
below it, newest rows appended, past rows immutable):

```text
| date | video | title set tried | winner | CTR | impressions | avg view duration | note |
```

The cycle: read winners/losers -> write the new package as informed priors ->
ship the A/B set -> when Test & Compare resolves (~2 weeks), append the result ->
the next package is a little less of a guess. The full schema with a filled row is
in [references/description-and-chapters.md](references/description-and-chapters.md).

**Grade by watched-time-per-impression, not raw CTR.** A title can win clicks and
still lose the test by losing viewers. Log both so the lesson is honest.

## Handoffs

Stay inside the text fields. Everything else routes out:

| Ask | Owner |
|---|---|
| Design/generate the thumbnail image | [youtube-thumbnails](../youtube-thumbnails/SKILL.md) |
| Come up with the idea / topic / angle | [youtube-ideation](../youtube-ideation/SKILL.md) |
| Channel growth plan, niche, cadence | [youtube-strategy](../youtube-strategy/SKILL.md) |
| Upload/update metadata via the Data API | [youtube-api](../youtube-api/SKILL.md) |
| Cross-platform short caption/hook (TikTok/Reels) | [video-shorts](../video-shorts/SKILL.md) |
| Keyword research for web/AI search (not YouTube) | [seo-geo](../seo-geo/SKILL.md) |
| Schedule/publish the post to socials | [social-publisher](../social-publisher/SKILL.md) |

The tell: if the ask is **the text fields of the YouTube upload**, it is here. The
picture, the idea, the channel plan, the API call — each is a sibling.

## Anti-patterns

| Anti-pattern | Why it fails | Do instead |
|---|---|---|
| "In this video I'll show you…" opener | Burns the visible ~60-char budget on filler | Front-load keyword + hook in the first 5 words |
| Shipping ONE title | No hypothesis, nothing to learn | Always a SET of 2-3 for Test & Compare |
| Keyword-stuffing the description | Reads as spam, helps nothing | ~200-350 words of natural prose, keyword woven in |
| Clickbait the video can't cash | Wins the click, loses the viewer, LOSES the A/B | Promise what the video delivers |
| Chapters with no `00:00` / <3 / <10s / out of order | YouTube silently ignores ALL chapters | Run the four-rule checklist |
| >15 hashtags | YouTube strips every one — you get zero | 3-5 relevant, best three first |
| Obsessing over tags | They have minimal ranking impact | 5-8, first = target phrase, move on |
| Ignoring the feedback log | Every package stays a fresh guess | Read prior winners, carry them as priors |
| Optimizing CTR while view duration tanks | Test & Compare scores watched-time-per-impression | Log both; write for click AND stay |

## Verify

Run [scripts/verify.sh](scripts/verify.sh) on an emitted package file (the title
set, description, tags, hashtags, and chapters as one structured block). It is
read-only and lints the mechanical constraints: ≥2 titles, each ≤100 chars;
above-the-fold first line present and not over-long; ≥3 chapters with first `0:00`,
ascending, ≥10s gaps; 1-15 hashtags; tags within the ~500-char budget. A clean or
empty file exits 0.

## See also

- [youtube-thumbnails](../youtube-thumbnails/SKILL.md) — the image the title sits on; the pair is tested together.
- [youtube-ideation](../youtube-ideation/SKILL.md) — the idea/angle you package here.
- [youtube-strategy](../youtube-strategy/SKILL.md) — channel positioning, niche, cadence.
- [youtube-api](../youtube-api/SKILL.md) — programmatic upload/update of these fields.

Files in this skill

  • SKILL.md11.5 KB
  • evals/README.md1.1 KB
  • evals/cases.yaml3.1 KB
  • references/description-and-chapters.md7.2 KB
  • scripts/verify.sh9.6 KB

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.

Comments

Loading comments…

Newsletter

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