seo-keyword-research — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited seo-keyword-research (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Keyword research matches the exact language buyers use to the pages a site offers. In 2026 it produces two deliverables, not one:
Everything in this skill works with free sources: Google Search Console, Google autocomplete, People Also Ask, competitor sitemaps, Reddit, Wikipedia, and the words customers already use in support tickets and sales calls. Paid tools are an optional final layer, never a prerequisite.
If the working environment contains an Obsidian vault or any local knowledge base (a folder of .md notes, often with a .obsidian directory), read the relevant notes before acting: brand and product facts, target keywords, competitors, and the SEO action log of what was already tried. Ground every recommendation in that context instead of asking the user for facts the vault already holds. At the end of the session, append the actions taken to the vault's SEO action log so the next session starts informed.
Use this skill when the user:
Hand off afterwards: the prompt panel built here is the measurement input for geo-tracking, and page-level citability work belongs to geo-visibility.
When time is short, run this compressed loop; the full workflow below scales it.
The output of the quick start is a defensible shortlist; the full workflow turns it into a complete map.
The most frequent finding in the field (field heuristic from 115+ agency audits): teams target their internal vocabulary while buyers type something else entirely. A consultancy writes "digital transformation enablement"; the buyer types "how to digitize invoices". A keyword is an empirical fact about other people's language, never a branding decision.
Validate every candidate keyword against at least two independent evidence sources before it enters the map:
If a keyword appears in none of these sources, treat it as jargon and find the variant that does appear.
Granularity matters: a keyword is a short expression people actually type, not the full article title. "how to invoice a client in germany" is a keyword; "the complete 2026 guide to invoicing your first international client in germany" is a headline that matches a query with zero volume. Title the page around the keyword, do not promote the title to a keyword.
Google ranks one page per intent per site in most cases, and a page built for two intents serves neither. Every keyword in the map points to exactly one URL, and every URL targets exactly one primary intent. Secondary keywords are allowed only when they share the primary intent (verified by the cannibalization test in step 6).
The long tail (specific, lower-volume queries) converts better and ranks faster because competition is thin. The head (broad, high-volume queries) takes quarters of authority building. Start with the long tail to generate revenue now, plan head terms as a program. Two traps frame this rule:
Classic engines rank pages for queries; AI assistants decompose a prompt into subqueries and sample a handful of sources. The same buyer generates both. Research them together: the keyword map drives pages and rankings, the prompt panel (GEO layer below) drives citations, and geo-tracking measures the panel monthly.
Run the steps in order. Steps 1 to 4 collect evidence, steps 5 to 7 turn evidence into page decisions, the GEO layer extends the map to AI assistants.
Why first: GSC is the only free source showing queries where Google already considers the site relevant, with real impression and click counts instead of tool estimates. Improving position 8 to position 3 takes weeks; building position 3 from nothing takes months.
| Position band | Diagnosis | Action |
|---|---|---|
| 1-4 | Working | Protect, refresh on a schedule |
| 5-10 | Quick win | Complete the placement matrix, add internal anchors |
| 11-20 | Near miss | Deepen content, add one section per related People Also Ask question |
| 21+ | Weak signal | Re-evaluate as a brand new keyword |
Also filter GSC queries containing "how", "what", "why", "vs", "best": they seed both blog topics and the prompt panel.
Prioritize by commercial value, not raw impressions. A high-volume informational query that ranks well but sends visitors who never buy is worth little; a lower-volume query with a strong click-through rate and buyer intent is worth more. Weight the quick win list toward queries that bring customers, not toward the biggest impression counts.
Why: this step kills the jargon problem from principle 1 and it costs nothing. Examples of the gap it closes:
| Internal jargon | What buyers actually type | Where the evidence shows up |
|---|---|---|
| revenue enablement platform | sales crm for small business | autocomplete, Reddit |
| managed WordPress maintenance | wordpress support monthly cost | autocomplete, People Also Ask |
| generative engine optimization services | how to appear in chatgpt answers | People Also Ask, forums |
Method per source:
Why: a competitor's URL inventory is their keyword strategy published in plain sight, and reading it requires no tool.
Why: a Wikipedia table of contents is an editorially curated decomposition of a topic into subtopics, which is exactly what a pillar page outline needs and close to what AI engines produce during query fan-out. Open the topic's article, copy the table of contents as the candidate H2 list, and check the "See also" section for adjacent topics that deserve their own pages.
Why: intent decides the page type, and the page type decides which content skill builds it. Misreading intent wastes the entire production budget: a blog post can almost never outrank product pages on a transactional query, whatever its quality.
| Intent | Query signals | Target page type | Build with |
|---|---|---|---|
| Transactional | buy, pricing, hire, agency, software, tool, near me | Product or service page | seo-content-product-page, seo-content-service-page |
| Informational | how, what, why, guide, examples, checklist | Blog article that links to the commercial page | seo-content-blog, seo-internal-linking |
| Commercial investigation | best, top, vs, alternatives, review, worth it | Comparison page or listicle | seo-content-blog |
| Navigational | brand and product names | Brand pages, homepage | geo-visibility (entity consistency) |
Two non-negotiables:
When intent is ambiguous, read the live results page: what Google already ranks is its verdict on intent, and it overrules any opinion in the room.
Why: two pages targeting the same intent split internal links and ranking signals, and the merged page usually outranks both originals (field heuristic from 115+ agency audits). The test costs two searches and settles every "should these be separate pages" debate with evidence instead of opinion.
Typical symptom that triggers this test: rankings for one query flip-flopping between two URLs week over week.
Cannibalization is a within-site problem: two pages of the SAME site competing for one intent. Two separate properties on the same theme (for example a brand site plus a standalone comparator) do not cannibalize each other; they occupy two distinct SERP slots and can both rank. The standalone comparator site strategy: seo-internal-linking.
Why: ranking signals concentrate in a few locations. A keyword absent from these locations is a keyword the page does not target, whatever the body text says. This matrix is the recurring on-page checklist from 115+ agency audits (field heuristic).
For each of the 5 priority keywords, verify presence in all 8 placements:
| Placement | Check |
|---|---|
| Title tag | Keyword present, front-loaded when natural |
| H1 | Present once |
| At least one H2 | Present, phrased as a question where natural |
| URL slug | Present, short, descriptive, natural language |
| First paragraph | Present, in bold |
| Meta description | Present |
| Image alt text | Present on at least one relevant image |
| Inbound internal anchors | 2-3 internal links use the keyword as anchor text (seo-internal-linking) |
Audit existing pages against this matrix at scale with the bundled audit script from the seo-geo-audit skill (scripts/seo_audit.py).
Only after the free workflow, because tools refine prioritization but cannot replace step 2: no volume metric tells you whether a phrase is the buyer's language or your jargon.
| Tool | What it adds | Access |
|---|---|---|
| DataForSEO | Search volumes and SERP data programmatically | API, pay per call |
| Ahrefs | Volumes, keyword difficulty, competitor keyword lists | Subscription, MCP server available |
| Semrush | Volumes, difficulty, rank tracking at scale | Subscription, MCP server available |
If an MCP server for one of these is connected, use it to enrich the existing map with volumes and difficulty; never to generate the map from scratch.
Prompt research is keyword research for AI assistants, and it is a separate discipline because assistants process queries differently: they explode one prompt into multiple subqueries, retrieve a small set of sources per subquery, and synthesize one answer. Google documents this mechanism as query fan-out for its AI features (https://developers.google.com/search/docs/appearance/ai-features), with a practical optimization guide at https://searchengineland.com/guide/how-to-optimize-for-query-fan-out.
Two consequences change targeting entirely:
Example fan-out for "best invoicing software for freelancers":
| Likely subquery | Page that can win the citation |
|---|---|
| invoicing software pricing comparison | Comparison table page |
| invoicing software for freelancers in [country] | Localized landing page |
| free vs paid invoicing tools | Blog comparison |
| how freelancers send compliant invoices | How-to article with an answer-first section |
Generate prompts with these four patterns, then replace the placeholders with the real language collected in step 2:
| Pattern | Example | Maps to |
|---|---|---|
| best [category] for [use case] | best invoicing software for freelancers | Comparison listicle |
| [brand] vs [competitor] | BillingKit vs FreshBooks | Versus page |
| is [brand] worth it, [brand] reviews | is BillingKit worth it | Reviews coverage, third-party review profiles |
| how to [job to be done] | how to invoice a client in Germany | Blog article with answer-first sections |
Sources for real prompt phrasing:
Aim for 50-100 prompts. Below 50, the share of voice numbers computed in geo-tracking are too noisy to act on; above 100, monthly manual measurement stops being sustainable.
For each prompt record: prompt, pattern, engines where it matters, current answering page (or none), action. Possible actions:
Freeze the finished panel and hand it to geo-tracking unchanged, so visibility numbers stay comparable month over month.
| Rule | Threshold | Why |
|---|---|---|
| Real language validation | Keyword present in at least 2 free evidence sources | Internal jargon attracts zero searches |
| One keyword, one page | 1 intent = 1 page, no exceptions | Two pages on one intent cannibalize each other |
| Cannibalization verdict | Same top 10 for both variants = merge + 301 | The live results page is the ground truth for intent |
| Quick wins first | Work GSC positions 5-20 before creating new content | Existing relevance compounds fastest |
| Long tail and head | Long tail now, head as a quarterly program | Long tail converts and ranks fast; head needs authority |
| Zero-volume trap | Demand evidence required before targeting | First place on a query nobody types is worth nothing |
| Volumes | Never invent numbers; leave blank without a tool | Fake precision corrupts prioritization |
| Prompt panel size | 50-100 prompts, 4 patterns, real phrasing | Smaller panels make geo-tracking metrics noise |
| Title similarity | Page title phrased like the subquery it answers | Strongest measured citation predictor (Ahrefs, 1.4M prompts) |
Deliver three artifacts, in this order:
Example keyword map rows:
| Keyword | Intent | Evidence | Volume | Target URL | Page type | Priority |
|---|---|---|---|---|---|---|
| invoicing software for freelancers | Commercial investigation | autocomplete, PAA, Reddit | blank (no tool) | /best-invoicing-software-for-freelancers (create) | Listicle | Short term |
| how to invoice a client in germany | Informational | PAA, support tickets | blank (no tool) | /blog/invoice-client-germany (create) | Blog article | Short term |
| invoice generator | Transactional | autocomplete, GSC position 12 | blank (no tool) | /tools/invoice-generator (exists) | Tool page | Quick win |
Example prompt panel rows:
| Prompt | Pattern | Phrasing source | Engines | Answering page | Action |
|---|---|---|---|---|---|
| best invoicing software for freelancers | best for | autocomplete, sales calls | chatgpt, perplexity, google-aio | none | create listicle with comparison table |
| billingkit vs freshbooks | vs | ChatGPT follow-up suggestions | chatgpt, gemini | none | create versus page |
| how to invoice a client in germany | job to be done | support tickets | chatgpt, claude | /blog/invoice-client-germany | restructure answer-first (geo-visibility) |
| Mistake | Consequence | Fix |
|---|---|---|
| Targeting internal jargon | Zero impressions forever | Step 2 validation, customer words |
| Inventing search volumes | Fake prioritization | Leave volume blank; validation is mandatory, volume is optional |
| Many intents on one page | Diluted relevance, ranks for nothing | One intent per page, split |
| Separate pages for same-intent variants | Cannibalization, flip-flopping rankings | Two-search SERP test, merge + 301 |
| Only head keywords | No traffic for months, morale collapse | Long tail first, head as a program |
| Only long tail | Growth ceiling | Plan head terms with pillar and cluster pages |
| Blog posts that link to nothing | Traffic without revenue | Every article links to the commercial page it supports |
| Chasing keywords on a broken site | New pages inherit the invisibility | Fix seo-technical issues first |
| Skipping prompt research | Invisible in AI answers while competitors map the prompts | Build the 50-100 prompt panel |
| Rewriting the prompt panel monthly | No comparable trend data | Freeze the panel, hand it to geo-tracking, revise quarterly at most |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.