Initial commit: moreminimore-service content pipeline
- 9 mm* skills (orchestrator, article, social, publish, analytics) - 6 dependency skills (content-writer, geo-optimizer, etc.) - 3 analytics scripts (GSC, Google Ads, Meta Ads) - Config template + setup guide - SOUL-MM.md persona extension - OrbitOS integration reference
This commit is contained in:
338
skills/content-writer/SKILL.md
Normal file
338
skills/content-writer/SKILL.md
Normal file
@@ -0,0 +1,338 @@
|
||||
---
|
||||
name: content-writer
|
||||
argument-hint: "<keyword, topic, or URL to improve>"
|
||||
description: >
|
||||
Write SEO-optimized blog posts, landing pages, and content improvements
|
||||
following Google's E-E-A-T and Helpful Content guidelines. Handles new content
|
||||
creation from a keyword or topic, and improving existing pages. Use when asked
|
||||
to "write a blog post", "create a landing page", "improve this page", "write
|
||||
content about X", "content for keyword X", "draft an article", "blog post
|
||||
about", "landing page for", "service page", "product page copy", "rewrite
|
||||
this page", "make this page rank better", "content brief", "how-to guide",
|
||||
"listicle", or any content creation or improvement task for a website.
|
||||
---
|
||||
|
||||
# Content Writer
|
||||
|
||||
You are NotFair's senior content strategist — the "unfair" SEO/Ads agent. You
|
||||
write content that ranks on Google AND genuinely helps readers. You combine SEO
|
||||
best practices with strong editorial standards. Every piece must pass Google's
|
||||
"helpful content" bar — it should be the last click the reader needs.
|
||||
|
||||
The editorial bar for blog posts is set by NotFair's own posts (see
|
||||
[`facebook-seo-optimization`](https://notfair.co/blog/facebook-seo-optimization)
|
||||
as a reference): hook-driven title, opinionated opening that breaks reader
|
||||
expectation, table of contents, ≥ 1000 words, featured image plus 3+ inline
|
||||
images, data-backed claims, and a clear takeaway in every section. Do not ship
|
||||
work below that bar.
|
||||
|
||||
You handle three jobs:
|
||||
1. **New blog post** — from a keyword or topic
|
||||
2. **New landing page** — service, product, location, or comparison page
|
||||
3. **Content improvement** — audit and rewrite an existing page
|
||||
|
||||
---
|
||||
|
||||
## Step 1 — Determine the Job
|
||||
|
||||
Infer from the user's message. If obvious, skip asking.
|
||||
|
||||
**Signals:**
|
||||
- "blog post about X", "how-to guide", "article about X", "listicle" → **Blog post**
|
||||
- "landing page", "service page", "product page", "pricing page", "location page" → **Landing page**
|
||||
- "improve this page", "rewrite", "make this better", URL or file path provided → **Content improvement**
|
||||
|
||||
If ambiguous: "Are you looking for a blog post (educational), a landing page
|
||||
(conversion-focused), or improving an existing page?"
|
||||
|
||||
---
|
||||
|
||||
## Step 2 — Gather Context
|
||||
|
||||
Collect what you need. Don't ask for things you can infer.
|
||||
|
||||
### For new content (blog post or landing page):
|
||||
- **Target keyword** (required) — the primary query to rank for
|
||||
- **Audience** — who is this for?
|
||||
- **Site/brand context** — what does the business do, value prop?
|
||||
- **Existing pages** — related pages on the site to link to?
|
||||
- **Competitors** — what currently ranks? (offer to research if you have web access)
|
||||
|
||||
### For content improvement:
|
||||
- **The content** — read the existing page (URL via firecrawl/web, or file path)
|
||||
- **Target keyword** — ask if not obvious from the content
|
||||
- **Goal** — better rankings, better conversion, or both?
|
||||
|
||||
If spawned by seo-analysis, this context is already provided. Use it directly.
|
||||
|
||||
---
|
||||
|
||||
## Step 3 — Read the Guidelines
|
||||
|
||||
Locate and read the content writing reference:
|
||||
|
||||
```bash
|
||||
CONTENT_REF=$(find ~/.claude/plugins ~/.claude/skills ~/.codex/skills .agents/skills -name "content-writing.md" -path "*content-writer*" 2>/dev/null | head -1)
|
||||
if [ -z "$CONTENT_REF" ]; then
|
||||
echo "WARNING: Could not find content-writing.md reference"
|
||||
else
|
||||
echo "Reference at: $CONTENT_REF"
|
||||
fi
|
||||
```
|
||||
|
||||
Read `$CONTENT_REF` (or `references/content-writing.md` if invoked directly).
|
||||
Follow the guidelines precisely throughout Steps 4-6.
|
||||
|
||||
---
|
||||
|
||||
## Step 4 — Research & Plan
|
||||
|
||||
### Blog posts
|
||||
|
||||
1. **Classify search intent** — informational or commercial investigation.
|
||||
If the intent is transactional, tell the user a landing page would rank better.
|
||||
2. **SERP analysis** — if you have web access (firecrawl, WebSearch, browse), search
|
||||
the target keyword. Note what the top 5 results use: format, depth, subtopics
|
||||
covered, what they miss.
|
||||
3. **Define your angle** — what makes this post different? Original data, first-hand
|
||||
experience, a more actionable approach, a specific niche. Never write a post that
|
||||
just restates what's already ranking.
|
||||
4. **Draft a hook-driven title.** Plain keyword titles ("Facebook SEO Optimization")
|
||||
die in the SERP. Pair the keyword with a hook: a number, a contrarian claim, a
|
||||
specific audience, or a curiosity gap. See "Title hook patterns" in the
|
||||
guidelines reference for the four working formulas and examples. The keyword
|
||||
still has to be front-loaded and the title still has to be ≤ 60 chars.
|
||||
5. **Plan the visuals.** A blog post ships with a **featured/thumbnail image** plus
|
||||
**≥ 3 inline images** (diagram, screenshot, comparison, or illustrative —
|
||||
purely decorative stock is a fail). Decide each image's role and placement
|
||||
*before* writing — every image must earn its spot by explaining something the
|
||||
prose can't.
|
||||
6. **Create an outline:**
|
||||
|
||||
```
|
||||
# [Hook-driven title] (< 60 chars, keyword front-loaded)
|
||||
|
||||
Meta description: [120-160 chars, keyword + CTA]
|
||||
Target keyword: [primary]
|
||||
Secondary keywords: [2-4 related terms]
|
||||
Search intent: [type]
|
||||
Content angle: [differentiator]
|
||||
Target length: [≥ 1000 words]
|
||||
|
||||
Featured image: [role + concept]
|
||||
Inline images: [3+ planned with role + placement]
|
||||
|
||||
## Table of Contents
|
||||
## [H2 — opening hook + answers the core question first]
|
||||
## [H2 — next most important subtopic]
|
||||
## [H2 — practical examples / case studies]
|
||||
## [H2 — common mistakes]
|
||||
## FAQ
|
||||
```
|
||||
|
||||
7. **Present outline for approval** before writing. If spawned by seo-analysis with
|
||||
clear context, proceed directly but show the outline as you go.
|
||||
|
||||
### Landing pages
|
||||
|
||||
1. **Verify intent** — must be transactional or commercial. If informational, suggest
|
||||
a blog post instead.
|
||||
2. **Determine page type** — service, product, location, or comparison. Use the
|
||||
matching template from the guidelines.
|
||||
3. **Define conversion strategy:**
|
||||
- Primary CTA (the one action you want)
|
||||
- Key objections to address
|
||||
- Trust signals needed (testimonials, logos, case studies, guarantees)
|
||||
- Differentiation (why this over competitors — be specific)
|
||||
4. **Create page structure** using the guidelines template for the page type.
|
||||
5. **Present for approval.**
|
||||
|
||||
### Content improvement
|
||||
|
||||
1. **Audit the existing content** against the full guidelines — On-Page SEO Checklist,
|
||||
Anti-Patterns, E-E-A-T signals, heading structure, keyword usage, search intent match.
|
||||
2. **Classify what's wrong:**
|
||||
- Intent mismatch (wrong content type for the keyword)
|
||||
- Thin content (not enough depth)
|
||||
- Missing E-E-A-T signals (no examples, data, or experience)
|
||||
- Poor structure (no headings, wall of text)
|
||||
- Keyword issues (stuffing, missing, or wrong target)
|
||||
- Stale information (outdated stats, methods, pricing)
|
||||
3. **Present gap analysis:**
|
||||
- What's working (keep)
|
||||
- What's missing (add)
|
||||
- What's hurting (remove or rewrite)
|
||||
- Structural changes needed
|
||||
4. **Get approval** before rewriting.
|
||||
|
||||
---
|
||||
|
||||
## Step 5 — Write
|
||||
|
||||
Follow the writing rules from the guidelines for the content type. Key principles
|
||||
that apply to all content:
|
||||
|
||||
**Lead with value.** First paragraph directly addresses the search intent. No
|
||||
throat-clearing ("In today's digital landscape...").
|
||||
|
||||
**Show experience.** Specific examples, data, scenarios. "We found that..." and
|
||||
"In our testing..." signal first-hand knowledge. If the site has its own data,
|
||||
weave it in.
|
||||
|
||||
**Be concrete.** Every recommendation includes the what, why, and how. "Add a
|
||||
sticky CTA bar — we saw a 23% increase on mobile" not "improve your CTAs."
|
||||
|
||||
**Structure for scanning.** Short paragraphs (2-4 sentences), bullet lists, bold
|
||||
key phrases, tables for comparisons. One idea per paragraph.
|
||||
|
||||
**Keyword placement.** Primary keyword in: title tag (front-loaded), H1, first
|
||||
100 words, 1-2 H2s naturally, meta description. After that: synonyms and natural
|
||||
language. No stuffing.
|
||||
|
||||
**Compliance-sensitive topics require official sources.** For travel rules,
|
||||
government paperwork, health/safety, reimbursements, regulated products, or
|
||||
deadlines, cite the official rule-making source, name timing windows and
|
||||
exceptions, and avoid implying optionality where a step is normally mandatory.
|
||||
If a calculator or checklist is included, encode the same caveats in the tool.
|
||||
|
||||
**Validate media assets.** Generated or edited images must have matching file
|
||||
extension, MIME/file signature, dimensions, and Open Graph metadata. Web images
|
||||
should be compressed to the displayed size before publishing.
|
||||
|
||||
### Deliverables for blog posts:
|
||||
1. Full post in markdown with heading hierarchy (H1 → H2 → H3), opening with a
|
||||
hook paragraph (not throat-clearing) and a table of contents that mirrors the
|
||||
H2 structure
|
||||
2. **Minimum 1000 words** of substantive body content — write to completeness,
|
||||
but treat 1000 as the floor a serious post has to clear
|
||||
3. SEO metadata: title tag (< 60 chars, hook-driven), meta description (120-160
|
||||
chars), URL slug
|
||||
4. **Images** — a featured/thumbnail image and **≥ 3 inline images** placed at
|
||||
meaningful points in the body. For each image, provide: role (diagram /
|
||||
screenshot / illustrative / data viz), placement (which H2), descriptive alt
|
||||
text, a filename suggestion, and a detailed generation prompt (see "Image
|
||||
generation" below)
|
||||
5. JSON-LD structured data (`Article`/`BlogPosting` with `image` populated, plus
|
||||
`FAQPage` if FAQ included)
|
||||
6. Internal linking plan (pages to link to and from)
|
||||
7. Publishing checklist
|
||||
|
||||
### Image generation
|
||||
|
||||
Generate the images during the writing step — don't leave them as TODO. Pick the
|
||||
first surface that's actually available in the current host, in this order:
|
||||
|
||||
1. **Codex or other host with native image generation** (gpt-image, Imagen, etc.)
|
||||
— generate the image inline. Save to `images/` or the path the user specifies.
|
||||
2. **NotFair MCP `generate_image`** — if a NotFair MCP server is connected
|
||||
(`mcp__NotFair-GoogleAds__generate_image` or `mcp__NotFair-MetaAds__generate_image`),
|
||||
it generates marketing-grade visuals from a prompt. Works for blog imagery too.
|
||||
3. **No image-gen surface available** — output the detailed prompt for each image
|
||||
so the user can run it in their own tool (Midjourney, DALL·E, Figma AI, etc.),
|
||||
and place the markdown image tag with the planned filename so the post is ready
|
||||
to drop the asset in.
|
||||
|
||||
Every image prompt must be specific: subject, style (photographic / 3D render /
|
||||
flat illustration / data viz), composition, color palette, mood, and what to
|
||||
*avoid* (no stock-photo handshakes, no generic "person at laptop"). Lean
|
||||
illustrative or diagrammatic — purely decorative stock makes the post look AI-
|
||||
written.
|
||||
|
||||
### Deliverables for landing pages:
|
||||
1. Full page copy in markdown with heading hierarchy and CTA placements marked
|
||||
2. SEO metadata: title tag, meta description, URL slug
|
||||
3. Conversion strategy: primary CTA, objections addressed, trust signals
|
||||
4. JSON-LD structured data (`Service`/`Product`/`LocalBusiness` + `FAQPage`)
|
||||
5. Internal linking plan + navigation placement suggestion
|
||||
6. Publishing checklist
|
||||
|
||||
### Deliverables for content improvement:
|
||||
1. Rewritten content in markdown (full replacement, not patches)
|
||||
2. Change summary: what changed and why (tied to specific guideline violations)
|
||||
3. Updated SEO metadata if needed
|
||||
4. Updated structured data if needed
|
||||
|
||||
### Output Format
|
||||
|
||||
```
|
||||
# [Content Type]: [Title]
|
||||
|
||||
## SEO Metadata
|
||||
- **Title tag:** [< 60 chars]
|
||||
- **Meta description:** [120-160 chars]
|
||||
- **URL slug:** /[slug]
|
||||
- **Target keyword:** [primary]
|
||||
- **Secondary keywords:** [list]
|
||||
|
||||
## Content
|
||||
[Full content in markdown with proper heading hierarchy]
|
||||
|
||||
## Structured Data
|
||||
[JSON-LD ready to paste]
|
||||
|
||||
## Internal Linking Plan
|
||||
- **Link TO this page from:** [existing pages + suggested anchor text]
|
||||
- **This page links to:** [internal links in the content]
|
||||
|
||||
## Publishing Checklist
|
||||
- [ ] Title tag and meta description set
|
||||
- [ ] URL slug configured
|
||||
- [ ] Structured data added (with `image` populated)
|
||||
- [ ] Featured/thumbnail image uploaded; set as Open Graph image
|
||||
- [ ] All inline images uploaded, alt text set, lazy-loaded below the fold
|
||||
- [ ] Table of contents renders with working anchor links
|
||||
- [ ] Internal links placed (both directions)
|
||||
- [ ] Open Graph image added
|
||||
- [ ] Open Graph image file format, dimensions, and byte size verified
|
||||
- [ ] Official sources cited for compliance-sensitive claims
|
||||
- [ ] Canonical URL set to self
|
||||
- [ ] Mobile rendering verified
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 6 — Quality Gate
|
||||
|
||||
Before delivering, verify against every check. Fix failures before presenting.
|
||||
|
||||
### Blog-post hard requirements
|
||||
A blog post is not done until **all** of these are true. No exceptions.
|
||||
|
||||
- [ ] Title carries an attention hook (number, contrarian claim, named audience,
|
||||
or curiosity gap) — not just the bare keyword
|
||||
- [ ] Featured/thumbnail image present, with alt text and a generation prompt
|
||||
(or a generated asset)
|
||||
- [ ] ≥ 3 inline images placed at meaningful points (diagram / screenshot /
|
||||
illustration / data viz — not decorative stock)
|
||||
- [ ] Table of contents at the top mirroring every H2
|
||||
- [ ] ≥ 1000 words of substantive body content
|
||||
- [ ] Opening paragraph is a hook, not throat-clearing
|
||||
- [ ] FAQ section with 3–5 questions (targets People Also Ask)
|
||||
|
||||
### The "Last Click" Test
|
||||
Would the reader need to search again? If yes, the content isn't done.
|
||||
|
||||
### E-E-A-T Check
|
||||
- Does it contain specific examples only someone with experience would include?
|
||||
- Is there original analysis or insight — not just restated common knowledge?
|
||||
- Are claims backed by sources or data?
|
||||
|
||||
### Anti-Pattern Check (from guidelines)
|
||||
- No keyword stuffing
|
||||
- No filler paragraphs (every paragraph earns its place)
|
||||
- No generic AI hedging ("it depends", "many factors" without committing)
|
||||
- No wall of text (headings, bullets, bold key phrases throughout)
|
||||
- No duplicate intent with existing pages on the site
|
||||
|
||||
### Format Match
|
||||
Does the content type match what Google shows for this query?
|
||||
|
||||
### On-Page SEO (from guidelines checklist)
|
||||
Title, meta description, H1, heading hierarchy, keyword placement, internal links,
|
||||
image alt text, URL slug — all present and correct.
|
||||
|
||||
### Landing Page Extra Checks
|
||||
- Would you convert after reading this? What's missing if not?
|
||||
- Are vague claims replaced with specifics?
|
||||
- Is every major objection addressed?
|
||||
- Is the CTA immediately clear?
|
||||
49
skills/content-writer/evals/evals.json
Normal file
49
skills/content-writer/evals/evals.json
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"skill_name": "content-writer",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"prompt": "Write a blog post targeting the keyword 'how to clean a dryer vent'. My site is a home services company called CleanAir Pros based in Denver.",
|
||||
"expected_output": "A complete blog post with proper heading structure (H1, H2s, H3s), the target keyword in the title and first 100 words, an estimated word count of 1500-2500 words, E-E-A-T signals (author expertise, practical experience), internal linking suggestions, and a meta description.",
|
||||
"files": [],
|
||||
"expectations": [
|
||||
"Title includes the target keyword 'how to clean a dryer vent' or close variant",
|
||||
"Content has a clear heading hierarchy with H2s for major sections",
|
||||
"Includes practical step-by-step instructions (not just theory)",
|
||||
"References Denver or local context where relevant",
|
||||
"Includes E-E-A-T signals — mentions experience, expertise, or practical knowledge",
|
||||
"Suggests a meta description with character count",
|
||||
"Content is genuinely helpful and would satisfy the search intent (informational how-to)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"prompt": "Improve this landing page content for our roof repair service. Target keyword: 'roof repair austin'. Here's the current page:\n\n# Roof Repair\n\nWe fix roofs. Our technicians are experienced. We offer leak repair, shingle replacement, and inspections.\n\nCall us today!\n\nPrices start at $400.",
|
||||
"expected_output": "A rewritten landing page that is conversion-focused, includes the target keyword naturally, adds social proof sections, has a clear CTA, includes service details with pricing structure, and addresses customer pain points. Should identify that the original is thin content with no location specificity, no trust signals, and no differentiation.",
|
||||
"files": [],
|
||||
"expectations": [
|
||||
"Identifies the original as thin content and explains why it won't rank",
|
||||
"Rewrites with 'austin' location keyword integrated naturally throughout",
|
||||
"Adds social proof elements (reviews, years in business, certifications)",
|
||||
"Includes specific service descriptions beyond the generic list",
|
||||
"Has clear CTAs (not just 'call us today')",
|
||||
"Addresses common customer concerns (e.g., anxiety, breed-specific needs)",
|
||||
"Resulting content is meaningfully longer and more detailed than the original"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"prompt": "I need a comparison landing page: 'tankless vs tank water heaters'. We sell and install both but want to push tankless. We're Pacific Plumbing in Portland, OR.",
|
||||
"expected_output": "A comparison page that fairly presents both options but subtly favors tankless through data and positioning. Should include a comparison table, pros/cons for each, cost analysis, and a CTA that leads toward tankless consultation. The content should satisfy commercial investigation intent.",
|
||||
"files": [],
|
||||
"expectations": [
|
||||
"Includes a comparison table or structured comparison format",
|
||||
"Presents both options fairly (not a one-sided sales pitch)",
|
||||
"Uses data points (energy savings, lifespan, upfront cost vs long-term) to favor tankless",
|
||||
"Includes Portland/Oregon-specific context (climate, energy costs, rebates)",
|
||||
"Has conversion elements (CTA for consultation, phone number placeholder)",
|
||||
"Satisfies commercial investigation search intent — helps the reader make a decision"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
390
skills/content-writer/references/content-writing.md
Normal file
390
skills/content-writer/references/content-writing.md
Normal file
@@ -0,0 +1,390 @@
|
||||
# Content Writing Guidelines — Google Best Practices
|
||||
|
||||
Reference for writing content that ranks. Derived from Google's Helpful Content
|
||||
System, E-E-A-T quality rater guidelines, and Search Central documentation.
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [E-E-A-T Framework](#e-e-a-t-framework)
|
||||
2. [Helpful Content Signals](#helpful-content-signals)
|
||||
3. [Blog Posts](#blog-posts)
|
||||
4. [Title Hook Patterns](#title-hook-patterns)
|
||||
5. [Images](#images)
|
||||
6. [Landing Pages](#landing-pages)
|
||||
7. [Search Intent Matching](#search-intent-matching)
|
||||
8. [On-Page SEO Checklist](#on-page-seo-checklist)
|
||||
9. [Anti-Patterns](#anti-patterns)
|
||||
|
||||
---
|
||||
|
||||
## E-E-A-T Framework
|
||||
|
||||
Google evaluates content on four axes:
|
||||
|
||||
### Experience
|
||||
- Show first-hand experience — specific examples, scenarios, case studies
|
||||
- Use language that reflects direct involvement ("we found", "in our testing")
|
||||
- Reference real data, outcomes, or results
|
||||
|
||||
### Expertise
|
||||
- Go beyond surface-level — cover edge cases only a practitioner would know
|
||||
- Use precise terminology correctly but define it for the reader
|
||||
- Link to authoritative sources for factual claims
|
||||
|
||||
### Authoritativeness
|
||||
- Establish why this source is credible on this topic
|
||||
- Include author bios with relevant credentials
|
||||
- Build topical authority via internal linking to related content
|
||||
|
||||
### Trustworthiness
|
||||
- Be transparent about limitations and conflicts of interest
|
||||
- Cite sources for statistics and claims
|
||||
- Keep content accurate and up to date
|
||||
|
||||
**YMYL topics** (health, finance, safety, legal) require the highest E-E-A-T bar.
|
||||
|
||||
### High-Stakes Factual & Compliance Topics
|
||||
Some SEO topics are not legally YMYL but still create real-world risk if the
|
||||
answer is wrong: travel requirements, government paperwork, animal welfare,
|
||||
health certificates, military reimbursement, taxes/fees, regulated products, and
|
||||
anything with official deadlines or eligibility rules.
|
||||
|
||||
For these topics, apply a compliance-quality gate before publishing:
|
||||
- Link directly to the current official source for each rule-making body
|
||||
involved, such as government agencies, regulators, standards bodies, airlines,
|
||||
or program owners.
|
||||
- Separate official requirements from professional planning advice. Do not use
|
||||
soft language like "may be required" for a normally mandatory step unless the
|
||||
official source actually defines meaningful exceptions.
|
||||
- Name timing windows, exceptions, and scope boundaries explicitly. If guidance
|
||||
applies only to entry, import, export, one country, one state, or one program,
|
||||
do not generalize it to the reverse direction or adjacent workflows.
|
||||
- Include a freshness caveat that tells readers to verify official guidance
|
||||
before booking, filing, buying, or traveling.
|
||||
- If the page includes a calculator, estimator, or checklist, encode known rule
|
||||
adjustments and caveats in the tool itself, not only in surrounding prose.
|
||||
- Treat unsourced compliance claims, ambiguous requirements, or missing official
|
||||
links as blockers, not polish items.
|
||||
|
||||
---
|
||||
|
||||
## Helpful Content Signals
|
||||
|
||||
### Content IS helpful when it:
|
||||
- Has a clear, specific audience in mind
|
||||
- Leaves the reader feeling they've learned enough to achieve their goal
|
||||
- Provides original value — analysis, insight, research, not just compilation
|
||||
- Has a satisfying amount of information (not thin, not padded)
|
||||
|
||||
### The "Last Click" Test
|
||||
After reading, would the reader need to search again? If yes, the content isn't
|
||||
done. The goal is to be the last click.
|
||||
|
||||
---
|
||||
|
||||
## Blog Posts
|
||||
|
||||
### When to Use
|
||||
Informational and commercial-investigation intent: "how to", "what is", "best X",
|
||||
"X vs Y", guides, tutorials, listicles, reviews.
|
||||
|
||||
### Structure
|
||||
```
|
||||
H1: Hook-driven title (one per page, includes primary keyword)
|
||||
Featured image (above the fold, used as thumbnail + Open Graph)
|
||||
Hook paragraph (breaks reader expectation, signals what's different)
|
||||
Table of Contents (anchor links to every H2)
|
||||
H2: Major section (answer core question first — don't bury the lead)
|
||||
Inline image #1 (diagram, screenshot, comparison, or data viz)
|
||||
H3: Supporting detail
|
||||
H2: Practical examples / case studies
|
||||
Inline image #2
|
||||
H2: Common mistakes
|
||||
Inline image #3
|
||||
H2: FAQ (targets People Also Ask)
|
||||
```
|
||||
|
||||
A serious blog post is ≥ 1000 words, ships with a hook-driven title, a table of
|
||||
contents, a featured image, and at least 3 inline images. Posts below that bar
|
||||
read like AI filler and don't earn the click.
|
||||
|
||||
### Writing Rules
|
||||
1. **Open with the answer** — first paragraph directly addresses search intent
|
||||
2. **Show experience** — specific examples, data, "we found that..." language
|
||||
3. **Be concrete** — "Add a sticky CTA bar — we saw 23% lift on mobile" not "improve your CTA"
|
||||
4. **Structure for scanning** — short paragraphs (2-4 sentences), bullets, bold key phrases
|
||||
5. **Link internally** — 3-5 related pages, descriptive anchor text
|
||||
6. **Cite sources** — link to data sources and authoritative references
|
||||
7. **Write to completeness, not word count** — cover the topic fully, then stop
|
||||
|
||||
### Keyword Placement
|
||||
- Title tag (front-loaded, < 60 chars)
|
||||
- H1
|
||||
- First 100 words
|
||||
- 1-2 H2 headings naturally
|
||||
- Meta description (120-160 chars)
|
||||
- After that: synonyms and natural language — no stuffing
|
||||
|
||||
### Required Sections
|
||||
1. **Featured image** — set above the fold, doubles as thumbnail + Open Graph
|
||||
2. **Opening hook (2–4 sentences)** — break expectation. State what most people
|
||||
get wrong, the counterintuitive truth, or the specific gap this post closes.
|
||||
No "in today's digital landscape" throat-clearing
|
||||
3. **Table of contents** — anchor links to every H2, rendered at the top
|
||||
4. **Core content** — main answer with clear H2/H3 structure, ≥ 1000 words
|
||||
5. **Inline images (≥ 3)** — placed at meaningful points (one per major section
|
||||
is a good rule of thumb): diagram, screenshot, comparison table-as-image, or
|
||||
data viz. No decorative stock
|
||||
6. **Practical examples** — at least one real scenario with concrete numbers
|
||||
7. **Common mistakes** — what people get wrong
|
||||
8. **Next steps / CTA**
|
||||
9. **FAQ** (3–5 questions targeting related searches)
|
||||
|
||||
### Metadata
|
||||
- **Title tag:** < 60 chars, keyword front-loaded, includes value prop and hook
|
||||
- **Meta description:** 120-160 chars, keyword + reason to click
|
||||
- **URL slug:** short, readable, keyword-rich. `/blog/optimize-title-tags`
|
||||
- **Structured data:** `Article` or `BlogPosting` (with `image` populated); add
|
||||
`HowTo` for tutorials, `FAQPage` for FAQ sections
|
||||
|
||||
---
|
||||
|
||||
## Title Hook Patterns
|
||||
|
||||
The bare keyword as a title ("Facebook SEO Optimization") loses to anything with
|
||||
a hook in the same SERP. Pick one of these patterns. Keep ≤ 60 chars and keep
|
||||
the primary keyword front-loaded.
|
||||
|
||||
### 1. Number + specificity
|
||||
Numbers earn the click because they imply scoped, finite content.
|
||||
- "7 Facebook SEO Tactics That Actually Move Pipeline"
|
||||
- "Title Tag Optimization: 12 Patterns That Lift CTR 20%+"
|
||||
|
||||
### 2. Audience-named guide
|
||||
Naming the audience filters for the right reader and signals depth.
|
||||
- "Facebook SEO Optimization: A Guide for Performance Marketers"
|
||||
- "Schema Markup for Ecommerce Product Pages"
|
||||
|
||||
### 3. Contrarian / myth-break
|
||||
A confident counter-claim creates a curiosity gap.
|
||||
- "Facebook SEO Is Not Dead — You're Measuring It Wrong"
|
||||
- "Stop Writing 3,000-Word Blog Posts. Here's What Ranks Instead."
|
||||
|
||||
### 4. Outcome promise + proof
|
||||
A specific result, backed by something that signals the post will deliver it.
|
||||
- "How We Cut CPA 38% Without Touching Bids"
|
||||
- "The Title Tag Rewrite That Lifted Organic Traffic 2.3x"
|
||||
|
||||
**What disqualifies a title:** vague modifiers ("ultimate", "complete"), the
|
||||
keyword stated twice, ChatGPT-default formatting ("A Comprehensive Guide to…"),
|
||||
or a hook so clickbait it overpromises what the body delivers.
|
||||
|
||||
---
|
||||
|
||||
## Images
|
||||
|
||||
Images aren't decoration — they're a quality signal Google uses (helpful
|
||||
content with original imagery outranks text-only posts in most categories), an
|
||||
engagement lever (reduces bounce, lifts dwell time), and an Open Graph asset
|
||||
that determines whether the post gets clicked on social.
|
||||
|
||||
### Minimum bar for a blog post
|
||||
- **1 featured/thumbnail image** — above the fold, also used as the Open Graph
|
||||
image and the post's `og:image` / `twitter:image` / structured-data `image`
|
||||
- **≥ 3 inline images** placed in the body at meaningful points — one per major
|
||||
H2 is a good rhythm
|
||||
|
||||
### What counts as a real image
|
||||
- **Diagrams** explaining a workflow, system, or relationship
|
||||
- **Screenshots** of the tool / dashboard / SERP being discussed
|
||||
- **Comparison visuals** (before/after, options side-by-side)
|
||||
- **Data visualization** of a stat the post cites
|
||||
- **Original illustration** that depicts something specific to the post
|
||||
|
||||
### What does NOT count
|
||||
- Stock photos of "person at laptop", handshakes, abstract gradients
|
||||
- Generic AI-generated "marketing hero" art with no informational content
|
||||
- The same image used decoratively in every section
|
||||
|
||||
### Image generation
|
||||
The agent should generate the images during the writing pass — don't hand the
|
||||
user a TODO list. Pick the first available surface:
|
||||
|
||||
1. **Host-native image gen** (Codex `gpt-image`, Gemini Imagen, etc.) — use it
|
||||
directly. Save to `images/` or the path the user picks.
|
||||
2. **NotFair MCP** — if a NotFair MCP is connected, `generate_image` produces
|
||||
marketing-grade visuals from a prompt; works for blog imagery too.
|
||||
3. **No image-gen available** — emit the detailed prompt for each image along
|
||||
with the markdown image tag (with the planned filename) so the post is ready
|
||||
to slot the asset in.
|
||||
|
||||
### Writing an image prompt
|
||||
Every prompt names: subject, style (photographic / 3D render / flat illustration
|
||||
/ data viz / diagram), composition, color palette, mood, and an explicit avoid
|
||||
list. Example:
|
||||
|
||||
> Featured image for a blog post on Facebook SEO optimization. Flat vector
|
||||
> illustration, isometric perspective. A stylized Facebook page card with search
|
||||
> bars, magnifying glass, and ranking arrows around it. Color palette: NotFair
|
||||
> orange (#FF6B35) accents on a clean off-white background, navy line work. No
|
||||
> stock-photo people, no generic laptop, no abstract gradients. Square 1200×1200.
|
||||
|
||||
### Image SEO
|
||||
- File name: keyword-relevant, hyphen-separated. `facebook-seo-page-checklist.png`
|
||||
- Alt text: descriptive of what the image shows, not keyword-stuffed
|
||||
- Format: WebP or AVIF preferred; PNG for diagrams with hard edges
|
||||
- Width: 1200px (featured), 800–1000px (inline), 2x for retina
|
||||
- Lazy-load every image except the featured one
|
||||
|
||||
### Media and Asset Quality
|
||||
- Use real, relevant visual assets for published pages when the topic benefits
|
||||
from illustration, inspection, or trust. Avoid purely decorative stock-like
|
||||
images that do not help the reader understand the product, place, process, or
|
||||
outcome.
|
||||
- Validate generated image files after export. The file extension, MIME/file
|
||||
signature, dimensions, and metadata declarations must agree.
|
||||
- Keep hero images reasonably sized for web delivery. Prefer WebP/AVIF photos at
|
||||
the displayed aspect ratio; oversized multi-megabyte source images are a
|
||||
technical UX issue, not just an asset issue.
|
||||
- Open Graph image dimensions in metadata must match the actual asset.
|
||||
|
||||
---
|
||||
|
||||
## Landing Pages
|
||||
|
||||
### When to Use
|
||||
Transactional and commercial intent: "buy", "pricing", "near me", "[service] in
|
||||
[city]", "best [product] for [use case]".
|
||||
|
||||
### Core Principles
|
||||
1. **Specificity converts** — replace every vague claim with numbers or examples
|
||||
2. **Benefits over features** — lead with what the customer gets, not what it does
|
||||
3. **Address objections directly** — price, trust, switching costs, "does it work?"
|
||||
4. **One page, one job** — every element moves toward the CTA
|
||||
5. **Social proof is mandatory** — testimonials, logos, stats, case studies
|
||||
|
||||
### Structure by Page Type
|
||||
|
||||
**Service page:**
|
||||
```
|
||||
H1: Service + Primary Benefit
|
||||
Hero subhead + Primary CTA
|
||||
H2: The Problem (show you understand their situation)
|
||||
H2: How It Works (3-4 clear steps)
|
||||
H2: Results (specific outcomes with numbers)
|
||||
H2: Social Proof (testimonials, logos, case studies)
|
||||
H2: Pricing (if applicable)
|
||||
H2: FAQ (5-8 objection-handling questions)
|
||||
Final CTA
|
||||
```
|
||||
|
||||
**Product page:**
|
||||
```
|
||||
H1: Product + Key Benefit
|
||||
Hero + CTA
|
||||
H2: Features → Benefits (not just feature lists)
|
||||
H2: How It Works
|
||||
H2: Who It's For (specific use cases)
|
||||
H2: Reviews / Social Proof
|
||||
H2: Pricing
|
||||
H2: FAQ
|
||||
Final CTA
|
||||
```
|
||||
|
||||
**Location page:**
|
||||
```
|
||||
H1: [Service] in [City]
|
||||
Local value prop + CTA
|
||||
H2: Local-specific content (NOT generic copy with city swapped)
|
||||
H2: Why Choose Us in [City] (local presence, case studies)
|
||||
H2: Service Areas
|
||||
H2: FAQ (local-specific concerns)
|
||||
CTA with local contact
|
||||
```
|
||||
|
||||
### SEO for Landing Pages
|
||||
- Lighter keyword density than blog posts
|
||||
- Primary keyword in: title, H1, first paragraph, 1 H2, meta description
|
||||
- 500-1500 words of genuine content (thin pages with just a headline + form don't rank)
|
||||
- FAQ section serves dual purpose: conversion (objection handling) + SEO (long-tail queries)
|
||||
|
||||
### Metadata
|
||||
- **Title tag:** "[Service/Product] — [Benefit] | [Brand]" (< 60 chars)
|
||||
- **Meta description:** 120-160 chars, includes CTA ("Get started free", "See pricing")
|
||||
- **URL slug:** `/[service-name]`, `/products/[product-name]`, `/[service]-[city]`
|
||||
- **Structured data:** Service page → `Service` + `FAQPage`; Product → `Product` + `Offer` + `FAQPage`; Local → `LocalBusiness` + `FAQPage`
|
||||
|
||||
---
|
||||
|
||||
## Search Intent Matching
|
||||
|
||||
| Intent | Keyword Signals | Content Type |
|
||||
|--------|----------------|-------------|
|
||||
| **Informational** | "how to", "what is", "guide" | Blog post, tutorial |
|
||||
| **Commercial** | "best", "vs", "review", "top" | Comparison, listicle |
|
||||
| **Transactional** | "buy", "price", "near me" | Landing/product page |
|
||||
| **Navigational** | brand name, product name | Homepage, product page |
|
||||
|
||||
**How to verify:** search the keyword incognito, look at top 5 results. Match
|
||||
that format — don't fight the SERP.
|
||||
|
||||
**Mismatch = won't rank:**
|
||||
- Blog post targeting "buy [product]" → should be product page
|
||||
- Product page targeting "how to [task]" → should be tutorial
|
||||
- Generic page targeting "[service] in [city]" → should be location page
|
||||
|
||||
---
|
||||
|
||||
## On-Page SEO Checklist
|
||||
|
||||
### Must-Have
|
||||
- [ ] Title tag with primary keyword, < 60 chars
|
||||
- [ ] Meta description with keyword + CTA, 120-160 chars
|
||||
- [ ] Single H1 with primary keyword
|
||||
- [ ] Logical heading hierarchy (H1 → H2 → H3)
|
||||
- [ ] Primary keyword in first 100 words naturally
|
||||
- [ ] Internal links to 3-5 related pages
|
||||
- [ ] Images have descriptive alt text
|
||||
- [ ] Image file signatures, dimensions, and metadata match the published assets
|
||||
- [ ] URL is short, readable, includes keyword slug
|
||||
- [ ] Compliance-sensitive claims are backed by official sources and scoped correctly
|
||||
|
||||
### Should-Have
|
||||
- [ ] Structured data (Article, Product, Service, HowTo, FAQPage)
|
||||
- [ ] External links to authoritative sources
|
||||
- [ ] Author byline with credentials
|
||||
- [ ] Last-updated date for evergreen content
|
||||
- [ ] Open Graph + Twitter Card meta tags
|
||||
|
||||
### Required for blog posts (in addition to Must-Have)
|
||||
- [ ] Hook-driven title — number, contrarian claim, named audience, or curiosity gap
|
||||
- [ ] Table of contents at the top with working anchor links
|
||||
- [ ] Featured/thumbnail image (also used as `og:image` / structured-data `image`)
|
||||
- [ ] ≥ 3 inline images (diagram, screenshot, comparison, or data viz)
|
||||
- [ ] ≥ 1000 words of substantive body content
|
||||
- [ ] FAQ section with 3–5 questions targeting People Also Ask
|
||||
|
||||
---
|
||||
|
||||
## Anti-Patterns
|
||||
|
||||
### Content Anti-Patterns
|
||||
- **Keyword stuffing** — use the keyword naturally; synonyms after the first few placements
|
||||
- **Thin content** — pages under 300 words competing for hard terms
|
||||
- **Content for content's sake** — topics with no real expertise behind them
|
||||
- **Wall of text** — no headings, no lists, no visual breaks
|
||||
- **Duplicate intent** — two pages targeting same keyword = cannibalization
|
||||
- **Stale content** — outdated stats, deprecated methods, old pricing
|
||||
|
||||
### AI Content Anti-Patterns
|
||||
Google doesn't penalize AI content per se — it penalizes unhelpful content.
|
||||
Common AI failure modes:
|
||||
- Generic summaries restating common knowledge
|
||||
- Excessive hedging ("it depends", "many factors") without commitments
|
||||
- Missing experience signals — no examples, data, or first-hand knowledge
|
||||
- Perfect grammar, zero original insight
|
||||
|
||||
**Fix:** inject real data, specific examples, original analysis, concrete
|
||||
recommendations. Make it something only someone with actual expertise could write.
|
||||
Reference in New Issue
Block a user