$npx -y skills add Affitor/affiliate-skills --skill affiliate-blog-builderWrite SEO-optimized affiliate blog articles, product reviews, comparison posts, listicles, and how-to guides. Triggers on: "write a blog post about", "review of [product]", "best [category] article", "comparison blog", "affiliate blog", "SEO article", "write a review", "product r
| 1 | # Affiliate Blog Builder |
| 2 | |
| 3 | Write full SEO-optimized blog articles that rank on Google and drive passive affiliate revenue. Supports four formats: product review, head-to-head comparison, best-of listicle, and how-to guide. Each article includes keyword strategy, structured headings, comparison tables, CTAs, FAQ schema, and FTC-compliant disclosure. |
| 4 | |
| 5 | ## Stage |
| 6 | |
| 7 | S3: Blog — The highest-value content type in the affiliate funnel. Blog articles rank on Google, drive organic traffic for months/years, and convert at higher rates than social posts because readers have high purchase intent. |
| 8 | |
| 9 | ## When to Use |
| 10 | |
| 11 | - User wants to write a blog post reviewing an affiliate product |
| 12 | - User wants a comparison article (Product A vs Product B) |
| 13 | - User wants a "best of" listicle for a product category |
| 14 | - User wants a how-to tutorial that naturally promotes an affiliate product |
| 15 | - User has a product from S1 (affiliate-program-search) and wants to create long-form content |
| 16 | - User says anything like "write a blog", "SEO article", "product review post", "roundup post" |
| 17 | |
| 18 | ## Input Schema |
| 19 | |
| 20 | ```yaml |
| 21 | product: # REQUIRED — the affiliate product to feature |
| 22 | name: string # Product name (e.g., "HeyGen") |
| 23 | description: string # What it does |
| 24 | reward_value: string # Commission (e.g., "30% recurring") |
| 25 | url: string # Affiliate link URL |
| 26 | reward_type: string # "recurring" | "one-time" | "tiered" |
| 27 | cookie_days: number # Cookie duration |
| 28 | tags: string[] # e.g., ["ai", "video", "saas"] |
| 29 | |
| 30 | format: string # OPTIONAL — "review" | "comparison" | "listicle" | "how-to" |
| 31 | # Default: "listicle" (highest traffic potential) |
| 32 | |
| 33 | compare_with: object[] # OPTIONAL — competitors for comparison/listicle formats |
| 34 | - name: string # Competitor name |
| 35 | description: string # Brief description |
| 36 | url: string # URL (non-affiliate OK) |
| 37 | pricing: string # Starting price |
| 38 | |
| 39 | target_keyword: string # OPTIONAL — primary SEO keyword to target |
| 40 | # Default: auto-generated from product name + category |
| 41 | |
| 42 | blog_platform: string # OPTIONAL — "wordpress" | "ghost" | "hugo" | "astro" | "webflow" | "markdown" |
| 43 | # Default: "markdown" (universal) |
| 44 | |
| 45 | tone: string # OPTIONAL — "professional" | "conversational" | "technical" |
| 46 | # Default: "conversational" |
| 47 | |
| 48 | word_count_target: number # OPTIONAL — override default word count for the format |
| 49 | ``` |
| 50 | |
| 51 | **Chaining from S1**: If `affiliate-program-search` was run earlier in the conversation, automatically pick up `recommended_program` from its output as the `product` input. The field mapping: |
| 52 | - `recommended_program.name` → `product.name` |
| 53 | - `recommended_program.description` → `product.description` |
| 54 | - `recommended_program.reward_value` → `product.reward_value` |
| 55 | - `recommended_program.url` → `product.url` |
| 56 | - `recommended_program.reward_type` → `product.reward_type` |
| 57 | - `recommended_program.cookie_days` → `product.cookie_days` |
| 58 | - `recommended_program.tags` → `product.tags` |
| 59 | |
| 60 | If the user says "now write a blog about it" after running S1 — use the recommended program. No need to ask again. |
| 61 | |
| 62 | ## Workflow |
| 63 | |
| 64 | ### Step 1: Determine Format |
| 65 | |
| 66 | Choose the article format based on user request or defaults: |
| 67 | |
| 68 | | Signal | Format | |
| 69 | |---|---| |
| 70 | | User says "review", "my experience with" | `review` | |
| 71 | | User mentions two+ products, "vs", "compare" | `comparison` | |
| 72 | | User says "best", "top", "roundup", numbers | `listicle` | |
| 73 | | User says "how to", "tutorial", "guide", "step by step" | `how-to` | |
| 74 | | No clear signal | `listicle` (default — highest traffic potential) | |
| 75 | |
| 76 | If `format = comparison` and `compare_with` is empty or has only 1 product: |
| 77 | - Use `web_search` to find 2-3 top competitors in the same category |
| 78 | - Search query: `"best alternatives to [product.name]" OR "[product.name] vs" site:g2.com OR site:capterra.com` |
| 79 | |
| 80 | If `format = listicle` and `compare_with` is empty: |
| 81 | - Use `web_search` to find 4-6 products in the same category |
| 82 | - Search query: `"best [product category] tools [year]"` |
| 83 | |
| 84 | ### Step 2: SEO Framework |
| 85 | |
| 86 | Read `references/seo-checklist.md` for the complete SEO guidelines. The |