---
name: "hashtag_strategy"
description: "Research, build, rotate, and measure hashtag sets per social platform: tiered tag selection, banned-tag safety checks, branded tags, and reach-lift measurement before committing to a set."
metadata: { "includeInPrompt": true }
---

# Hashtag Strategy

## Purpose

Turn hashtags from decoration into a working discovery system. An agent that posts on social media should pick tags on purpose, keep them out of banned lists, rotate them so platforms do not throttle repetition, and measure whether any tag actually pulls reach before it becomes permanent. This skill covers Instagram, TikTok, X, LinkedIn, Threads, Facebook, Bluesky, and Pinterest.

## Workflow

1. **Research the topic tags.** For the post's subject, gather candidate tags from the platform's own search (it shows post volume per tag), competitor posts in the niche, and the account's own analytics. Classify each tag by volume tier:
   - Broad: 500K+ posts. Huge pool, your post sinks fast. 1-3 per set.
   - Mid: 50K-500K posts. The sweet spot, enough searchers to matter without burying you. 3-5 per set.
   - Niche: under 20K posts. You can rank in top posts here and stay for days. 3-5 per set.
   - Brand: your own invented tag (campaign, account name). 1 per set where it fits.
   Skip generic mega-tags (#love, #instagood, #photooftheday) unless the content is literally about that. Aim for 8-12 tags on Instagram; tests consistently show focused sets of 8-12 perform as well or better than 25-30 scattered ones.

2. **Check every tag for banned or restricted status.** Banned lists rotate constantly, so check live, never from memory. See `references/banned-check.md` for the exact check protocol. Never ship a set containing a tag that fails the check. One banned tag in a caption can suppress that post's reach, and repeated use flags the account.

3. **Build the set per platform.** One tag list does not work everywhere. Platform norms live in `references/platforms.md`. Use the `bin/hashtags` CLI to assemble a tiered set from your tag bank: `bin/hashtags build --bank bank.json --platform instagram --count 10`.

4. **Rotate, never repeat.** Do not post the identical tag set twice in a row. Reusing the exact same block signals spam behavior and reduces reach. Keep 3-5 set variants per platform in the bank and cycle through them: `bin/hashtags rotate --platform instagram`.

5. **Measure, then retire.** After each post is live 48-72 hours, record hashtag-driven impressions from the platform's analytics (Instagram Insights: impressions by source, for Creator/Business accounts). Log it: `bin/hashtags log --platform instagram --set <set-id> --impressions <n> --reach <n>`. Change one variable at a time between posts. After 5+ posts, run `bin/hashtags report` and cut tags that consistently contribute nothing (usually about a third of a starting list). A tag earns its place with data, not vibes.

## Output Contract

Given a post topic and a target platform, this skill produces:
- A platform-appropriate hashtag set (count and tier mix per `references/platforms.md`)
- A banned-tag check pass/fail record for each tag used
- A log entry the agent can compare across posts, enabling data-driven rotation

## Operating Rules

1. Every tag in a shipped set must have passed the live banned-check protocol. No exceptions, no "it was fine last month."
2. Relevance beats volume. A tag that does not describe the actual content confuses the algorithm and the audience; cut it even if it is popular.
3. Never use more than the platform's recommended count to "play it safe." Fewer, better tags beat a wall of tags.
4. Branded tags are earned assets: invent one per campaign, promote it for UGC, track usage separately. Do not invent a new branded tag per post.
5. Keep the style rules that ship with any public text: no em dashes, no formulaic AI phrasing, plain direct sentences.
6. When a tag's post volume tier is unknown, treat it as niche until the platform's search confirms the number.
