qadence.io · audit guide

FR·EN

The technical SEO audit with Claude

You bring a URL and a Search Console export. You leave with a prioritised action plan.

Timothée Boussardon · qadence.io · August 2026

7phases, in a fixed order
5skills across 4 phases, 3 phases on prompts
0paid SEO tool
3 hto 4 h 30 per site

Contents

Before you start

Download the complete technical SEO agent

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/en

Introduction

What this guide covers

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.

Who it is for

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.

What you will be able to do

Chapter 1

The 2026 landscape

An audit runs in a fixed order. Indexing, structure, semantics. Each filter cancels the next one out.

The three filters, in order

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.

What Passage Ranking changes about the audit

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

What a skill is

A block of know-how that Claude loads when the context matches. You write it once, it replays on every audit.

Definition

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 anatomy of the file

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.

Installing a skill

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.

Where the value sits

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

What a workflow is

A chain of skills triggered by an event. The audit in this guide is one.

How it differs from a skill

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.

Sequential orchestration

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.

Wrapping a workflow into a skill

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.

My rule

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

Your local CLAUDE folder

Three context subfolders, three identity files, one skills folder.

The working 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.

The three subfolders

The three identity files

At the root, three files written once and reused on every engagement.

Let Claude draft a first version from your existing documents. Open, correct, approve.

The final structure

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
Non-negotiable rule

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

The five audit skills

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.

indexation-check complete file

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.

seo-quick-win complete file

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

seo-cannibalisation complete file

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

maillage-systeme summary

The structural internal linking pass. It reasons on editorial structure and runs without any behavioural data, so from day one of an engagement.

Trigger
"internal link architecture", "hub and spoke", "anchor selection", "orphan pages", "topic cluster plan"
Input
The list of articles with title, slug, excerpt and target queries. Full content also yields the exact anchors
Pipeline
Classify each page as Know-Simple, Know or Do. Identify three to five pillars. Designate the hub of each. Map existing links. Propose three anchors per link. Prioritise. Check the conservation rules
Output
Pillar architecture, graph audit, prioritised link plan with the carrying sentence and the anchors, governance checklist
Never
The same anchor twice towards the same target. A "see also" block at the end of an article. A link to the homepage from body content. More than five internal links per thousand words

maillage-interne-gsc summary

The data pass. It rebuilds the parent, child and grandchild page hierarchy as Google sees it.

Trigger
"internal links", "orphan pages", or a Search Console export provided with the site structure
Input
The Search Console export and the URL list
Pipeline
Pull the data. Diagnose the structure: potential parents, under-linked pages, orphans. Build the plan with the Know to Do rules. Prioritise by urgency score. Generate the recommendations
Output
Per recommendation: the source page, the destination page, the anchor and the context of the carrying sentence
Never
Run before the structural pass. Architecture first, data second
Halfway through

Download the complete technical SEO agent

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/en

Chapter 6

The audit, seven phases

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.

PhaseSkillSourceDuration
0 · Positioningnone, promptSearch Console and web search20 to 30 min
1 · Indexingindexation-checksitemap and public URLs15 to 25 min
2 · Quick winsseo-quick-winSearch Console and browser15 to 20 min
3 · Heading structurenone, prompt and readingfull sitemap and browservariable
4 · Cannibalisationseo-cannibalisationSearch Console and browser15 to 20 min
5 · Internal linksmaillage-systeme then maillage-interne-gscbrowser and Search Console25 to 40 min
6 · Synthesisnone, assisted synthesisoutputs of phases 0 to 520 to 30 min

Phase 3 follows the size of the sitemap. On 800 URLs, it outweighs the other phases combined.

Phase 0 · Positioning

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.

Phase 1 · Indexing

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.

Phase 2 · Quick wins

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.

Phase 3 · Heading structure

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.

Phase 4 · Cannibalisation

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.

Phase 5 · Internal links, two passes

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.

Phase 6 · Synthesis and 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.

Checklist before you start

FAQ

Where people actually get stuck

Taken from 720 messages in the bootcamp group over ten days, ordered by frequency.

My skills sit in a system folder, how do I switch from one computer to another?

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.

Only three of my five skills trigger

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.

The client has no Search Console, can I still audit?

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.

My sitemap holds 800 URLs, is phase 3 realistic?

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.

Which model do I pick, and how do I avoid burning my session?

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.

Claude invented figures in my report

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.

Going further

The audit stops at diagnosis. Three limits come back on every engagement.

The logical next step

Download the complete technical SEO agent

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/en

One-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.