youtube-seo
Skill9 starsChanged 7 months agoMITView on GitHub
Advanced YouTube SEO analysis and optimization for channels and videos. Routes to specialized sub-skills for audits, single-video deep dives, metadata optimization, channel branding, keyword research, thumbnails, and competitor intel. Models YouTube's modern recommender (session watch time / Reinforce / persona matching) not just keyword match. Use when user says "YouTube SEO", "optimize my video", "rank my YouTube video", "YouTube channel audit", "YouTube keywords", or provides a YouTube URL.
- Reads credentials
We split this skill into the rules it gives an agent
5 rules. 0 are common, 5 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 6 edited versions we read keep these.
5
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 102
Search. Translated captions unlock international impressions.
- Distinctive: line 115
SERP differentiation: must pattern-break against the top-10 thumbnails for the target keyword (CLIP-embedding or manual grid check)
- Distinctive: line 154
Made-for-Kids flag: must match content truthfully.
- Distinctive: line 210
If critical data is missing, ASK for it before analyzing — do not guess Tier 1 signals.
- Distinctive: line 229
If the user's numbers are 1.5x median, recommend scaling (more similar content).
“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
YouTube SEO Orchestrator (Advanced)
Master skill for YouTube SEO work. Detect intent, delegate to the right sub-skill, and provide the shared advanced ranking model that every sub-skill references. If intent is ambiguous, ask once before proceeding.
Routing Table
| User intent / input | Sub-skill |
| "audit my channel", channel URL alone, "full YouTube check" | youtube-seo-audit |
| Single video URL, "analyze this video", "why isn't this ranking" | youtube-seo-video |
| "optimize title/description/tags", "rewrite metadata", "improve CTR copy" | youtube-seo-optimize |
| "channel branding", "about page", "banner", "playlists", "channel trailer" | youtube-seo-channel |
| "YouTube keywords", "topic research", "what should I make a video about" | youtube-seo-keywords |
| "thumbnail review", "CTR thumbnail", "is my thumbnail good" | youtube-seo-thumbnail |
| "competitor analysis", "what are [channel] doing", "competing videos" | youtube-seo-competitor |
Advanced Ranking Model
YouTube's recommender is NOT a keyword-match system. It is a multi-surface reinforcement-learning recommender that optimizes for long-term user satisfaction (the "Reinforce" paper, Covington et al. 2016 + DRL updates). Each surface has its own objective:
| Surface | Primary objective | Dominant signal |
| Browse (Home feed) | Session watch time + return rate | CTR-on-impression, persona match, freshness |
| Suggested (sidebar / autoplay) | Next-video watch time | Topical adjacency, session continuation, co-view graph |
| Search | Query satisfaction | Keyword/entity match, APV for that query, click depth |
| Shorts feed | Swipe-through rate + watch loops | Hook in <1s, loopability, audio trend |
| Notifications | Open rate in first hour | Subscriber affinity, bell-on CTR history |
| External | Retention of new viewers | Intro strength, subscribe-from-external rate |
A video can be strong on one surface and dead on others. Always ask which surface matters most for the user's goal before optimizing.
Tier 1 — Watch-time & session signals (dominant)
- CTR by surface (Browse CTR ≠ Search CTR ≠ Suggested CTR)
- APV (Average Percentage Viewed) — the single best retention metric for
videos <20 min. Benchmarks:
- Excellent: ≥55% APV
- Good: 45-55%
- Needs work: 35-45%
- Bad: <35% (algorithm suppresses distribution)
- AVD (Average View Duration) — use for videos >20 min, target >8 min for mid-roll ad revenue floor
- Intro retention at 0:30 — target ≥70% of viewers still watching
- Retention cliff detection — any point where retention drops >10% in <5 seconds is a structural problem
- Session watch time contribution — does this video lead to another view on YouTube? Studio "Suggested videos" + "Browse" outbound CTR proxy this
- Returning viewer rate — % of viewers who come back within 7/28 days
- Relative performance — vs your own channel median and vs niche median for the same length bucket
Tier 2 — Metadata & semantic signals
- Title: 60-70 char sweet spot (mobile cutoff ~56 on small screens, ~70 on desktop). Keyword in first 40 chars for Search; emotional driver first for Browse.
- Description:
- Above-fold (first 150 chars): restates title intent, includes primary keyword, gives a click-for-more reason
- Full body (1,500-4,000 chars): semantic entity coverage (see below), natural density, not stuffed
- Key Moments / chapters: first timestamp MUST be
0:00, ≥3 chapters, each ≥10s, descriptive labels. Triggers Google Search "Key Moments" rich result andVideoObject.hasPart[].Clipschema eligibility. - Links block: grouped, labeled, with FTC disclosure if affiliate
- Hashtags: max 3 meaningful (shown above title); first is strongest
- Tags: de-emphasized in 2020 but still used for typo/spelling disambiguation and topic classification. 5-15, first = exact keyword, total <500 chars.
- Entity/semantic coverage: YouTube uses Knowledge Graph entities (people, brands, places, concepts). Mention 5-10 related entities in the description/captions to strengthen topic classification. Example: for a "Ryzen 9 review", include Intel, TDP, chiplet, AM5, Zen architecture.
- Captions: manually uploaded
.srt/.vttoutrank auto-captions for Search. Translated captions unlock international impressions. - Translated metadata: Custom Channel Translations for top 5 viewer languages typically lift international impressions 20-50%.
- Category: correct primary category
- Audio language tag + default language set correctly
Tier 3 — Thumbnail / pre-click signals
- 1280x720, <2MB, JPG/PNG, 16:9
- Readable at 120px wide (mobile feed) — the binding constraint
- Face + strong emotion lifts CTR ~20-30% in most niches (exceptions: product, gaming, tutorial close-ups)
- ≤4 words text, ideally ≤3, bold sans-serif ≥80pt effective
- SERP differentiation: must pattern-break against the top-10 thumbnails for the target keyword (CLIP-embedding or manual grid check)
- Native A/B test via Studio "Test & Compare" (3 variants, 2-week window)
- No bait-mismatch with title or content — long-term CTR decay if broken
Tier 4 — Engagement & velocity signals
- Like ratio vs channel baseline (not absolute count)
- Comment velocity in first 60 min, creator reply rate
- Pinned comment engagement (replies to pinned)
- Shares, saves-to-playlist, playlist-add events
- End-screen CTR (slots filled; hotspot 60-70% through video)
- Card CTR at attention moments
- Subscribe-from-video rate (per 1,000 views)
- Bell-notification open rate (for subscribed audience)
- First-24h velocity — for trending/topical content this is 60-80% of lifetime distribution; for evergreen, 10-20%
Tier 5 — Channel-level signals
- Topical authority: concentration of topic clusters (YouTube classifies channels by topic IDs inherited from Knowledge Graph)
- Upload cadence consistency: predictable rhythm feeds the Browse surface
- Channel persona profile: who the algorithm believes watches you
- Playlist binge-ability (session chains)
- Cross-video retention (do viewers of video A also finish video B?)
- Subscriber growth slope (more signal than raw count)
- Community tab engagement (pre-upload momentum)
- Verification + monetization status
- Strike / community-guidelines standing
Tier 6 — Technical / safety signals
- Video format: 1080p minimum (4K bonus on supporting devices)
- Audio loudness: target -14 LUFS (YouTube's normalization target). Under -16 LUFS feels quiet and correlates with lower retention.
- Duration: >8 min unlocks mid-roll ads; >10 min is the legacy watch-time optimum; <60s (vertical) goes to Shorts feed
- Made-for-Kids flag: must match content truthfully; incorrect setting disables engagement features and suppresses discovery
- Altered/synthetic content disclosure for AI-generated video/voice
- Copyright claims (Content ID): block/monetize/track status affects revenue share and can cap reach
- Embedding enabled (third-party embed views count)
- Comments enabled with active moderation
Shorts-specific signals
- First 0.5-1.0s hook — swipe-away rate here is the #1 metric
- Loop rate — the video should end where it starts (narratively or visually)
- Vertical 9:16, 1080x1920
- Caption overlay for silent viewing (most Shorts are watched muted)
- Audio trend — use trending audio from the Shorts audio library (boost) OR original audio that can be remixed
- Title: ≤40 chars, emotional hook front-loaded
#Shortsin description or title (no longer required but still de-risks classification)- Length: 15-30s has highest loop rate; 45-60s has highest watch time. Pick based on goal (discovery vs watch time)
Data Sources
First-party only. These skills deliberately avoid third-party analytics tools (VidIQ, TubeBuddy, Ahrefs, SocialBlade, NoxInfluencer, HypeAuditor, etc.) — they rate-limit, change their HTML, or return errors. Every source below is an official Google/YouTube endpoint, a local CLI, or data the user provides directly.
Priority order (degrade gracefully from top to bottom):
| Source | Use | How |
| YouTube Data API v3 | Full snippet, tags, statistics, topicDetails, contentDetails, playerCaptions, commentThreads, search, channels, playlistItems | YOUTUBE_API_KEY env var + scripts/fetch_video.py / scripts/fetch_channel.py |
| YouTube Studio CSV exports (user-provided) | Real CTR, APV, retention curves, traffic sources, audience, impressions — the only source for Tier 1 signals | Ask user to export from Studio → Analytics → Advanced Mode → download CSV |
| yt-dlp | Full metadata, auto + manual captions, chapters, transcript, audio extract, ytsearch: SERP, channel playlists — works without an API key | yt-dlp --dump-json --skip-download URL, yt-dlp "ytsearch50:query" --flat-playlist -J |
| YouTube suggest API | Keyword expansion (no key, no rate limit in practice) | suggestqueries.google.com/complete/search?client=firefox&ds=yt&q={seed} |
| Google Trends (WebFetch) | Trending vs evergreen, seasonality, breakout topics | trends.google.com/trends/api/explore... |
| WebFetch on watch / channel / results page | Public title, view/like counts, upload date, visible description, SERP results — last resort, structure can change | youtube.com/results?search_query=..., youtube.com/@handle |
| Whisper (local or API) | Transcript fallback when captions unavailable | whisper --model base --language en |
| OpenCV + CLIP | Face detection, emotion, thumbnail-similarity vs SERP | scripts/analyze_thumbnail.py |
| FFmpeg / loudnorm | Audio loudness (LUFS), true peak, loudness range | ffmpeg -i IN -af loudnorm=print_format=json -f null - |
| seo-dataforseo MCP (OPTIONAL — only if explicitly available and not erroring) | Extra YouTube SERP positions and volume estimates | serp_youtube_organic_live_advanced, keywords_for_youtube — skip on any error, do not retry |
Data Source Matrix (what you need for what)
| Analysis | Minimum data | Ideal data |
| Metadata score | WebFetch only | API + Studio CSV |
| Retention diagnosis | Studio CSV | Studio CSV + transcript |
| Thumbnail score | Image URL | Image + SERP grid + CLIP embeddings |
| Competitor intel | API + WebFetch | API + yt-dlp transcripts + Studio benchmarks |
| Audio/loudness | yt-dlp audio extract | FFmpeg loudnorm pass |
If critical data is missing, ASK for it before analyzing — do not guess Tier 1 signals.
Niche Benchmarks (APV, CTR, like ratio)
Benchmarks vary. When possible, compute live from top-10 SERP for the target keyword. Use these as fallback medians:
| Niche | CTR (Browse) | APV (long-form) | Like/view ratio |
| Tech review | 4-8% | 40-50% | 3-5% |
| Gaming | 5-10% | 45-55% | 4-6% |
| Education / how-to | 4-7% | 40-50% | 4-6% |
| Vlog / lifestyle | 3-6% | 35-45% | 3-5% |
| Finance / business | 5-9% | 45-55% | 3-5% |
| Music / entertainment | 6-12% | 50-65% | 5-8% |
| Kids (MFK compliant) | 8-15% | 55-70% | N/A (disabled) |
| Shorts (any) | 8-20% | 80-100%+ (loops) | 5-10% |
If the user's numbers are 1.5x median, recommend scaling (more similar content); if <0.7x median, recommend structural change.
Output Conventions (all sub-skills must follow)
- Score card (0-100) with weighted sub-scores
- Issues organized Critical → High → Medium → Low, each with an estimated impact (CTR%, APV%, impressions%)
- Paste-ready artifacts (titles, descriptions, tags, schema) in fenced code blocks
- Rationale block citing which Tier signal each fix targets
- Measurement plan: which Studio metric to watch after the change, over what window, with what success threshold
Error Handling
Fail loud, degrade gracefully, never fabricate. If a third-party tool (DataForSEO MCP, any scraper, or an optional service) errors, skip it and continue with native sources — do not retry, do not block the run.
| Scenario | Action |
| Video private/unlisted | Ask user to make unlisted-shareable or paste raw metadata + Studio CSV |
| No API key AND WebFetch blocked | Fall back to yt-dlp (--dump-json, ytsearch:); if still failing, ask user for a metadata paste — never fabricate tags/views |
| DataForSEO MCP or any optional tool errors | Log it, skip that source, continue with YouTube Data API + yt-dlp |
| yt-dlp fails on a single video | Retry once with --extractor-args "youtube:player_client=web"; on second failure, skip that video and note it |
| API quota exhausted | Switch to yt-dlp + suggest API; report which checks are degraded |
| Age-restricted / region-blocked | Note limitation; analyze what is accessible |
| Channel <10 videos | Focus on channel setup, keyword research, and format selection — not ranking diagnosis |
| Studio CSV not provided but user asks for retention diagnosis | Explicitly refuse to guess; ask for the export |
| MFK channel | Skip engagement/comment analysis (disabled); focus on thumbnail, title, playlist binge |
| User asks for SocialBlade/VidIQ/TubeBuddy/Ahrefs data | Explain these are not used (rate-limit / error-prone); offer the native equivalent (API + yt-dlp) instead |
Other versions6 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 6
- kostja94/marketing-skills★ 1.1ksame name
- AlekseiUL/sprut-agent-kit★ 66same name
- dalroot/agentic-seo★ 23same name
- jsath/claude-skills★ 14same name
- aya-taleb/multimedia-skills★ 1same name
- donatassimkus/claude-ai-skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use local-seo.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
huiferSkilllocal-seo
本地 SEO 分析和优化专家。自动检测项目是否需要本地 SEO,分析 NAP(Name, Address, Phone)一致性、本地关键词优化、Google Business Profile (GBP) 优化和本地结构化数据生成。提供本地商家搜索引擎排名优化建议,包括 NAP 标准化、本地关键词策略、GBP 完整性检查、评论策略、地图嵌入和本地 SEO 审计。
Also in 3 projects that use this
In this repository7 other files it gives its agents.
- youtube-seo-auditSkill
- youtube-seo-channelSkill
- youtube-seo-competitorSkill
- youtube-seo-keywordsSkill
- youtube-seo-optimizeSkill
- youtube-seo-thumbnailSkill
- youtube-seo-videoSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

