SEO Research
Keyword research + search metrics to enrich content ideas and drafts with a
target_keyword and an SEO context block.
When to Use
- User wants keyword research or SEO data for a topic
- Picking a target_keyword for a content idea (
content/ideas/{slug}.md) - Generating an SEO context block to feed into a blog draft or service page
Read First
workspace/firm/profile.md — industry and geography/location (DataForSEO
location name format, e.g. "Poland", "United States"). Default location: Poland.
Workflow
1. Keyword research (with fallback)
researchKeywords(topic, industry, location):
- DataForSEO (preferred) —
getKeywordData(keyword, location)→{ keyword, search_volume, cpc, competition, competition_level }(default locationPoland). Stored as theprimary_keyword,source: dataforseo. - Fallback: AI research (Exa/Perplexity) when DataForSEO is unset/fails —
ask for 5 high-value B2B keywords for the topic (one per line).
source: ai.
AI keyword query (verbatim shape):
Suggest 5 high-value SEO keywords for B2B content about "{topic}"
[in the {industry} industry]. Format: one keyword per line, no numbering,
just the keyword phrases.
Dry-run (no keys): propose keywords from topic + industry knowledge, mark
source: dry-run.
2. Pick a target keyword
Choose the most relevant, realistic keyword (intent + achievable competition). Prefer specific long-tail over generic head terms for PSF/B2B.
3. Build SEO context block
generateSeoContext(topic, targetKeyword) → a short block for content prompts.
It starts with a SEO Context: header, the target keyword, and (only when
DataForSEO is available) one metrics line with monthly search volume and
competition level — CPC is not included here:
SEO Context:
Target keyword: {target_keyword}
Keyword metrics: {search_volume} monthly searches, competition: {competition_level}
When the keyword research feeds idea generation, the prompt also nudges the model to "include target keywords naturally in content titles where appropriate" — it does not prescribe specific placements (title / first paragraph / H2).
4. Write outputs
- Set
target_keyword:in the relevantcontent/ideas/{slug}.mdfrontmatter. - Save full research to
workspace/marketing/seo/{topic-slug}.md:
---
topic:
location:
source: dataforseo | ai | dry-run
primary_keyword:
search_volume:
competition:
suggestions: []
date: 2026-06-01
---
Integration with content pipeline
marketing-content-ideascan call this to attachtarget_keywordper idea.marketing-content-blog-postshould weave the SEO context block into blog drafts.marketing-service-pageshould use SEO context for standalone service pages. LinkedIn/X do not use SEO research.
Rules
- Always degrade gracefully: DataForSEO → AI → dry-run; never hard-fail.
- One primary
target_keywordper content piece; keep secondary as suggestions. - Write for humans — flag and avoid keyword stuffing.
- Location/industry come from firm-context, not guessed per call.
Environment Variables
DATAFORSEO_LOGIN=
DATAFORSEO_PASSWORD=
EXA_API_KEY= # or Perplexity — AI keyword fallback
Related Skills
| Skill | When |
|---|---|
marketing-content-ideas |
Attach target keywords to ideas |
marketing-content-blog-post |
Consume SEO context in blog drafts |
marketing-service-page |
Consume SEO context in standalone service pages |
firm-context |
Industry + target location |
Source: b2bforce/b2bforce — distributed by TomeVault.