---
sharksapi_version: p-cdfe1725a3
name: blog-writer
description: Write a comprehensive SEO-optimized blog article, research the topic online and via SharksAPI tools (GA4, GSC, WordPress), add SILO internal links to service pages and related posts, add styled comparison tables, JSON-LD schema (Article + FAQPage), featured image, proofread, and publish as WordPress draft.
allowed-tools: [get_gsc_top_queries, get_gsc_top_pages, list_wp_posts, create_wp_post, analyze_wp_seo, scrape_website, search_web_mentions, get_ga4, get_ga4_channels]
metadata:
  triggers: [write blog post, blog article, create blog, write post, blogipostitus, kirjuta blogi, tee blogi, blog about, write about, publish article]
---

# Blog Writer

Expert blog writer and digital marketing specialist. Writes professional, well-researched,
SEO-optimized blog articles with SILO internal linking, styled comparison tables, schema
markup, featured image, proofreading, and WordPress publishing.

## Process Overview

1. **Research** - search the topic online and via SharksAPI tools
2. **Analyze** - find best keywords, related posts, service pages, check topic uniqueness
3. **Write** - compose full article with schema, SILO links, and styled tables
4. **Image** - generate or source a featured image
5. **Proofread** - review grammar, spelling, style
6. **Publish** - post to WordPress as draft

---

## 1. RESEARCH AND DATA COLLECTION

### 1a. Internet Research (run in parallel)

Search the topic from these sources using web search tools.

**Search in English** - there's significantly more material, statistics, and studies. Local-language search misses a lot of valuable data.

- **YouTube** - search `[topic] tutorial 2024 2025` and `[topic] tips for small business` - see what questions are covered
- **Reddit** - search `reddit.com [topic] marketing tips` - find common problems and questions
- **English blogs and studies** - search `[topic] statistics 2024`, `[topic] best practices`, `[topic] guide` - HubSpot, Neil Patel, Moz, Search Engine Journal etc.
- **Google search results** - look at "People also ask" questions for the keyword (in English)

Use findings in the article in the project's language - translate and adapt to local context, but data and sources come from English materials.

**What to look for:**
- What questions do people have? (for FAQ section)
- What misconceptions are common?
- What are the latest trends and statistics?
- Specific numbers and studies (ROI %, growth %, with source)

### 1b. SharksAPI Data (run in parallel)

**GSC top queries** - find keywords the topic should rank for:
```
get_gsc_top_queries (last 90 days, limit: 30)
```

**Existing blog posts** - for SILO links AND to avoid duplicate topics:
```
list_wp_posts (status: "publish", per_page: 50)
```
Filter posts related to the topic - use these for in-article links.
**Important:** Check that the chosen topic has not already been covered. If a similar article exists, choose a different angle or subtopic.

**WordPress SEO analysis** (if available):
```
analyze_wp_seo
```

**GA4 traffic data** - understand what content performs:
```
get_ga4_channels (last 30 days)
get_ga4 (aggregate: true)
```

---

## 2. KEYWORD AND SILO STRATEGY

### Primary Keyword Selection
Choose the article's primary keyword based on:
- User-provided topic
- GSC data (search volume, low competition)
- Long-tail keywords people actually search for

### SILO Service Pages

The article **must** link to relevant service pages on the project's website. Use `scrape_website` to find exact URLs:

```
scrape_website (url: "{project_domain}")
```

Scan the homepage navigation to find service page URLs. Typical patterns:
- /services/, /seo/, /google-ads/, /social-media/, /web-development/

### SILO Link Rule

Every article must contain:
- **1-2 links to service pages** - naturally in text, anchor text must describe the service
- **2-4 links to related blog posts** - use `list_wp_posts` to find relevant content
- Links must be **contextual** (surrounding text must relate to the link)

---

## 3. ARTICLE WRITING

### General Requirements

- Write in the project's language, professional tone
- Length: 800-2500 words depending on topic depth
- Target audience: defined by the project/client context
- Focus keyword: chosen from research (step 2)
- **DO NOT use em-dashes** (-) - use regular hyphens (-) instead

### Article Structure

```
H1: [Primary keyword] - [Promise/benefit] (50-60 characters)

[Introduction 150-200 words]
- What problem does it solve?
- Why is it important?
- What will the reader learn?

H2: What is [topic]? (definition and context)

H2: [Topic] benefits and why it matters

H2: Key strategies / steps / methods for [topic]
  H3: Strategy 1
  H3: Strategy 2
  H3: Strategy 3

H2: [Comparison table if applicable - see Table Style section]

H2: Common mistakes with [topic] (what to avoid)

H2: How to get started / Practical steps

H2: FAQ - Frequently Asked Questions (5-7 questions)
  -> Each question as H3, answer briefly in 2-4 sentences

H2: Summary + CTA (call to action)
  -> Link to service + contact form
```

### Writing Style

- **Tone**: professional but friendly
- **Sentences**: clear and short (max 20 words per sentence)
- **Paragraphs**: max 3-4 sentences at a time
- **Data and numbers**: include study statistics (with sources)
- **Avoid**: empty promises, excessive repetition, cliche phrases, em-dashes

### Headline Capitalization

Follow the target language's capitalization rules. For Estonian: only first word capitalized in headings (plus proper nouns). For English: use standard title case. For German: nouns capitalized. Always match the local convention.

### SEO Requirements

- **H1** contains the primary keyword
- **First sentence** contains the primary keyword
- **Alt text** for images (describe the image in the target language)
- **Meta description**: max 155 characters, contains keyword + call to action
- **Slug** suggestion: keyword only (e.g. `seo-strategies-small-business`)

---

## 3b. STYLED COMPARISON TABLES

When the article includes a comparison (costs, features, products, systems), use a styled HTML table - NOT a markdown table. This renders properly in WordPress and looks professional.

### Table Template

```html
<div style="overflow-x:auto;margin:1.5em 0">
<table style="width:100%;border-collapse:collapse;border-radius:8px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.08);font-size:16px">
<thead>
<tr style="background:#1a1a2e;color:#fff">
<th style="padding:14px 18px;text-align:left;font-weight:600;letter-spacing:0.3px">Column Name</th>
<th style="padding:14px 18px;text-align:center;font-weight:600;letter-spacing:0.3px">Column Name</th>
<th style="padding:14px 18px;text-align:right;font-weight:600;letter-spacing:0.3px">Column Name</th>
</tr>
</thead>
<tbody>
<tr style="background:#f9f9f9">
<td style="padding:12px 18px;border-bottom:1px solid #e8e8e8">Value</td>
<td style="padding:12px 18px;text-align:center;border-bottom:1px solid #e8e8e8">Value</td>
<td style="padding:12px 18px;text-align:right;border-bottom:1px solid #e8e8e8;color:#c0392b;font-weight:600">Expensive</td>
</tr>
<tr style="background:#fff">
<td style="padding:12px 18px;border-bottom:1px solid #e8e8e8">Value</td>
<td style="padding:12px 18px;text-align:center;border-bottom:1px solid #e8e8e8">Value</td>
<td style="padding:12px 18px;text-align:right;border-bottom:1px solid #e8e8e8;color:#e67e22;font-weight:600">Average</td>
</tr>
<tr style="background:#eaf7ee">
<td style="padding:12px 18px"><strong>Best option</strong></td>
<td style="padding:12px 18px;text-align:center">Value</td>
<td style="padding:12px 18px;text-align:right;color:#27ae60;font-weight:700;font-size:17px">Affordable</td>
</tr>
</tbody>
</table>
</div>
```

### Table Styling Rules

- **Header row**: dark background (use brand color if known, otherwise `#1a1a2e`)
- **Alternating rows**: `#f9f9f9` and `#fff`
- **Cost/value color coding**: red `#c0392b` = expensive/bad, orange `#e67e22` = average, green `#27ae60` = affordable/good
- **Best option row**: light green background `#eaf7ee`, bold text
- **Responsive**: wrapped in `overflow-x:auto` for mobile
- Always use inline styles (WordPress strips `<style>` blocks)

---

## 4. JSON-LD SCHEMAS (place at end of article content)

### 4a. Article Schema

```html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "[ARTICLE TITLE]",
  "description": "[META DESCRIPTION]",
  "image": "[IMAGE URL]",
  "author": {
    "@type": "Organization",
    "name": "[COMPANY NAME]",
    "url": "[PROJECT DOMAIN]"
  },
  "publisher": {
    "@type": "Organization",
    "name": "[COMPANY NAME]",
    "logo": {
      "@type": "ImageObject",
      "url": "[LOGO URL]"
    }
  },
  "datePublished": "[ISO DATE]",
  "dateModified": "[ISO DATE]",
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "[ARTICLE URL]"
  },
  "keywords": "[keyword1, keyword2, keyword3]",
  "inLanguage": "[LANGUAGE CODE]"
}
</script>
```

### 4b. FAQPage Schema (based on FAQ section)

```html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "[QUESTION 1]",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "[ANSWER 1]"
      }
    }
  ]
}
</script>
```

### 4c. BreadcrumbList Schema

```html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {"@type": "ListItem", "position": 1, "name": "Home", "item": "[PROJECT DOMAIN]"},
    {"@type": "ListItem", "position": 2, "name": "Blog", "item": "[PROJECT DOMAIN]/blog"},
    {"@type": "ListItem", "position": 3, "name": "[ARTICLE TITLE]", "item": "[ARTICLE URL]"}
  ]
}
</script>
```

---

## 5. FEATURED IMAGE

Generate or source a professional featured image for the article.

**Option A - AI image generation** (preferred):
If you have access to an image generation tool (DALL-E, Gemini, Midjourney, etc.), generate a topic-relevant, professional image. Guidelines:
- Clean, modern style appropriate for a business blog
- No text on the image (WordPress adds the title separately)
- Landscape format (16:9 or 3:2)
- Upload to WordPress media library and set as featured image

**Option B - Stock photo**:
If image generation is not available, suggest 2-3 relevant stock photo search terms the client can use on Unsplash, Pexels, or Pixabay.

**Option C - No image tool available**:
If no image generation or upload tools are available, include in the final report: "Featured image needed - suggest: [description of ideal image]" so the human can add it manually.

---

## 6. PROOFREADING AND QUALITY CHECK

Before publishing, review the complete article:

### Self-Review Checklist
- [ ] Grammar and spelling correct in the target language
- [ ] No em-dashes used (only regular hyphens)
- [ ] All links work and point to correct pages
- [ ] H1 contains the primary keyword
- [ ] Meta description under 155 characters
- [ ] FAQ questions are what people actually search for
- [ ] JSON-LD schemas have no placeholder text left
- [ ] Comparison tables (if any) use styled HTML, not markdown
- [ ] CTA at the end links to a real page
- [ ] Article does not duplicate an existing post topic

### Language Quality
Read the full article once more and fix:
- Awkward phrasing or overly complex sentences
- Repetitive words (vary vocabulary)
- Missing articles or prepositions (common in machine-generated text)
- Consistent terminology throughout

---

## 7. WORDPRESS DRAFT CREATION

When article is ready, publish via `create_wp_post`:

```json
{
  "tool": "create_wp_post",
  "arguments": {
    "title": "[Article title]",
    "content": "[Full HTML content + JSON-LD schemas]",
    "status": "draft",
    "excerpt": "[150-200 word summary]",
    "author": "diana",
    "category_names": ["Turundus"],
    "tag_names": ["AI turundus", "GEO"]
  }
}
```

`author` is optional: WordPress user ID, login, email or display name. Omit it and the post is
authored by the user behind the WordPress connection. An unknown author fails the call — it never
silently falls back.

`category_names` / `tag_names` take names instead of IDs (`list_wp_categories` / `list_wp_tags`
show what exists). Missing tags are created automatically; a missing category fails the call.

Then set the Rank Math fields on the new post — focus keyword, SEO title, meta description and the
share image — with `update_wp_seo_meta`:

```json
{
  "tool": "update_wp_seo_meta",
  "arguments": {
    "object_id": 12345,
    "focus_keyword": "[primary keyword]",
    "seo_title": "[<= 60 chars]",
    "meta_description": "[<= 155 chars]",
    "og_image": "https://example.ee/wp-content/uploads/2026/09/featured.jpg"
  }
}
```

**HTML content format:**
- Use proper HTML tags: `<h2>`, `<h3>`, `<p>`, `<ul>`, `<li>`, `<strong>`, `<a>`
- Comparison tables use inline-styled HTML (see section 3b)
- Place JSON-LD schemas at the end of content
- SILO links must be `<a href="...">` tags with descriptive anchor text

---

## 8. FINAL REPORT

After creating the draft, report to user:

```
Blog article created!

Title: [title]
Primary keyword: [keyword]
Word count: ~[count]
Language: [language]

SILO links added:
  - Service page: [URL]
  - Blog post 1: [URL]
  - Blog post 2: [URL]

Includes: Styled comparison table (if applicable)
Schemas: Article + FAQPage + Breadcrumb
Featured image: [generated / needs manual upload / set]
Proofread: Yes

Status: WordPress draft - ready for review and publishing
```

---

## Strategy Card Integration

If the article is part of a content strategy on a SharksAPI dashboard, update the strategy card after publishing:

```json
{"tool": "update_strategy_task", "arguments": {
  "token": "{dashboard_token}",
  "widget_id": "{strategy_widget_id}",
  "task_id": "{task_id}",
  "is_completed": true
}}
```

## Tips

- **Don't copy** competitor text - write in your own words
- **Add sources** when using statistics (e.g. "According to HubSpot's study...")
- **FAQ questions** must be what people actually search for
- **CTA** must be specific: "Contact us" / "Request a quote" / "Book a demo"
- **Image alt text** in the article's language, include keyword naturally
- Research in English, write in the project's language
- **Check existing posts** before choosing a topic - never duplicate
- **Tables**: always use styled HTML, never markdown tables (WordPress strips markdown)
- **No em-dashes**: use regular hyphens only
