Agent skill
seo-keyword-to-page
Table-driven keyword analysis and SEO content planning.
Filed under Content and SEO.
From lbarberis/gtm-skills · 7 skill entries · 0 · pushed 2026-09-26
What it does when it runs
Table-driven keyword analysis and SEO content planning. Turns a site, topic or seed keywords into clustered keywords, SERP intent reads, demand and difficulty assessments, go/build/skip verdicts, a page map (blog post vs main navigation page), title tags, meta descriptions and an on-page optimization checklist, all delivered as structured tables. Use this skill whenever someone asks for keyword research, keyword analysis, an SEO content plan or content calendar, a content brief, topic clusters, which page should target a keyword, whether a keyword is worth going after, how to read search volume or keyword difficulty, title tags, meta descriptions, keyword cannibalization, an on-page SEO review, or how to show up in Google AI Overviews, even if they never say "framework" or "tables".
Automated analysis of the skill and the 0 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- No third-party host appears in the skill or its bundled files.
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It only issues instructions, so there is nothing to bound. - Actions present in the files
- None. Instructions only.
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/lbarberis/gtm-skills.git /tmp/gtm-skills git -C /tmp/gtm-skills sparse-checkout set "skills/seo-keyword-to-page" mkdir -p ~/.claude/skills/seo-keyword-to-page cp -R "/tmp/gtm-skills/skills/seo-keyword-to-page/." ~/.claude/skills/seo-keyword-to-page/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
Or take the whole library
This repo ships a .claude-plugin manifest, so Claude Code can install all 7 skills at once. Plugin skills are invoked as /<plugin>:<skill>, so they never collide with your own.
/plugin marketplace add lbarberis/gtm-skills /plugin
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from lbarberis/gtm-skills/blob/aba514c75be2102fa8c91074bb978ee36cfa050b/skills/seo-keyword-to-page/SKILL.md, which is licensed MIT (repository). 3,928 words, 21 headings.
Keyword to page: table-driven SEO planning
This skill runs keyword analysis as a fixed sequence of tables. Each table forces one decision into the open, so gaps show up as empty cells instead of hiding inside paragraphs. Work through the tables in order, fill every cell (or mark it n/a and log why in T9), and only then write the short commentary that connects them.
The core concept
SEO planning is five bets, answered in order. The numbers decide where to compete; the page decides whether you win.
Rows: the five stages of the plan. Columns: the question each stage answers, the tables that answer it, and what Google actually evaluates behind the tool metrics.
| Stage | Question | Tables | What Google actually evaluates |
|---|---|---|---|
| Demand | Is anyone searching for this? | T1, T3 | Nothing directly. Volume is a tool estimate; Google matches pages to queries by meaning. Ground truth is Search Console impressions. |
| Intent | What does the searcher want? | T2 | The live results page is Google's current answer. What ranks is the brief. |
| Winnability | Can we beat page 1? | T4 | Pages and links, among many signals. Google does not use DR, DA or KD; they are third-party proxies. |
| Page | What single page serves it best? | T5, T6 | Helpful, people-first, non-commodity content with information the current results lack. |
| Packaging | Will they click? | T7, T8 | Title links and snippets built by Google from your title, H1 and page text, often rewritten. |
House rules
Rows: the output rules. Columns: the rule, and why it exists.
| Rule | Why |
|---|---|
| Think in tables. Produce each stage's table before reasoning about the next stage. | Structure makes every decision explicit and comparable across keywords. |
Caption every table with one line: Rows: ... Columns: ... | A reader must know what a single cell means without guessing. |
| Prose is connective only: at most two short lines between tables, plus a closing summary of three lines or fewer. | The analysis lives in the tables; prose only links them. |
| Never use em dashes. Use commas, colons or parentheses. | House style. |
Never invent a metric. Every number carries a source tag. If data is unavailable, write n/a and still complete the qualitative columns. | A plausible fake volume is worse than a blank: it drives wrong priorities. |
| Describe tool metrics as estimates. Search Console is the only first-party performance data. | Google states that third-party tools have no access to its ranking data. |
| Read intent and page type from the live SERP, never from the keyword's wording alone. | The same words can hide opposite intents. |
| On how Search works, Google's documentation outranks third-party advice. Use practitioner studies only for magnitudes (click loss, rewrite rates). | Keeps the plan grounded in what Google says it does. |
| One country and one language per analysis, stated in T0. | Volume, difficulty and SERPs differ by market. |
Source tags (put in a Source column, or in brackets after a value):
Rows: the tags. Columns: the tag and what it means.
| Tag | Meaning |
|---|---|
[Ahrefs] [Semrush] [KWP] | Third-party tool estimate (KWP = Google Keyword Planner) |
[GSC] | Google Search Console, first-party data |
[SERP] | Observed on the live results page |
[User] | Provided by the user |
[Judgment] | Reasoned assessment; allowed only for qualitative scores (business value, angle, information gain) |
[Illustrative] | Made-up teaching data; never allowed in a real plan |
n/a | Not available; the reason goes in T9 |
Step 1: pick the mode
Rows: request types. Columns: the tables required for that request.
| Request | Tables required |
|---|---|
| Full keyword plan for a site or topic | T0, T1, T2, T3, T4, T5, T6, T7, T9 (T8 for priority pages, or on request) |
| "Is keyword X worth targeting?" | T0 (short), T2, T3, T4, T5, T9 |
| Content brief for one page | T0, T1 (that cluster only), T2, T6, T7, T8, T9 |
| Optimize an existing page | T0, T2, T7, T8 (including the cannibalization check), T9 |
| Titles and meta descriptions only | T0 (short), T2, T7 |
Step 2: get the data
Rows: the inputs the tables need. Columns: preferred source, fallback, and what to do when neither is available.
| Input | Preferred | Fallback | If unavailable |
|---|---|---|---|
| Search volume, traffic potential | Ahrefs Keywords Explorer (use a connector if one is available) | Semrush; Keyword Planner ranges | n/a; rank demand relatively from SERP and GSC evidence |
| Keyword difficulty | Ahrefs KD | Semrush KD% (never mix tools in one table) | n/a; judge from the T4 SERP columns |
| SERP composition (who ranks, page types, DR, linking domains) | Ahrefs SERP overview | Live web search of the query: read titles, URLs, domains | Never skip: at minimum read the top 10 titles and domains |
| AI Overview presence | Live SERP | Tool SERP-features column | unknown; treat informational queries as likely affected |
| Own rankings and clicks | Search Console | Ahrefs GSC reports | Ask the user for an export |
| Site strength | Ahrefs DR of own domain | Moz DA | n/a; compare against the SERP qualitatively |
If a data connector is available (for example an Ahrefs connector with keyword overview and SERP overview tools), use it before asking the user. If no tool data is available, say so once in a single line, then deliver every qualitative column in full. If a code tool is available, use it for character counts and priority maths.
Step 3: fill the tables
T0 Brief
Rows: the brief fields. Columns: the value, its source tag, and its status.
| Field | Value | Source | Status (Confirmed / Assumed / Missing) |
|---|---|---|---|
| Site or domain | |||
| Site strength (DR) | |||
| Market: country and language | |||
| Offer: what we sell | |||
| Ideal customer | |||
| Conversion action | |||
| Existing relevant pages | |||
| Seed topics or keywords | |||
| Data access (tools, GSC) | |||
| Constraints (budget, cadence, brand rules) |
Ask only for fields that block the work (market and offer). Assume the rest, mark them Assumed, and carry them into T9.
T1 Keyword universe and clusters
Rows: individual keywords. Columns: the cluster each keyword belongs to and the evidence for the grouping.
| Keyword | Cluster head | Shared top-10 URLs with head | Parent topic (Ahrefs) | Volume | Source |
|---|
Rules:
- Expand seeds from tool suggestions, autocomplete, People Also Ask, Search Console queries and the customer's own words.
- Cluster by SERP overlap, not by similar wording. House threshold: 4 or more shared URLs in the top 10 means one page; 1 to 3 means decide by intent in T2; 0 means separate pages.
- One page per cluster. Never create a page per keyword variation: Google understands synonyms, and mass-producing variant pages to manipulate rankings breaches its scaled content abuse policy.
T2 Intent read (the three Cs)
Rows: clusters, one per cluster head. Columns: the intent and the three Cs read from the live top 10, plus the evidence.
| Cluster head | Dominant intent | Content type | Content format | Content angle | SERP features | Evidence (top 3 results) |
|---|
Rules:
- Intent: informational, commercial investigation, transactional or navigational.
- Content type: blog post, product page, category page, landing page, tool, video.
- Content format: how-to, list, comparison, review, template, definition.
- Content angle: the selling point the top results share (free, for beginners, step by step, for small teams).
- Match type and format; differentiate on angle.
- Mixed SERP: record the split (for example "6 guides, 4 product pages"), then follow the majority or send the cluster to Skip.
- SERP features to record: AI Overview, People Also Ask, video, local pack, shopping, forums.
T3 Demand
Rows: clusters. Columns: raw demand, AI-adjusted demand and business value.
| Cluster head | Head volume | Traffic potential | Trend or seasonality | AI Overview | Adjusted demand | Business value (1-3) | Source |
|---|
Rules:
- Prefer traffic potential (organic traffic of the current #1 page across all its keywords) over single-keyword volume.
- Adjusted demand = traffic potential × 0.42 when an AI Overview appears on an informational query; otherwise adjusted demand = traffic potential. Basis: Ahrefs' December 2025 data links an AI Overview to 58% lower click-through at position 1. Re-verify this figure yearly.
- Business value comes before volume. A 90-search keyword with buying intent can beat 9,000 informational searches.
Rows: business value scores. Columns: the score and its meaning.
| Score | Meaning |
|---|---|
| 3 | The searcher could buy what we sell now (product, pricing, comparison, alternatives) |
| 2 | Adjacent problem our product solves, one step from a purchase |
| 1 | Educational only, weak path to conversion |
T4 Winnability
Rows: clusters. Columns: difficulty, what page 1 is made of, and our position against it.
| Cluster head | KD (tool) | Linking domains implied | Top-10 DR range | Top-10 results from sites with DR ≤ ours | Linking domains to ranking pages (min to median) | Our topical depth (existing pages on the topic) | Winnability (1-3) |
|---|
Rows: the linking domains Ahrefs estimates a page needs for the top 10. Columns: Ahrefs KD values. Use only with Ahrefs KD.
| KD | 0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 |
|---|---|---|---|---|---|---|---|---|---|---|
| Linking domains needed | 0 | 10 | 22 | 36 | 56 | 84 | 129 | 202 | 353 | 756 |
Rows: winnability scores. Columns: the score and the condition for it.
| Score | Condition |
|---|---|
| 3 | Several top-10 results come from sites no stronger than ours, and we can match the ranking pages' linking domains soon |
| 2 | The gap is closable within about 6 months with supporting content and link building |
| 1 | Page 1 is dominated by far stronger sites whose pages carry hundreds of linking domains |
KD estimates the top 10 (not the top 3), ignores on-page quality and is identical for every site. It never decides winnability on its own; the SERP columns do.
T5 Verdict and priority
Rows: clusters, sorted by priority, highest first. Columns: the three scores, the priority, the verdict and the next action.
| Cluster head | Business value | Winnability | Demand score | Priority (BV × W × D) | Verdict | Reason (15 words max) | Next action |
|---|
Demand score: 3 = top third of adjusted demand within this set, 2 = middle third, 1 = bottom third.
Rows: verdicts. Columns: the scoring condition and the action.
| Verdict | Condition | Action |
|---|---|---|
| Go now | Business value ≥ 2, winnability 3, demand score ≥ 2 | Publish or optimize now |
| Quick win | Business value ≥ 2, winnability 3, demand score 1 | Publish fast and link it to a money page |
| Build toward | Business value 3 with winnability 1 or 2, or business value 2 with winnability 2 | Build the supporting cluster and links first; recheck in 3 to 6 months |
| Skip | Business value 1, or business value 2 with winnability 1, or an intent we cannot serve | Leave out and note it in T9 (keep only if the plan explicitly includes awareness content) |
T6 Page map
Rows: pages, one per cluster with a Go now, Quick win or Build toward verdict. Columns: where the page lives and what it must do.
| URL | Page type | New or existing | Primary keyword | Secondary keywords | Main concept (one sentence) | Information gain | Links to | Linked from |
|---|
Rows: intents from T2. Columns: the page type that serves each intent and where it lives.
| Intent | Page type | Lives in |
|---|---|---|
| Transactional | Product, pricing, sign-up, category page | Main navigation |
| Commercial investigation | Comparison, alternatives, use case, industry page | Main navigation (compare or solutions section) |
| Informational | Guide, how-to, template, glossary | Blog or resources directory |
| Navigational (own brand) | Home, product, login, support | Main navigation |
Rules:
- Main concept sentence: who the page is for, the question it answers, and what it adds beyond the current top 10.
- Information gain must name something concrete: original data, first-hand testing, real screenshots, worked examples, a tool or a template. "Better written" does not count.
- Existing page first: if a page already targets the intent, optimize it instead of creating a new one.
- Cannibalization: merge only pages that serve the same intent. Pages serving different intents can both rank.
- Every blog post links to its navigation page with descriptive anchor text; every navigation page links to its supporting posts.
T7 SERP packaging
Rows: pages from T6. Columns: title, H1, meta description and slug, with exact character counts and checks.
| Page | Title tag | Title chars | H1 | Meta description | Meta chars | Slug | Checks |
|---|
Rows: the packaging elements. Columns: the rule and the target.
| Element | Rule | Target |
|---|---|---|
| Title | Primary keyword early, one clear promise, no repeated words, no sitewide boilerplate, brand once at the end on navigation pages | About 50 to 60 characters. Google sets no limit but truncates to device width (about 600px on desktop). |
| H1 | The most prominent text on the page, carrying the same promise as the title | One visible main heading |
| Meta description | Unique and specific: outcome, key facts (price, author, specs), soft call to action | About 150 to 160 characters. Google sets no limit. |
| Slug | Short readable words, lowercase, hyphens, no dates on evergreen pages | For example /freelancers or /blog/late-payment-reminder-email |
| Year in title | Only if the content is genuinely re-checked for that year | Google treats cosmetic date changes as a warning sign |
Count characters exactly, with code if available; never estimate. Google rewrites most meta descriptions and many titles, so the page's opening paragraph must carry the same promise as the tags.
T8 On-page optimization checklist
Rows: individual checks, grouped by area. Columns: the area, the check, its status, the fix, and the basis (Google = Google documentation, Research = published practitioner data, Practice = common expert practice without official backing).
| Area | Check | Status (Pass / Fix / n/a) | Fix | Basis |
|---|---|---|---|---|
| Packaging | Title unique, keyword early, within about 600px | Google; Practice for length | ||
| Packaging | One dominant H1 matching the title | |||
| Packaging | Unique, specific meta description | |||
| Packaging | Descriptive slug; visible breadcrumbs with BreadcrumbList markup | |||
| Content | Direct answer or offer in the first screen | Google (snippets come from page text) | ||
| Content | Concrete information gain versus the current top 10 | |||
| Content | Clear sections, descriptive headings, tables for comparisons | |||
| Content | Length set by the question, not by a word count | |||
| Content | Byline linked to an author page; sources cited | |||
| Content | Visible dates; date changed only with a substantial update | |||
| Content | Relevant images placed near their text, with descriptive alt text | |||
| Links | Hub and spoke links between the navigation page and its posts | Practice | ||
| Links | Descriptive anchor text in crawlable <a href> links | |||
| Links | Key pages within three clicks of home; no orphan pages | Practice | ||
| Links | One URL per piece of content (301 first, rel="canonical" second) | |||
| Links | Cannibalization: Search Console, filter the query, Pages tab; two URLs splitting one intent means merge | Practice | ||
| Technical | Returns 200, not blocked by robots.txt or the CDN, no stray noindex | |||
| Technical | Core Web Vitals at the 75th percentile: LCP ≤ 2.5 s, INP ≤ 200 ms, CLS ≤ 0.1 | |||
| Technical | Same main content on mobile and desktop | |||
| Technical | Key content present as text in the rendered HTML | |||
| Technical | No interstitial or ad blocking the main content | |||
| Structured data | Organization, BreadcrumbList, Article (posts), SoftwareApplication or Product (product pages); markup matches visible text | |||
| Structured data | No FAQ or HowTo markup added for search appearance (FAQ rich results retired 7 May 2026; HowTo in 2023) | Google, via trade press | ||
| AI search | Page indexed and snippet-eligible; site included in generative AI features in Search Console | |||
| AI search | No effort spent on llms.txt, content chunking or AI-specific rewrites for Google | |||
| Measurement | Generative AI performance report and Performance report reviewed | |||
| Measurement | Changes judged only after recrawl plus a few weeks |
T9 Assumptions, gaps and provenance
Rows: every assumption, data gap and judgment call made in the tables above. Columns: what it is, what it affects, how much, and how to close it.
| Item | Type (Assumption / Data gap / Judgment) | Affects | Impact (High / Medium / Low) | How to close |
|---|
Step 4: deliver
Order: one line stating scope, market and data sources; then the tables in T-number order; then a closing summary of three lines or fewer naming the top three pages to build and why. If the user wants a document or web page, render the same tables there with the same captions; the tables stay the backbone.
Step 5: self-check before sending
Rows: the checks. Columns: the check and whether it passes.
| Check | Pass? |
|---|---|
| Every table has a Rows/Columns caption | |
Every metric has a source tag or n/a | |
No invented numbers; [Illustrative] data appears only in teaching examples | |
| Intent and page type come from the live SERP | |
| One page per intent; no variant pages | |
| Every cluster has a verdict | |
| Title and meta character counts are exact | |
| Tool metrics described as estimates, not Google facts | |
| All assumptions and gaps listed in T9 | |
| No em dashes anywhere |
What not to do (Google's documented position)
Rows: common SEO beliefs. Columns: the belief and what Google's documentation says.
| Belief | Google's position |
|---|---|
| A higher DR or DA ranks you higher | Google says it does not use Domain Authority, and third-party tools have no access to its ranking data |
| There is an ideal word count | No minimum or maximum; length alone does not matter |
| Keywords in the URL or domain boost rankings | Hardly any effect beyond breadcrumbs |
| Headings must follow strict order and count | Order and count do not matter to Google Search (semantic order helps screen readers) |
| Meta keywords matter | Google does not use the keywords meta tag |
| Duplicate content triggers a penalty | Not a spam violation; consolidate for users and crawl efficiency |
| E-E-A-T is a ranking factor | Not by itself; ranking systems use factors that align with it |
| AI Overviews need llms.txt, chunking or special schema | None needed; the same SEO fundamentals apply |
| Publish a page for every keyword variant | Unnecessary, and at scale it breaches the scaled content abuse policy |
Example of the expected format
T5 for a hypothetical invoicing SaaS with DR 35. Every value is [Illustrative].
Rows: clusters, sorted by priority. Columns: the three scores, the priority, the verdict and the next action.
| Cluster head | Business value | Winnability | Demand score | Priority | Verdict | Reason | Next action |
|---|---|---|---|---|---|---|---|
| [competitor] alternatives | 3 | 3 | 2 | 18 | Go now | Buying intent; DR 40 to 60 blogs rank with few links | Build the /compare page |
| invoicing software for freelancers | 3 | 2 | 3 | 18 | Build toward | Money term; KD 42 implies roughly 60 linking domains | Publish 4 supporting posts first |
| contractor invoice template | 2 | 3 | 2 | 12 | Go now | Template intent, weak SERP, natural product tie-in | Publish the template post |
| late payment reminder email | 2 | 3 | 1 | 6 | Quick win | Forums rank; links to the reminders feature | Publish and link to the feature page |
| invoice | 1 | 1 | 3 | 3 | Skip | Mixed intent, dominated by the largest brands | None |
Evidence base (verified September 2026; re-verify yearly)
Rows: the facts this skill relies on. Columns: the fact and its source.
| Fact | Source |
|---|---|
| No title length limit; truncated to device width; title links built from the title, H1 and prominent text | developers.google.com/search/docs/appearance/title-link |
| No meta description limit; snippets come mainly from page content | developers.google.com/search/docs/appearance/snippet |
| Keyword variations, URLs, duplicates, headings, word count and E-E-A-T myths | developers.google.com/search/docs/fundamentals/seo-starter-guide |
| Information gain tests, date changes, bylines, E-E-A-T | developers.google.com/search/docs/fundamentals/creating-helpful-content |
| AI search runs on core ranking; no llms.txt or chunking; scaled content abuse; Search Console inclusion and reporting | developers.google.com/search/docs/fundamentals/ai-optimization-guide |
| Third-party tools have no access to Google's ranking data | developers.google.com/search/docs/fundamentals/third-party-seo |
| KD method and the KD-to-linking-domains table | ahrefs.com/keyword-difficulty |
| Three Cs of search intent | ahrefs.com/seo/glossary/search-intent |
| Traffic potential definition; limits of search volume accuracy | help.ahrefs.com (Traffic Potential; search volume accuracy) |
| AI Overview linked to 58% lower position-1 click-through (December 2025 data) | ahrefs.com/blog/ai-overviews-reduce-clicks-update |
| Google rewrote meta descriptions 62.78% of the time | ahrefs.com/blog/meta-description-study |
| FAQ rich results retired on 7 May 2026 | Google FAQPage documentation notice, reported by trade press |
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- seo-keyword-research by Varnan-Tech · 672
- seo-sea-keyword-gap-analyzer by Ad-Superpowers · 5
- ai-seo by coreyhaines31 · 53,460
- programmatic-seo by coreyhaines31 · 53,460
- seo-audit by coreyhaines31 · 53,460
- e2e-seo-assistant by irinabuht12-oss · 3,698
- keyword-cannibalization-check by irinabuht12-oss · 3,698
- landing-page-audit by irinabuht12-oss · 3,698
Need help setting it up?
This page tells you what seo-keyword-to-page does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.