FR·EN
You bring a URL and a Search Console export. You leave with a prioritised action plan.
This guide teaches you to assemble the audit yourself, skill by skill. The complete agent does the same work in six modules already wired together, from indexing to internal links. It runs locally on your files, with no paid SEO tool to add.
Download the technical SEO agent qadence.io/agent-seo-technique/enIntroduction
This guide covers one thing: the technical SEO audit of a site, with Claude.
You need three things. The site's Search Console, a browser, the sitemap.
No paid SEO tool enters the process.
Budget 3 h to 4 h 30 for a mid-sized site. The duration follows the number of URLs, not the difficulty.
SEO consultants, freelancers, in-house marketers, technical teams who want to audit without depending on a subscription.
You do not need to know how to code. The commands in this guide are copied as they are.
Chapter 1
An audit runs in a fixed order. Indexing, structure, semantics. Each filter cancels the next one out.
A page that is not indexed never ranks, whatever its quality. First filter.
A page that is indexed but has no heading structure does not get extracted by answer engines. Second filter.
A page that is indexed and structured but misses the intent stalls on page two. Third filter.
Auditing the semantics of a page blocked by a noindex leads nowhere. That is the most common finding at the start of an engagement.
Google scores passages, not only pages.
An H2 followed by its answer forms an extractable unit. An answer engine cites that unit, not the whole article.
So the heading tree decides what can be cited. A page built in divs with no headings stays invisible to that mechanism, however well written it is.
Phase 3 of the audit checks this across every URL on the site.
Chapter 2
A block of know-how that Claude loads when the context matches. You write it once, it replays on every audit.
A skill is a folder containing a SKILL.md file.
That file says three things: when to trigger, what it is for, how to proceed step by step.
You do not launch it. You write "check the indexing of this sitemap" and it starts on its own.
The file opens on a YAML frontmatter block with two fields.
name matches the folder name. description holds the phrases that trigger the skill.
Take care with the description: Claude reads it to decide whether to activate.
--- name: my-skill description: | What the skill does, in one dense sentence. ALWAYS use this skill when the user says: "...", "...". --- # Skill, readable name ## When to trigger ## Required input ## Pipeline (N steps) ## Mandatory output ## Absolute rules
Below the frontmatter, seven sections are enough.
Three routes, each under a minute.
Through the interface. Open Settings, Customise, Skills, then the plus button. Drag the skill folder in. It triggers from the next conversation.
By asking Claude. Ask him to install the skill, specifying that it goes both into your active skills and into your local folder.
On Claude Code. Skills live in ~/.claude/skills/ on Mac and Linux, in %USERPROFILE%\.claude\skills\ on Windows. Create a kebab-case subfolder, its name becomes the skill name, drop the SKILL.md inside.
Supporting files, templates and scripts go into references/ or scripts/ next to it.
A well-written skill saves you from re-prompting the same context ten times, and that already counts.
Vendors now sell prefabricated SEO skills. The output comes back generic, because the file holds no client data.
A skill copies in ten seconds. The data you feed it and your judgement on the way out do not.
Nobody pays for the container.
Chapter 3
A chain of skills triggered by an event. The audit in this guide is one.
A skill does one precise thing: check indexing, detect cannibalisation, surface quick wins.
A workflow chains several skills and produces a composite deliverable.
The audit in chapter 6 chains indexation-check, seo-quick-win, seo-cannibalisation, maillage-systeme and maillage-interne-gsc, plus two prompt phases and a synthesis.
None of those skills produces the final report on its own.
The pattern repeats at every phase: a validated input, a skill, an output that becomes the input of the next phase.
You validate each output before moving on.
Skipping validation propagates the error across the next six phases, and you find it in the final report.
You can wrap the chain into a single skill that calls the child skills in order. One trigger runs everything.
A large wrapped workflow becomes hard to correct: you lose the hand between two phases.
Keep your skills separate and orchestrate them by hand while you are learning.
You wrap a chain once it has run without a hitch five times in a row, on five different sites. Not before.
Chapter 4
Three context subfolders, three identity files, one skills folder.
Pick a folder on your internal drive.
Avoid iCloud, Dropbox and OneDrive: syncing causes read conflicts when several files open in parallel.
Claude reads what sits in that folder. You stop pasting context at every session.
At the root, three files written once and reused on every engagement.
about-me.md: your sector, your clients, your positioningmy-voice.md: your writing style, pulled from your best documentsmy-rules.md: what you do, what you refuse, your default trade-offsLet Claude draft a first version from your existing documents. Open, correct, approve.
your-working-folder/ ├── .claude/ │ └── skills/ → the 5 audit skills ├── 1-instructions/ → method, trade-offs, formats ├── 2-seo-reference/ → doctrine, technical notes, exports ├── 3-active-client/ → positioning, pages, calls ├── about-me.md ├── my-voice.md └── my-rules.md
One conversation per project. One client, one conversation. One site, one conversation.
The seven phases stay in the same thread, otherwise phase 6 no longer sees the outputs of phases 0 to 5 and you paste everything back by hand.
Chapter 5
Three skills come as complete files, ready to copy. Two come as summaries.
These five skills cover the seven phases of chapter 6. Phases 0, 3 and 6 run on prompts, with no dedicated skill.
For the two summaries, hand the summary to Claude along with one of the three complete files as a template. You get a coherent SKILL.md in a minute.
Then you calibrate them on your sector. A skill that has never seen your clients produces the same report as everyone else's.
The first skill to run on an unfamiliar site. It works read-only on the public web, with no Search Console and no browser.
Nine checks per URL, split across three layers: the technical causes, the observable status, the report.
Separating causes from status is what matters. A check that only looks at status reports "OK 200" on a page carrying an accidental noindex.
---
name: indexation-check
description: |
Indexing audit of a site, with no paid third-party tool. Checks 9 points on every URL:
HTTP status, robots.txt blocking, noindex directive, presence in the sitemap and lastmod
freshness, sitemap against source of truth, inbound internal links, content length,
observable indexing status. Output: a report with a summary, critical anomalies first,
minor anomalies, prioritised recommendations. Strictly separates "not indexed" from
"not testable". Read-only, never forces anything.
ALWAYS use this skill when the user says: "indexing audit", "index check", "check
indexing", "are my pages indexed", or when they provide a list of URLs or a sitemap
and ask for a diagnosis.
Target: sites from 30 to 1,000 pages. Above that, plug in the official Search Console API.
---
# Skill, indexing audit
## When to trigger
- One-off audit of a site, before a call, after a redesign, after publishing a cluster
- Monthly monitoring on a retained client
- Diagnosis of an unexplained traffic drop
- Pre-flight check before a programmatic project
## Required input
| Source | Required |
|--------|----------|
| List of URLs to check, or the public sitemap.xml URL | Yes |
| Target domain | Yes |
| Hub pages to crawl for internal links (home, glossary, footer) | Recommended |
Minimum viable: a list of URLs and the domain. The rest is inferred.
## Architecture, 3 layers
1. Load the URL list, the human source of truth
|
2. LAYER A, technical audit, the causes
|
3. LAYER B, observable indexing status
|
4. LAYER C, report
Separating causes from status is deliberate. A check that only looks at status reports
"OK 200" on a page carrying an accidental noindex.
## LAYER A, technical audit
1. HTTP status and redirect chain
curl -sIL -A "Mozilla/5.0" -o /dev/null -w "%{http_code}|%{url_effective}" {URL}
Record the final code and the chain. Expect 200. A systematic 301 is debt worth
reporting: trailing slash, http to https.
2. robots.txt does not block
curl -s https://{domain}/robots.txt
For each path, check that no Disallow directive blocks it, neither for User-agent: *
nor for User-agent: Googlebot.
3. No noindex directive, in the HTML and in the HTTP header
curl -sL -A "Mozilla/5.0" {URL} | grep -i 'name="robots"'
curl -sIL {URL} | grep -i 'x-robots-tag'
Report any noindex or none value.
4. Sitemap, presence and freshness
curl -s https://{domain}/sitemap.xml
For each expected slug, check that a loc element exists and read its lastmod.
Report any lastmod older than 6 months.
5. Sitemap against source of truth
Diff the slugs in the source file against the loc elements in the sitemap.
Slug in the source, missing from the sitemap: add it to the build.
Loc in the sitemap, missing from the source: sitemap orphan.
6. Inbound internal links
Crawl the hub pages and count inbound links per target URL.
Zero inbound links: orphan page, critical.
A single inbound link: under-linked, worth reporting.
7. Content length
Extract the text from main or article, failing that the body minus nav and footer,
then count the words.
Under 300 words: too thin, worth a look.
300 to 800: short but acceptable for an atomic page.
Over 800: nothing to report.
## LAYER B, indexing status
8. Observable indexing
curl -sL -A "Mozilla/5.0" "https://www.google.com/search?q=site:{URL}&hl=en"
Mandatory guardrails:
- Space requests 3 to 5 seconds apart
- Detect blocking: grep -E 'sorry/index|recaptcha|unusual traffic'
- When blocked, mark "not testable, rate limited", never "not indexed"
- Retry once on an empty response before concluding
- Mark "indexed" when the URL appears in the response HTML
Reliability runs 40 to 60 % because of rate limiting. The API variant reaches 100 %.
## LAYER C, report
9. Mandatory report structure
- Summary first, X out of N per dimension
- Critical anomalies, immediate action: accidental noindex, orphan page, 404 on a business page
- Minor anomalies: stale lastmod, under-linking, thin content
- Prioritised recommendations, 2 to 5 actions ranked by estimated impact
- Report limits: what could not be tested, and why
## Guardrails, non-negotiable
- Read-only on the public web. No authenticated request that was not authorised.
- Nothing is forced. No URL submission, no forced crawl.
- No modification to the site.
- Strict separation between "not indexed" and "not testable" in the report.
- An accidental noindex on a business page goes at the top of the report, not on row 47 of a table.
- When a check fails, run the others and record it under limits.
The agent observes, the human decides.
## High-reliability variant, URL Inspection API
With a Google Cloud service account and the Search Console property:
1. Read the JSON key
2. Sign a JWT and exchange it for an access token
3. POST to https://searchconsole.googleapis.com/v1/urlInspection/index:inspect
4. Official statuses: INDEXED, DISCOVERED_NOT_INDEXED, CRAWLED_NOT_INDEXED, URL_IS_UNKNOWN_TO_GOOGLE
Check 8 goes from 50 % to 100 % reliability. Setup takes about 30 minutes.
Official limit: 2,000 inspections per day per property.
## Client-side rendered variant
On a single-page application, curl only sees an empty HTML shell. Run a headless browser,
load the URL, wait for network idle, compare the rendered HTML against the served HTML.
Report any content that only appears after JavaScript runs.
Budget around 30 seconds per URL.
The skill to run as soon as the client grants Search Console access.
It isolates pages in positions 3 to 12 that collect many impressions and few clicks.
The gap between actual CTR and expected CTR for the position gives the page's potential. Impressions multiplied by that gap give the recoverable clicks.
---
name: seo-quick-win
description: |
Identification of fast SEO opportunities from GSC data: pages in positions 3-12 with high
impressions and an underperforming CTR. Existing pages come before new content. Pipeline
in 6 steps: filter, sort, compute the CTR gap, cross with intent, prioritise, list the levers.
ALWAYS use this skill when the user says: "quick win", "quick wins", "pages close to the
top 3", "low CTR", "pages in position 3-12", or when a GSC export is provided.
---
# Skill, SEO quick wins
## When to trigger
Pages in positions 3-12, high impressions, underperforming CTR.
Optimise what exists before creating anything.
## Required input
| Source | Required |
|--------|----------|
| GSC Pages export: URL, clicks, impressions, CTR, position, 90 days | Yes |
| Sector and offer context | Recommended |
Minimum viable: a 30-day export, positions 4-15, sorted by descending impressions.
## Pipeline, 6 steps
1. Filter: positions 3.0 to 15.0, exclude branded queries and the homepage
2. Sort: top 10 by descending impressions
3. Compute the CTR gap: actual CTR against expected CTR for the position.
The expected CTR comes from a dated, cited study, never from memory.
With no source available, write [TO SOURCE] and carry on.
4. Cross with intent: decision-stage P1, transactional P2, informational P3
5. Prioritise: decision-stage, over 500 impressions per month, CTR gap above 1.5 points
6. List the levers in this order: answer to the actual intent, anchored passage at the top
of the page, decision-oriented FAQ, inbound internal links, then title and meta description
## Mandatory output
A table of 5 to 10 pages, then one action sheet per page.
Two actions minimum per page, one of them a before and after rewrite of the opening.
QUICK WINS, top N opportunities
| # | URL | Position | Impressions | Actual CTR | Expected CTR | Gap | Intent |
Page /url
Action 1: [type], [concrete description]
Action 2: opening paragraph rewrite, [before / after]
## Absolute rules
- Never propose new content before the existing quick wins are exhausted
- No generic advice without the URL it applies to
- Never confuse search volume with GSC impressions
- Never present the title or meta description as the cause of underperformance.
They change how the page is presented in the SERP, and they come last.
- Always include at least one before and after example
## Related concepts
atomic-proof, grounding-score, search-intent, gsc-export
Two pages compete on the same queries. This skill classifies the conflict before proposing anything.
Four types, four different actions. A 301 redirect applied to a type B conflict destroys a page that was answering a distinct intent.
The SERP triad case is kept: two URLs inside the top 10 hold two positions instead of one.
---
name: seo-cannibalisation
description: |
Cannibalisation audit from GSC data. Identifies pages competing internally on the same
queries or the same intent, classifies the conflict (exact query, same intent, semantic
proximity, SERP triad), analyses the metrics, recommends the action: 301 redirect, merge,
differentiation, cross-linking, or no action at all on a SERP triad.
ALWAYS use this skill when the user says: "cannibalisation", "cannibalization", "two pages
on the same keyword", "I used to rank better", "pages competing with each other",
"cannibalisation audit".
---
# Skill, cannibalisation
## When to trigger
Two pages compete on the same queries or the same intent.
Unexplained position drops, CTR flat despite impressions.
## Required input
| Source | Required |
|--------|----------|
| GSC Queries export, filtered by URL, 90 days | Yes |
| URL list, sitemap or crawl | Recommended |
| Role of each page: pillar or satellite | Recommended |
## Pipeline, 5 steps
1. Identify the conflicts: queries that trigger 2 or more URLs in GSC
2. Classify the type:
- (A) Exact query, two pages on the same precise query
- (B) Same intent, two pages answering the same need
- (C) Semantic proximity, neighbouring subjects with no direct conflict
- (SERP triad) Two URLs inside the top 10, an opportunity rather than a conflict
3. Analyse the metrics: position, impressions, clicks, CTR per page
4. Assess the architecture: pillar or satellite, business goal of each page
5. Recommend the action
| Situation | Action |
|-----------|--------|
| Type A, one weak page | 301 redirect to the strong page |
| Type A, two strong pages | Merge, then 301 |
| Type B, distinct micro-intents | Differentiate and cross-link |
| Type C | Reinforce internal links towards the pillar |
| SERP triad | No action, optimise each angle separately |
## Mandatory output
CANNIBALISATION FOUND
Query: '[query]', type: (A / B / C / triad)
| URL | Position | Impressions | Clicks | CTR | Status |
Diagnosis: [explanation]
Action: [precise action, 3 implementation steps]
## Absolute rules
- Never recommend a 301 before reading the metrics of both pages
- Never treat every cannibalisation the same way
- Never confuse duplicate content with cannibalisation
- Never merge two pages carrying distinct micro-intents
- A SERP triad is kept, it holds two positions instead of one
## Related concepts
serp-triad, rrf, internal-linking, search-intent, gsc-export
The structural internal linking pass. It reasons on editorial structure and runs without any behavioural data, so from day one of an engagement.
The data pass. It rebuilds the parent, child and grandchild page hierarchy as Google sees it.
These five skills, you install and orchestrate yourself on every engagement. The complete agent chains its six modules in order, each one laying the ground for the next, and returns the report.
Download the technical SEO agent qadence.io/agent-seo-technique/enChapter 6
Each phase produces an output the next one consumes. Budget 3 h to 4 h 30.
Four phases rely on a skill. Phases 0, 3 and 6 run on prompts, and phase 5 chains the two internal linking skills. That makes five skills for seven phases.
| Phase | Skill | Source | Duration |
|---|---|---|---|
| 0 · Positioning | none, prompt | Search Console and web search | 20 to 30 min |
| 1 · Indexing | indexation-check | sitemap and public URLs | 15 to 25 min |
| 2 · Quick wins | seo-quick-win | Search Console and browser | 15 to 20 min |
| 3 · Heading structure | none, prompt and reading | full sitemap and browser | variable |
| 4 · Cannibalisation | seo-cannibalisation | Search Console and browser | 15 to 20 min |
| 5 · Internal links | maillage-systeme then maillage-interne-gsc | browser and Search Console | 25 to 40 min |
| 6 · Synthesis | none, assisted synthesis | outputs of phases 0 to 5 | 20 to 30 min |
Phase 3 follows the size of the sitemap. On 800 URLs, it outweighs the other phases combined.
You provide your export and your five to ten business queries.
For each query, ask for the average position, the impressions, the CTR and the gap against the expected CTR.
Then list the business queries missing from the export. Those are the real gaps.
Finish with web search: which type of result dominates each query, and whether an AI Overview fires.
Here is my Search Console export [period]. Here are my business queries: [list] 1. For each query, give my average position, impressions, CTR, the gap against the expected CTR, and the ranking URL. 2. List the business queries missing from the export. 3. For each of those, say which type of result dominates the SERP and whether an AI Overview fires. 4. Surface the queries I rank for without having targeted them.
This phase feeds the six that follow. The gaps go into the "pages to create" horizon, the weak pages become candidates for phase 2.
Cross the sitemap URLs with the ones Google knows, then run indexation-check.
The skill checks nine points per URL and separates causes from status.
A page marked "not testable" is not a page that is missing from the index. Google rate-limits requests, the skill detects it and says so.
Deal with accidental noindex directives before anything else. That is the highest-return fix in the audit, and it takes five minutes.
Filter pages in positions 3 to 12, with impressions in the top fifth of the site and a CTR below expectation.
Multiply impressions by the CTR gap. You get the recoverable clicks per page, and the order of treatment.
Then read the content of each selected page: heading structure, first three hundred words, presence of a FAQ, structured data, inbound internal links.
The order of the fixes matters. Does the page answer the actual intent, does the opening paragraph hold a self-contained answer, is there a decision-oriented FAQ, does the page receive internal links.
Title and meta description come last. They change how the page is presented in the SERP, not how relevant it is.
Also check the Google Business Profile when the site has an address. Its absence is often the first quick win on the site.
Take every URL in the sitemap, not a sample.
In the terminal, volume costs nothing. In the browser, prioritise: pages with impressions, then the quick wins from phase 2, then positions 4 to 20.
Extract the H1 to H6 tree in document order, then apply eight checks.
Cross with phase 2. A quick win page whose only flaw is its headings takes ten minutes to fix.
Start by counting the distinct URLs in your export.
Below ten, skip the phase and document the lack of granularity. An eight-page site does not cannibalise, it lacks pages.
Above that, run seo-cannibalisation and let it classify the conflicts before you decide.
Open both pages in conflict. The content tells you the real cause: two pages too close to each other, or internal linking that does not express the hierarchy.
Start by mapping the existing links: source URL, anchor, target, position of the link in the page.
Then run maillage-systeme for the pillar architecture and the hub against spoke classification.
Finish with maillage-interne-gsc, which overlays the real hierarchy Google sees.
A page strong on impressions and orphaned in the structure goes to the top of the plan.
Without usable Search Console data, the first two steps are enough to produce a workable plan.
Bring the six outputs together and ask for a plan across three horizons.
Every action carries its page, its type, its estimated impact, its effort and its blocking dependencies.
Add the dependency matrix and the actions that can run in parallel. This is the document the client executes without coming back to you.
FAQ
Taken from 720 messages in the bootcamp group over ten days, ordered by frequency.
This is the number one blocker, especially on Windows, where skills live in a system folder no sync service follows.
Do not remap anything by hand. Ask Claude to list your skills and copy them into a synced folder, or zip the folder and drop the archive on your drive.
The cause is almost always the same: the skill exists in your local folder but does not appear under Settings, Skills.
Check it visually in the interface. That list is what decides whether a skill triggers.
Yes, on four phases. Indexing, heading structure and the structural internal linking pass all run on the public web.
Quick wins and cannibalisation need the data, they wait for access.
Have the property opened at the first call: Search Console does not backfill history, it starts collecting the day it is verified.
In the terminal, yes, volume costs nothing.
In the browser, split it: pages with impressions first, then the quick wins from phase 2, then positions 4 to 20, then the rest in batches.
The mid-tier model for installation and technical checks. The most capable one for phase 6, which crosses six outputs at once.
A session burned while sorting exports points to a heavy model on a mechanical task. Check which models are available as you read this, the line-up moves fast.
It fills the gap when data is missing. That is why every skill imposes a format: a source column, and the [TO SOURCE] marker when the value does not exist.
Put the ban in my-rules.md, then match every figure in the report against its export row before you send it.
The audit stops at diagnosis. Three limits come back on every engagement.
You give it a URL or a Search Console export, the agent builds the structure and returns the report. Six modules, nothing to configure, and it runs as many times as you want.
Download the technical SEO agent qadence.io/agent-seo-technique/enOne-to-one engagement. 30 days working directly with me, one session a week, then 6 months of asynchronous follow-up. The system gets installed with you, not instead of you. organikk.co/accompagnement-1-1-30-jours
Timothée Boussardon. Guide updated August 2026.