ChatSEO
Free ยท Nothing gated

The SEO Claude
Skills Folder

An entire Head of SEO function in one folder: 15 specialist skills across research, optimisation, growth and measurement. Every file is here in full โ€” open a dropdown, copy it, save it.

How one founder went from 250 to 750 clicks a day on this method โ†’

Free ยท No credit card required

Nicholas

Hey there, I'm Nicholas ๐Ÿ‘‹

I grew my last B2C app to 15K Google clicks/month as a solo founder, then sold it. Turns out I fell in love with SEO along the way.

So now I'm building ChatSEO.app โ€” an all-in-one SEO employee whose job is to make sure you rank #1 in Google and in AI search.

This folder is the version of my process that fits in a text editor. Try it free โ†’


These aren't saved prompts

A prompt is a request. A skill is a job description that outlives your mood.

Paste a great prompt today and you get a great answer today. Paste it again next month, reworded slightly because you remembered it differently, and the answer has a different shape โ€” so you can't compare the two, so neither one taught you anything.

A skill file takes the wording out of the equation. Same inputs, same steps, same output format, every run. Which is why each of the 15 files below carries seven things a prompt never does:

ONE-SKILL.MD Required inputs Step-by-step process Exact output format Worked example Quality checks Common traps Reusable template Shared definitions & thresholds one file ยท read by all 15 skills ยท the reason two skills agree
Every skill in the folder has the same seven parts, and they all sit on one shared thresholds file.

That last box is the part people leave out, and it's the part that does the most work. If the keyword skill calls a query "low CTR" at one number and the reporting skill calls it low at another, the folder contradicts itself and you stop trusting it. One shared file, twelve numbers, no drift.


Install it in four minutes

The folder is designed for messy inputs. That's the whole point of it.

A GSC export A crawl file A screenshot A typed URL SEO Skills Folder 15 skills ยท 12 shared thresholds One next action
Give it what you actually have. Every skill ends on a single action, not a list of 47 findings.

Set it up once

Then every skill below has something real to read.

  1. Make a folder called seo. Save each skill below as its own .md file inside it, named after the name: line in its frontmatter.
  2. Save the shared thresholds file alongside them as _thresholds.md. Do this even if you only ever use three skills โ€” it's what stops two skills disagreeing.
  3. Give Claude the folder: attach it to a Project, or drop it wherever your Claude client loads skills from. Then call a skill by name.
  4. Connect your real data before you run anything โ€” the step below.

The step people skip

Fifteen skills that reason about your site are worth nothing if the model can't see your site. Every skill below reads Search Console data. Without it you get a well-structured essay about SEO in general โ€” confident, beautifully formatted, and about nobody's website.

You can paste CSV exports by hand, and the skills are written to accept that. The way I do it is the ChatSEO plugin: one read-only Google OAuth connection, then Claude can query Search Console and GA4 as tools. No export, no pasting, and it can re-pull next month without you.

Test it before you save a single file. Ask: "Which of my pages lost the most clicks last month?" Real URLs back means you're connected. Advice about how to find those pages means you aren't โ€” and all 15 skills will produce fiction in a nice table. Connect ChatSEO free โ†’


The 12 shared thresholds

Every skill reads this file. Open a scale to see the numbers it uses.

SEO advice falls apart on undefined words. "Low CTR", "thin content", "a good link", "a big drop" โ€” every one of those is a judgement call, and a model left to make it will make a different one each time. So the folder makes the calls once, here, and every skill defers to this file.

Scale 1 ยท Position bands and what CTR is expected in each

Used by: GSC analysis, on-page, dead pages, reporting.

BandAvg positionRead as
Winning1.0 โ€“ 3.0Defend. Only touch if CTR is below this site's own band average.
Striking distance3.1 โ€“ 10.0Cheapest clicks on the site. Work here first.
Page two10.1 โ€“ 20.0Real intent, wrong page. Usually an intent or internal-link problem.
Noise20.1+Ignore unless impressions exceed the floor in scale 2.

CTR is always judged against this site's own average for that band, never a published industry table. Brand queries are excluded from the average first โ€” they inflate it enough to hide everything else.

Scale 2 ยท The opportunity floor โ€” when a number is big enough to act on

Used by: every skill that ranks anything.

  • 1,000+ impressions / 28 days for a page to enter any priority list.
  • 100+ impressions / 28 days for a single query to be named individually.
  • 30 clicks minimum before a CTR figure is treated as signal rather than noise.
  • 3 months of history before any trend is called a trend.

Below a floor, the correct output is "below the floor, not ranked" โ€” not a smaller-font recommendation.

Scale 3 ยท Intent classes and the cluster rule

Used by: keyword clustering, search intent, topical map, content brief.

ClassSignal in the SERPPage that wins it
InformationalGuides, forums, videos, People Also AskExplainer or tutorial
ComparisonListicles, "best", "vs", review sitesComparison or alternatives page
TransactionalProduct pages, pricing, ads above the foldProduct, pricing or signup page
NavigationalOne brand owns the top 3Nothing. Don't target it.

Cluster rule: 3 or more queries sharing one intent class and one realistic destination URL = one cluster, named after its highest-impression query. Fewer than 3 = merge into a neighbour or drop. One cluster maps to exactly one URL โ€” that constraint is what prevents cannibalisation later.

Scale 4 ยท Decay and cannibalisation โ€” the two definitions people fudge

Used by: content refresh, traffic drop diagnosis, internal linking.

Decayed = clicks down 30% or more over the last 90 days versus the 90 before, while impressions are flat or down less than 10%. Impressions holding is what separates decay (you lost the click) from a demand drop (nobody searched).

Cannibalisation = two or more URLs from your site ranking in the top 20 for the same query inside one 28-day window, with neither above position 5. Two URLs where one sits at 2 and the other at 14 is not cannibalisation โ€” it's a strong page and a weak one.

Seasonal = the same shape appeared in the same weeks last year. Always check this before diagnosing anything as a drop.

Scale 5 ยท Link quality tiers, A to D

Used by: backlink audit, link building.

TierWhat it isAction
AEditorial link, topically relevant site, page gets real search trafficStudy it. Get more like it.
BRelevant site, but a directory, profile or resource listKeep. Don't chase more.
CIrrelevant topic, or a page with no traffic of its ownIgnore. Not worth a disavow.
DPaid network, scraper, spun content, obvious footprintDocument. Disavow only with a manual action.

Tier is assigned from what you can actually see. A link whose tier can't be determined is written as tier unknown โ€” never rounded up to B.

Scale 6 ยท The confidence scale โ€” the most important one in the folder

Used by: every skill, on every claim about cause.

LabelMeansAllowed to
ConfirmedVisible in the data provided, with the figure quotedDrive the recommendation
ProbableConsistent with the data, but the data can't prove itBe named, with the test that would confirm it
UnverifiableWould need data that wasn't providedBe listed as what to pull next. Nothing else.

Every skill is forbidden from producing a number that isn't in its inputs. The instruction is literal โ€” write "cannot compute from this data" and move on โ€” and it's the difference between an audit you can act on and an essay that sounds like one.

Copy the full shared file
_thresholds.md
---
name: seo-thresholds
description: Shared SEO definitions and thresholds. Every skill in this folder reads this file before deciding whether a number matters. Never override these locally.
---

POSITION BANDS
  winning 1.0-3.0 | striking distance 3.1-10.0 | page two 10.1-20.0 | noise 20.1+
  CTR is judged against THIS site's own average for that band, brand queries excluded.
  Never use a published industry CTR table.

OPPORTUNITY FLOORS
  page enters a priority list:      1,000+ impressions / 28 days
  query named individually:           100+ impressions / 28 days
  CTR treated as signal:               30+ clicks
  a trend may be called a trend:        3+ months of history
  Below a floor, output "below the floor, not ranked". Do not rank it quietly.

INTENT CLASSES
  informational | comparison | transactional | navigational
  Navigational queries owned by one brand in the top 3 are never targeted.

CLUSTER RULE
  3+ queries, one intent class, one realistic destination URL = one cluster.
  Name the cluster after its highest-impression query.
  Fewer than 3 queries: merge into a neighbour or drop it.
  One cluster maps to EXACTLY ONE URL.

DECAY
  clicks down 30%+ over 90 days vs the prior 90, AND impressions flat or down <10%.
  If impressions fell too, it is a demand change, not decay. Say so.

CANNIBALISATION
  2+ of my URLs in the top 20 for one query in one 28-day window, neither above
  position 5. One strong page plus one weak page is not cannibalisation.

SEASONALITY
  Before diagnosing any drop, check the same weeks last year. Same shape = seasonal.

LINK TIERS
  A editorial, relevant, page has its own search traffic
  B relevant but directory / profile / resource list
  C irrelevant topic, or page with no traffic
  D paid network, scraper, spun, obvious footprint
  Undeterminable tier is written "tier unknown". Never round up.

CONFIDENCE SCALE โ€” applies to every claim about cause
  confirmed     visible in the data provided; quote the figure
  probable      consistent with the data; name the test that would confirm it
  unverifiable  needs data not provided; list it as what to pull next

FORECASTING
  Requires 6+ months of history. Output a range, never a single number.
  State the assumption the range depends on.

UNIVERSAL RULES
  Never state a number that is not in the inputs. Write
  "cannot compute from this data" and move on. Never estimate, and never carry
  an estimated number into a later step.
  Every skill ends on ONE action. Not a ranked list of actions. One.

The 15 skills

Four groups, in the order you'd actually run them. Every file is complete โ€” open the dropdown and copy it.

RESEARCH โ†’Keyword clustering โ†’Search intent โ†’Competitor gap โ†’Topical map OPTIMIZE โ†’Technical audit โ†’On-page โ†’Internal links โ†’Content refresh GROW โ†’Content brief โ†’Backlinks โ†’Local SEO โ†’AI answers MEASURE โ†’GSC analysis โ†’Traffic drops โ†’Reporting All 15 read the same thresholds file. All 15 end on one action.
Research

What to go after, and what to leave alone.

1

keyword-clustering

The rule: one cluster, one URL. Anything that can't own a URL gets merged or dropped.

Reads: GSC queries or a keyword listReturns: clusters, one per URL

Most keyword lists fail because they're sorted by volume. This one is sorted by whether a single page could plausibly rank for the whole group โ€” which is the only property that turns a list into a content plan.

Open the full skill file
skill ยท keyword-clustering
---
name: keyword-clustering
description: Turn a raw query list into clusters that each map to one URL. Use before any content planning.
---

Read _thresholds.md first. Apply the cluster rule and the intent classes from it.

INPUTS โ€” ask for what is missing, do not proceed without it:
- a query list with impressions (GSC export or connected Search Console), or a keyword list
- the site's existing URLs, if you have them

PROCESS
1. Drop every query under the individual-query floor.
2. Drop navigational queries owned by another brand in the top 3.
3. Assign each remaining query an intent class.
4. Group queries that share an intent class AND could be satisfied by one page.
5. Name each cluster after its highest-impression query.
6. Map each cluster to ONE URL: an existing one if it fits, otherwise "new page".
7. Merge or drop any cluster left with fewer than 3 queries.

OUTPUT โ€” one table, ranked by total cluster impressions, capped at 15 rows:
cluster | intent | total impressions | query count | destination URL | new or existing

RULES
- A query appears in exactly one cluster. If it fits two, the cluster with more
  impressions takes it, and you say which one lost it.
- Never invent search volume. If impressions are missing, write "not in data".
- No difficulty score. You cannot see one, and inventing one is worse than omitting it.

End with ONE line: the cluster to build first, and whether it is new or existing.
2

search-intent

The rule: read the SERP that exists, not the intent you'd prefer the query had.

Reads: a SERP screenshot or pasted resultsReturns: the page format that wins

Nearly every "we wrote the content and it didn't rank" story is this: a guide aimed at a query where Google is only showing product pages. The format is the fight, and you can see who won it before you write anything.

Open the full skill file
skill ยท search-intent
---
name: search-intent
description: Read a live SERP and name the page format that can rank. Use before writing or rewriting any page.
---

Read _thresholds.md first. Use its intent classes.

INPUTS โ€” ask for what is missing:
- the query, and the country and language it should be read in
- the SERP itself: a screenshot, a paste of the top 10, or a live fetch
If you cannot see the SERP, say so and stop. Do not describe what the SERP
"probably" looks like โ€” that is the one failure mode of this skill.

PROCESS
1. List the top 10 results: URL, page type, and whether it is a brand's own page.
2. Count the page types. The majority type is the format Google is rewarding.
3. Note SERP features present: ads, People Also Ask, video, images, local pack,
   shopping, AI overview.
4. Assign the intent class from _thresholds.md.
5. Judge whether a page of the winning format is realistic for this site.

OUTPUT
- intent class, one word
- winning format, one line, with the count that justifies it (e.g. "7 of 10 are listicles")
- SERP features present, comma separated
- what would have to be true for us to rank, 2 bullets maximum
- verdict: TARGET or SKIP, with the reason in one sentence

RULES
- Only describe results you can actually see. Never reconstruct a SERP from memory โ€”
  rankings change and yours are months stale.
- If the top 3 are one brand's own properties, the verdict is SKIP.

End with ONE line: TARGET or SKIP, and the format to build if TARGET.
3

competitor-gap

The rule: only report gaps you could realistically close. A gap you can't close is trivia.

Reads: your queries + a competitor's pagesReturns: closable gaps only

Gap analyses usually produce a list of everything a bigger competitor ranks for, which is demoralising and useless. The filter here is winnability, and it cuts the list by about 90%.

Open the full skill file
skill ยท competitor-gap
---
name: competitor-gap
description: Find the topics a competitor covers that you could realistically take. Use quarterly.
---

Read _thresholds.md first.

INPUTS โ€” ask for what is missing:
- my site and my current queries (connected Search Console, or an export)
- 1-3 competitor domains, and their pages if you can fetch or be given them
Never work from a competitor's traffic estimate. You do not have their Search Console.

PROCESS
1. Build the topic list they cover and I do not.
2. Remove anything where I already have a page in the winning or striking band.
3. Remove anything that needs an asset I do not have: proprietary data, a physical
   location, a product I do not sell, a team I do not have.
4. For what remains, check whether I already rank ANYWHERE for a related query.
   Sites with an existing foothold on a topic close gaps far faster than sites without.
5. Rank the survivors by foothold first, impressions second.

OUTPUT โ€” one table, capped at 10 rows:
topic | their page | do I rank for anything related | my best related position | why it is closable

RULES
- Every "closable" claim cites something visible: my own position, my own impressions,
  or a page of theirs you actually read.
- Confidence label on every row, per the confidence scale.
- No estimate of their traffic, their authority score, or their budget. Ever.
- Do not list gaps you removed in steps 2-3. The value here is the removal.

End with ONE line: the single topic to take first, and the foothold that makes it winnable.
4

topical-map

The rule: every page has a parent and a job. No orphans, no duplicates.

Reads: your clustersReturns: a hub-and-spoke tree

This is the skill that stops you writing the same page three times over two years. It runs on the output of skill 1, and it's the artefact you keep โ€” the internal-linking skill later reads it as its input.

Open the full skill file
skill ยท topical-map
---
name: topical-map
description: Turn clusters into a hub-and-spoke map where every page has a parent and one job. Use after keyword-clustering.
---

Read _thresholds.md first.

INPUTS โ€” ask for what is missing:
- the cluster table from keyword-clustering
- the site's existing URLs and what each one currently targets

PROCESS
1. Name 3-6 hubs. A hub is a topic the site wants to be known for, not a keyword.
2. Assign every cluster to exactly one hub. A cluster that fits no hub either
   proves a missing hub or does not belong on this site โ€” say which.
3. Under each hub, order spokes: existing pages first, then new ones by impressions.
4. Flag every existing URL that targets the same cluster as another existing URL.
   That is a cannibalisation candidate โ€” apply the definition in _thresholds.md.
5. Flag every existing URL that maps to no cluster. That is an orphan.

OUTPUT
For each hub:
  HUB NAME โ€” the hub URL, existing or "to build"
  spokes: URL or "new" | cluster | status: live, refresh, build, or merge

Then two short lists:
  CANNIBALISATION โ€” pairs of URLs on one cluster, with the recommended survivor
  ORPHANS โ€” URLs mapping to no cluster, with keep or retire

RULES
- Maximum 6 hubs. If you want a seventh, one of the six is really two topics โ€”
  say which, and still give me six.
- Never assign one cluster to two hubs.
- Do not estimate how long anything takes. You do not know who is writing it.

End with ONE line: the hub to build out first, and its first spoke.
Optimize

Fix what you already have before you write anything new.

5

technical-audit

The rule: name the one issue costing the most traffic. Everything else waits.

Reads: a crawl export or Search Console coverageReturns: one issue

Technical audits are where 47-item checklists come from, and a 47-item checklist gets read once and never worked. The banned-output section of this file is longer than its process section, and that's deliberate.

Open the full skill file
skill ยท technical-audit
---
name: technical-audit
description: Find the single technical issue costing the most organic traffic. Use quarterly, or after a migration.
---

Read _thresholds.md first.

INPUTS โ€” ask for what is missing:
- a crawl export (any tool), or the Search Console page indexing report, or both
- optionally: Core Web Vitals, the robots.txt, the XML sitemap

PROCESS โ€” in this order, because each stage gates the one below it
1. INDEXABLE โ€” are the pages I want indexed actually indexed? Count them.
2. REACHABLE โ€” are they linked from anywhere? Count orphans.
3. CORRECT โ€” canonicals, redirects, status codes. Count wrong ones.
4. FAST โ€” Core Web Vitals, only if stages 1-3 are clean.
Stop at the first stage that is broken. A speed problem does not matter on a page
that is not indexed.

For the broken stage, quantify it: how many URLs, and how many impressions or
clicks sit behind them. If you cannot tie it to traffic, say "traffic impact not
computable from this data" โ€” do not assert that it is severe.

OUTPUT
- one line per stage: the count, and pass or fail
- THE ISSUE: the earliest failing stage, in one sentence
- the affected URLs, capped at 10, with the figure that makes it the issue
- the fix, as one instruction a developer could act on today

BANNED
- a severity-ranked list of findings
- a second issue mentioned "while you're in there"
- a summary of the stages that passed
- the words "quick win", "low-hanging fruit", or "best practice"
- any recommendation that is not tied to a number you pulled

End with ONE sentence: the issue, and the single fix.
6

on-page

The rule: rewrite what's underperforming its own position band. Leave the rest alone.

Reads: one URL + its GSC queriesReturns: a title, a meta, an H1

Not a generic optimisation pass โ€” it only fires on pages ranking well and being clicked badly, judged against that band's average on your own site. Those pages are the cheapest traffic you will ever buy, because the ranking is already paid for.

Open the full skill file
skill ยท on-page
---
name: on-page
description: Rewrite the title, meta and H1 of a page that ranks well but is clicked badly. Use monthly on the worst offender.
---

Read _thresholds.md first. Use its position bands and CTR rule.

INPUTS โ€” ask for what is missing:
- the URL, and its current title, meta description and H1
- that URL's Search Console queries: impressions, clicks, CTR, average position
- the page's actual content, fetched or pasted

PROCESS
1. Compute this site's average CTR for the band this page sits in, brand queries excluded.
2. Compare the page's CTR to that average. If it is at or above, STOP and say
   "this page is performing at band average โ€” do not touch it". That is a valid output.
3. Find the highest-impression query the page ranks for that the title does not answer.
4. Check the page body actually delivers that query. If it does not, the fix is content,
   not a title โ€” say so and stop.
5. Write ONE title (max 60 characters), ONE meta description (max 155), ONE H1.

OUTPUT
current CTR vs band average, with both numbers
the query the title is missing
  TITLE:   ... (character count)
  META:    ... (character count)
  H1:      ...
one line on what changed and why

RULES
- One version of each. Do not give me three options to choose between.
- Never write a benefit the page does not contain. Quote the line that supports it.
- Never state a CTR you did not compute from the data given.
- No emoji, no brackets stuffed with keywords, no year unless the page updates yearly.

End with ONE action: ship these three fields, or fix the content first.
7

internal-links

The rule: link from pages that already have authority to pages that need it. Nothing else.

Reads: the topical map + GSCReturns: exact links to add

The most underused lever in SEO, and the easiest to do badly. This one names source page, target page, anchor text and the paragraph to put it in โ€” because "improve your internal linking" is not an instruction anyone can follow.

Open the full skill file
skill ยท internal-links
---
name: internal-links
description: Produce a specific list of internal links to add, with source, target, anchor and placement. Use monthly.
---

Read _thresholds.md first.

INPUTS โ€” ask for what is missing:
- the topical map, or the list of URLs and what each targets
- Search Console clicks per page, last 28 days
- the content of the candidate source pages, so anchors can be placed truthfully

PROCESS
1. Rank pages by clicks. The top decile are the authority pages.
2. Identify targets: pages in the page-two band, and pages that are new or orphaned.
3. For each target, find up to 3 authority pages whose content genuinely relates.
   Relevance is judged on the source page's actual text, not on its title.
4. For each pair, write the anchor text and quote the sentence it belongs in or beside.
5. Reject any pair where you cannot quote a real sentence. That link would be a bolt-on
   and reads like one.

OUTPUT โ€” one table, capped at 15 rows:
source URL | target URL | anchor text | the existing sentence it attaches to

RULES
- Never invent the sentence. If you were not given the source page's content, ask for it.
- Anchor text describes the target, is 2-5 words, and is not "click here" or the bare URL.
- Do not repeat the same anchor to the same target more than twice across the site.
- No link graph diagram, no authority score, no PageRank estimate. You cannot see them.

End with ONE line: the single link that should be added first, and why that one.
8

content-refresh

The rule: separate decay from a demand drop before recommending anything.

Reads: 180 days of GSCReturns: one page to refresh

Half of what gets called "content decay" is just fewer people searching, and rewriting a page can't fix that. The impressions test in scale 4 is what tells the two apart, and it takes one line of the data you already have.

Open the full skill file
skill ยท content-refresh
---
name: content-refresh
description: Find pages that lost clicks while demand held, and say exactly what to change. Use monthly.
---

Read _thresholds.md first. Use its decay definition literally.

INPUTS โ€” ask for what is missing:
- Search Console: clicks, impressions and average position per page, for the last
  90 days AND the 90 days before that
- optionally the same window last year, for the seasonality check

PROCESS
1. Compute the change in clicks and in impressions for every page.
2. Apply the decay definition. Pages failing the impressions half are NOT decayed โ€”
   put them in a separate short list labelled "demand change, not decay".
3. For the decayed pages, check the position change. Position down means you lost
   ranking; position flat with clicks down means you lost the click, which is a
   title, snippet or SERP-feature problem.
4. Check seasonality before finalising anything.
5. Pick the one page with the largest absolute click loss that is genuinely decayed.

OUTPUT
DECAYED โ€” table capped at 8: page | clicks before/after | impressions before/after |
position before/after | lost ranking or lost the click
DEMAND CHANGE โ€” page list only, one line, no recommendations
THE ONE TO FIX โ€” the page, the diagnosis in one sentence, the change to make

RULES
- Never recommend "refresh and republish". Name the specific change: the section that
  is now wrong, the query the page stopped answering, or the snippet that stopped earning.
- If the position data is missing, say "cannot distinguish ranking loss from CTR loss
  without position data" and ask for it. Do not guess which one it is.
- Percentages are shown with both raw numbers. A 40% drop from 5 clicks is not news.

End with ONE action: the page, and the single change to make to it.
Grow

New surface: pages, links, maps, and AI answers.

9

content-brief

The rule: the brief is built from the SERP that exists, and it names what to leave out.

Reads: a cluster + its SERPReturns: a writer-ready brief

A brief that only says what to include produces a page that says everything and ranks for nothing. The exclusions section is the one writers actually thank you for.

Open the full skill file
skill ยท content-brief
---
name: content-brief
description: Build a brief a writer can execute without asking questions. Use after search-intent has returned TARGET.
---

Read _thresholds.md first.

INPUTS โ€” ask for what is missing:
- the cluster: its queries and their impressions
- the search-intent verdict for the head query, including the winning format
- what this site can credibly claim: product, data, experience
If the intent verdict is missing, run search-intent first. Do not brief blind.

PROCESS
1. State the format the SERP is rewarding, from the intent verdict.
2. Take the sections from what the ranking pages actually cover, not from a template.
3. Add the section only this site could write โ€” the product, the data, the experience.
   If there isn't one, say so plainly. That is a real finding about the page's odds.
4. Name what to LEAVE OUT: subtopics belonging to a different cluster, and background
   the reader of this query already has.
5. Set the length from the ranking pages, as a range, not a target word count.

OUTPUT
  URL:        the destination, from the topical map
  FORMAT:     one line, with the SERP evidence
  TITLE:      one working title, max 60 characters
  SECTIONS:   H2s in order, each with one line on what it must answer
  MUST CITE:  the specific data, screenshot or example the page needs
  LEAVE OUT:  3-5 bullets
  LENGTH:     a range, with what the ranking pages run at

RULES
- No keyword density, no LSI list, no "include the keyword 5 times". None of that is real.
- Never invent a statistic for the writer to cite. Name the source they must go get.
- One title. Not three.

End with ONE line: what the writer opens first.
10

backlink-audit

The rule: tier every link A to D, then only chase more of what tier A already worked.

Reads: a backlink exportReturns: tiers + one target

Link building goes wrong when it starts from a list of prospects instead of from the links you already earned. The A-tier links you have are a description of who links to sites like yours โ€” that's the prospect list.

Open the full skill file
skill ยท backlink-audit
---
name: backlink-audit
description: Tier existing backlinks, then derive the next link target from the tier A pattern. Use quarterly.
---

Read _thresholds.md first. Use its link tiers exactly.

INPUTS โ€” ask for what is missing:
- a backlink export from any tool: source URL, target URL, anchor text
- optionally, whether there is a manual action in Search Console

PROCESS
1. Tier every link A to D. Where you cannot see enough to judge, write "tier unknown".
2. Count each tier. Report the counts before any analysis.
3. Look only at tier A. What do those sites have in common: topic, format, why they linked?
4. Find which of my pages earned them. That page type is my linkable asset.
5. Name one prospect type โ€” not one specific site โ€” that matches the tier A pattern.

OUTPUT
tier counts: A / B / C / D / unknown
TIER A โ€” table: source | my page they linked | why they linked, in 5 words
THE PATTERN โ€” one sentence
MY LINKABLE ASSET โ€” the page or page type, with the count of A-tier links it earned
NEXT TARGET โ€” the prospect type, and the page I would pitch

RULES
- Never recommend disavowing without a manual action. Say so explicitly if D-tier
  links exist: "D-tier links present; no action unless a manual action appears."
- No domain authority, no spam score, no trust flow. Those are vendor metrics you
  cannot see, and quoting one you were not given is inventing a number.
- Do not write outreach copy here. That is a different job.

End with ONE line: the single prospect type to approach, and the asset to pitch.
11

local-seo

The rule: the profile and the site have to say the same thing. Check that before anything else.

Reads: the GBP profile + siteReturns: one mismatch to fix

Local rankings turn on consistency far more than on content, and the fastest wins are almost always a category, a service area or a name that disagrees between the profile and the site.

Open the full skill file
skill ยท local-seo
---
name: local-seo
description: Reconcile a Google Business Profile against the website and name the one fix. Use monthly.
---

Read _thresholds.md first.

INPUTS โ€” ask for what is missing:
- the Google Business Profile: name, primary category, secondary categories,
  service areas, hours, description
- the website's contact or location page
- optionally: Business Profile insights, and the top 3 local competitors' categories
If you cannot see the profile, ask for a screenshot. Do not describe a generic profile.

PROCESS
1. Compare, field by field: business name, address, phone, hours, services.
   Any disagreement between profile and site is the finding. Stop hunting after that.
2. Check the primary category against what the business actually sells.
   The primary category does more for local ranking than every other field combined.
3. Compare categories against the local competitors, if given.
4. Check the site has a page for each real service area. Not a doorway page per town โ€”
   a real page per area you genuinely serve.
5. Check reviews only for whether recent ones are answered. Never estimate review counts.

OUTPUT
MISMATCHES โ€” table: field | on the profile | on the site
CATEGORY โ€” current primary, and whether it matches what is sold, with the reason
SERVICE AREAS โ€” areas claimed with no page, and pages with no area
THE ONE FIX โ€” the single change with the largest expected effect, and why

RULES
- Never invent a category name. Only use categories you were shown or that appear
  in Google's list; if unsure, describe it and ask.
- No "post weekly to your profile" advice unless the insights data shows posts
  are already earning views.

End with ONE action: the single field to correct today.
12

ai-answers

The rule: cited, mentioned or absent. Three states, no vibes.

Reads: AI answers you paste inReturns: the citable gap

GEO gets talked about in the abstract constantly. This skill makes it concrete: run your real questions, record which of three states you're in, and fix the specific thing that makes a page quotable rather than merely correct.

Open the full skill file
skill ยท ai-answers
---
name: ai-answers
description: Audit whether AI assistants cite you for your core questions, and fix what makes a page citable. Use monthly.
---

Read _thresholds.md first. Use the confidence scale on every claim.

INPUTS โ€” ask for what is missing:
- 5-10 questions a buyer would actually ask, in their words
- the AI answers themselves, pasted in, with which assistant produced each
- my pages that should have been the source
I cannot see what an assistant returned unless you paste it. If answers are missing,
give me the question list to run and stop there โ€” that is a complete, useful output.

PROCESS
1. For each question, record one of three states:
   CITED     โ€” my page is linked or named as a source
   MENTIONED โ€” my brand appears with no link
   ABSENT    โ€” neither
2. For CITED, note which page and which sentence was used. That sentence is the pattern.
3. For ABSENT, note who was cited instead and what shape their content took:
   a direct definition, a table, a step list, a number with a date.
4. Compare my page to the cited source on ONE axis: is the answer extractable as a
   standalone passage, or is it distributed across the page?
5. Name the single page change that would make the passage extractable.

OUTPUT
- table: question | state | who was cited | my page that should have won
- counts: cited / mentioned / absent
- THE PATTERN โ€” what the cited sources have in common, one sentence
- THE FIX โ€” one page, one change, with the passage rewritten as it should appear

RULES
- Never claim a page "will be cited". State the change and the confidence label.
- Never report a state for a question whose answer you were not given.
- No made-up share-of-voice percentage. Report the counts you actually recorded.

End with ONE action: the page to rewrite, and the passage to put at the top of it.
Measure

The part that tells you whether any of the above worked.

13

gsc-analysis

The rule: strip brand queries first. Everything else is a lie until you do.

Reads: a GSC export or the connectionReturns: the one binding constraint

On my own site, 88% of clicks came from three brand queries. Every chart that included them said the site was healthy. Stripping brand is the first move in this file for exactly that reason.

Open the full skill file
skill ยท gsc-analysis
---
name: gsc-analysis
description: Read the full Search Console funnel and name the single constraint holding the site back. Run first, then quarterly.
---

Read _thresholds.md first. Use its bands and floors.

INPUTS โ€” ask for what is missing:
- Search Console, connected or exported: queries and pages, last 90 days,
  and the 90 days before for comparison
- my brand terms, so they can be excluded. If I have not given them, ask.
  Do not guess which queries are branded.

PROCESS โ€” the order gates itself; each stage decides whether the next one matters
1. BRAND SPLIT โ€” clicks from brand vs non-brand. Report both, then work non-brand only.
2. IMPRESSIONS โ€” total and direction vs the prior 90 days.
3. POSITION โ€” how many queries sit in each band from _thresholds.md.
4. CTR โ€” actual CTR per band, against this site's own average for that band.
5. PAGES โ€” pages above the impressions floor with CTR under the band average.

One line per stage: the number, the direction, healthy or not.

Then name THE ONE binding constraint: the EARLIEST broken stage, with two sentences
on why that stage and not the next, quoting the numbers you pulled. A CTR problem is
not worth solving on pages Google is barely showing.

BANNED
- a list of findings, a severity ranking, a second constraint "for later"
- a recap of the stages that were fine
- the word "additionally"

If a figure is not in the data, write "cannot compute from this data" and move on.
Never estimate, and never carry an estimate into a later stage.

End with ONE sentence: the constraint, and the single next action.
14

traffic-drop

The rule: every cause gets a confidence label. "Probably the update" is not a diagnosis.

Reads: before/after GSC + a change logReturns: a labelled cause

The reason drops stay unsolved is that the first plausible story gets accepted. Forcing confirmed / probable / unverifiable onto every candidate is what keeps the real cause in play long enough to be found.

Open the full skill file
skill ยท traffic-drop
---
name: traffic-drop
description: Diagnose an organic traffic drop with a confidence label on every candidate cause. Use when traffic falls.
---

Read _thresholds.md first. The confidence scale is mandatory here.

INPUTS โ€” ask for what is missing:
- the date the drop started, or the data to find it
- Search Console for 60 days before and everything since: clicks, impressions,
  position, by page and by query
- what changed on the site and when: deploys, redesigns, migrations, deletions
- the same window last year, for seasonality
If there is no change log, say so โ€” it is the single most common reason a drop
stays unexplained, and I would rather you tell me than fill the gap with a guess.

PROCESS
1. Locate the drop precisely: which day, and is it a cliff or a slope?
   A cliff points at something we did. A slope points at competition or decay.
2. Isolate it: is the drop site-wide, or one section, or one page, or one query?
   Never diagnose site-wide without checking whether it is one page.
3. Split clicks from impressions. Impressions holding while clicks fell means we
   lost the click, not the ranking โ€” a different cause entirely.
4. Check seasonality against last year before considering anything else.
5. Test candidates IN THIS ORDER, and label each confirmed / probable / unverifiable:
   our own change ยท indexing or coverage change ยท position loss on specific queries ยท
   SERP layout change ยท demand change ยท algorithm update
   Algorithm update is LAST because it is unfalsifiable and ends the investigation.

OUTPUT
- the drop: date, size in clicks, cliff or slope
- the scope: site-wide, section, page or query, with the numbers
- candidate table: cause | confidence | the evidence | how to confirm it
- THE DIAGNOSIS โ€” the highest-confidence cause, in one sentence

RULES
- No cause is stated without its label. A probable cause is never written as the cause.
- Never blame an algorithm update you cannot date and correlate.
- If everything is unverifiable, say that, and list what data to pull. That is
  a correct answer, and a better one than a confident wrong story.

End with ONE action: the fix if confirmed, or the exact data to pull if not.
15

seo-reporting

The rule: report what changed and what you did about it. Forecast as a range or not at all.

Reads: the month's GSC + your actionsReturns: a one-page report

The last skill closes the loop the first fourteen open: what you shipped, what moved, what didn't, and what's next โ€” short enough that someone actually reads it.

Open the full skill file
skill ยท seo-reporting
---
name: seo-reporting
description: Write the monthly SEO report: what changed, what we did, what is next. Use monthly.
---

Read _thresholds.md first. Use its forecasting rule.

INPUTS โ€” ask for what is missing:
- Search Console for the month and the month before: clicks, impressions,
  position, split brand and non-brand
- what we actually shipped this month, with dates
- optionally GA4 conversions from organic

PROCESS
1. Report non-brand clicks first, with brand shown separately underneath.
2. For each thing we shipped, check whether the pages it touched moved. Attribute
   only where the timing and the page line up. Otherwise write "no measurable
   change yet" โ€” with the date it shipped, so next month can revisit it.
3. Name what moved that we did NOT cause. Being honest about luck is what makes
   the attributed wins believable.
4. Forecast only with 6+ months of history, and only as a range with its assumption.
   Otherwise write "not enough history to forecast" and give the trend direction.

OUTPUT โ€” the whole report fits on one page
  THE NUMBER โ€” non-brand clicks, this month vs last, with the raw figures
  WE SHIPPED โ€” bullet per item: what, when, did it move
  MOVED WITHOUT US โ€” 1-3 lines
  DIDN'T WORK โ€” anything shipped 60+ days ago with no movement. Do not skip this section.
  NEXT โ€” one action, carried from whichever skill named it

RULES
- Every percentage is shown with the raw numbers behind it.
- Never attribute a rise to work whose dates do not line up. Say "timing does not
  support attribution".
- No projection of revenue from clicks unless given a conversion rate and a value.
- No chart descriptions. Numbers, sentences.

End with ONE line: the single thing next month is about.

What the folder can't do

Worth saying plainly, because you'll hit it in week two.

Fifteen files make Claude reason like an SEO operator. They don't make it employed as one. Four things are structurally outside what a folder of text can do:

That gap is exactly what I've been building ChatSEO to close: it holds the Search Console connection so nothing gets pasted, it remembers what it told you in March, and it can push the fix to your site and check a month later whether it worked. The folder above is genuinely the same thinking โ€” this is the version that doesn't need you to remember to run it.


How one founder went from 250 โ†’ 750 clicks a day

This is the Search Console graph from a ChatSEO user running this exact loop โ€” find the binding constraint, fix the pages already ranking, recheck the following month. No new content, no link building.

Search Console graph showing daily clicks rising from around 250 to around 750.

Why this works when SEO tools don't

Everything on this page runs on a Search Console export and 15 text files โ€” and you can try it here for free if you'd rather not be the one remembering to run them.

Old SEO tools

  • 47 findings ranked by somebody else's severity score
  • A clicks chart that's 88% your own brand name
  • "Low CTR" meaning something different on every screen
  • A cause for the drop, stated with no confidence at all
  • Five tools that don't talk to each other

What you actually want

  • One constraint, named, with the number behind it
  • Brand stripped out before anything is measured
  • Twelve thresholds, defined once, shared by all 15 skills
  • Confirmed, probable or unverifiable on every claim
  • One connection, from Search Console to shipped fix

That's the whole idea behind ChatSEO

One SEO employee that reads your Search Console, names the single thing holding the site back, writes the fix, ships it โ€” and tells you a month later whether it worked.

Try ChatSEO free โ†’

No credit card required