I'm going to give you solid arguments to sell you on setting up a system and to stop chatting in Claude or ChatGPT.
But first, there is a problem.
People often teach you what to do: do this, do that.
Much more rarely why you should do it, which data to rely on, and in which cases it's worth it.
For example, everybody tells you that you need to be cited by AI. That's a bad angle. The stake is to do everything you can to find keywords that LLMs won't eat in the next 5 years.
Another example: people sell you traffic curves to show you how good the SEO strategy was. In 2026, that's hard to accept. You now have to find business keywords and stop chasing traffic as if it were an interesting KPI.
Same thing for keyword volume: most of the keywords that bring in clients don't exist in classic SEO tools. Literally undetectable. Well, you have to find them. That's your mission as a consultant!
There is no hack or secret to tackle this GEO or AI SEO. Your data will make the difference. We're entering a data game, and nothing else.
Except that today you can't benefit from it, because you don't have a system. And you don't have permanent memory.
Oh, and it's not just about learning to write skills, it's about having a complete system that can act as an assistant. Like a junior consultant.
For example, you can ask it this:
| Score | Bar | /100 | Pb | Diagnosis |
|---|---|---|---|---|
| Surprise | 28 | 5 | Repeats the consensus, no proprietary data | |
| Grounding | 41 | 7 | 0.7 proof / 100 words, threshold at 2 | |
| Content Effort | 34 | 3 | Generic synthesis, no test run | |
| RRF Alignment | 62 | 4 | Pricing and integrations not covered | |
| RAG Structurer | 52 | 4 | Answer 78 words after the H2 "How to choose" | |
| Freshness Guard | 15 | 2 | Last date cited: 2023 | |
| Action Engine | 38 | 3 | Explains without letting you act |
What you see in the image is a mission I gave to my scoring agent.
It reads my text and scores each paragraph against my GEO criteria.
That lowers the risk of writing for nothing.
But you can also ask it to model your Google Search Console data, like we did with Seocity.app.
The only limit of the system is your ability to project yourself into the project and to come up with proposals.
Anyway, the arguments.
ARGUMENT 1: The system is meant to replace all your SEO tools
ARGUMENT 2: To win the SEO game, you will have to dominate the proprietary data game.
THE SETUP
You should never move to Obsidian without implementing the LLM wiki model:
ma-base/
Click a folder or a file.
AGENTS.md
the configuration, read at each session
Excerpt from my base (in French)
## 3. Architecture — 3 couches raw/ ← sources immuables (lecture seule pour l'agent) wiki/ ← domaine de l'agent (écriture exclusive) **Règle d'or** : `raw/` est immuable. L'agent lit, ne modifie jamais. ## 5.4 Citations et sourcing (DOCTRINE) - **Toute donnée chiffrée a une source** : [[sources/...]] - **Pas de source = pas d'affirmation** - Quand une source est vague, marquer `confidence: low` - Jamais d'invention de chiffres, benchmarks ou pourcentages
raw/
your sources, IMMUTABLE
articles/
monitoring, web clippings
data/
Search Console exports, crawls
clients/
client notes, briefs received
notes/
your notes, your call transcripts
wiki/
the agent's domain
index.md
the catalog of all pages
Excerpt from my base (in French)
- [[sources/2026-04-25-organikk-reddit-pour-geo]] — Reddit pour citations IA sans ban (ratio 9-1-1, 44 % citations sociales AI Overviews) - [[sources/2026-05-08-organikk-ranker-chatgpt-2026]] — Ranker dans ChatGPT : cite humains+sources, décisionnel d'abord (900M WAU) - [[sources/2026-05-13-algorithme-process-verifier-indexation]] — Audit indexation piloté par skill Claude, 9 points/URL, sans outil payant
log.md
the log, append-only
Excerpt from my base (in French)
## [2026-06-19] ingest | Playbook Reddit (SEO + GEO) - source_type: doctrine - source: [[sources/2026-06-19-playbook-reddit-seo-geo]] - entities touchées: 2 (création [[entities/reddit]], maj [[entities/perplexity]]) - concepts touchés: 1 (création [[concepts/parasite-seo]]) - pages créées: 3 / mises à jour: 2 (perplexity + index) - contradictions: N - angle SEO identifié: priorité GEO > parasite SEO > insights ; trou FR (pas de communauté SEO FR, pas d'étude de cas FR chiffrée) = cible étude first-party
hypotheses.md
the convictions not proven yet
Excerpt from my base (in French)
H-001 | Google Search utilise en prod une mémoire type Titans / MIRAS
| statut : heuristique
| contre-argument : papier de recherche DeepMind, pas une confirmation
de prod. Transfert non observable de l'extérieur.
H-004 | Une page « style wiki » est mieux citée en SGE qu'une page statique
| statut : ouvert
| contre-argument : à chercher (prochaine revue mensuelle)sources/
one sheet per ingested source
entities/
the named objects: algorithms, tools, players
Excerpt from my base (in French)
wiki/entities/perplexity.md ## Pages liées … [[sources/2026-04-13-call-04]] · [[sources/2026-06-19-playbook-reddit-seo-geo]] · [[concepts/aeo]] · [[concepts/data-proprietaire]] · [[entities/reddit]] · [[entities/chatgpt-search]] · [[entities/google-ai-mode]]
concepts/
the ideas and the mechanics
Excerpt from my base (in French)
--- type: concept title: Wiki persistant vs RAG aliases: [wiki-vs-rag] tags: [pattern-kb, rag, meta] created: 2026-04-11 updated: 2026-08-07 sources: 1 confidence: high status: stable ---
queries/
the questions filed as pages
Excerpt from my base (in French)
wiki/queries/2026-04-12-wiki-pattern-vs-grounding-score.md --- type: query sources: 8 confidence: medium status: stable --- # Le pattern wiki persistant optimise-t-il structurellement le Grounding Score ? **Réponse courte.** Oui, mais de façon indirecte et non validée empiriquement.
The principle comes from Andrej Karpathy.
The idea:
the LLM writes and maintains its own wiki.
In each new conversation, it can start again from what it has already learned and written.
My Obsidian space is split into two parts.
raw/
That's where I keep all the raw sources:
- client calls;
- Search Console exports;
- articles;
- other original data.
Claude never modifies this folder.
wiki/
That's the part organized by Claude, which connects the different sources from the different /raw folders
THE SYSTEM IN 4 ADVANTAGES
1. You have permanent memory:
Claude forgets the context → you need a local system with Obsidian
2. The system is an exponential model:
Tomorrow companies will buy your SEO system, and will stop paying a day rate
3. Fight technical isolation:
New models every day, you no longer know what to try. Here, you keep the same base and you iterate with structural updates, without ever starting again from 0
4. Huge efficiency gain:
No memory and no Obsidian → massive productivity loss, because you have no standardized process for your audits, keyword research, etc.
CLAUDE x OBSIDIAN: keywords
How the system thinks about keywords:
- Don't look for keywords eaten by LLMs, look for the ones your user will click on.
- 80% of keyword research is commodity → AI will do it as well as or better than any tool
- 20% is the real work: go and look on Reddit, on X, look for real expertise and real experience
- Drop the paid tools: keywords obviously, but semantics too
- Stop selling traffic → sell leads by finding business keywords
- Build corpora / databases per client for each keyword research, so the system goes and picks the information straight from them
- One SEO base shared by all your SEO projects holds all your strategies, thinking, studies and stats for future research
- Keywords must be researched with the client context: expertise, tone, point of view → no copy-paste from a classic SEO tool
The mission
Sort keywords by business interest and decide what to push, create, consolidate or discard
Output
- purchase intents;
- opportunities with no page created yet;
- underperforming pages;
- discarded queries;
- 3 actions maximum
Full skill
name: seo-mots-cles-business description: Sorts a site's keywords by business intent, with or without Search Console. Three gates, five decisions, no invented volume. Triggers: "business keywords", "which keywords to target", "what should my site fight for". # Business keywords ## What you give Claude - The offer and the conversion point (quote, appointment, purchase). - The target, the market, the language. - The URLs of the offer pages. - The Search Console export, Queries + Pages, 3 to 6 months, if you have it. - Client verbatims, if you have any. ## Instruction > Run seo-mots-cles-business on [URL]. Offer: [...], target: [...], conversion: [...], market: [...]. ## Steps 1. List the non-brand queries. Group the variants of one need into one intent. Flag each merge. 2. Without Search Console, collect Google Suggest, web search and verbatims. Two queries that share the same top 10 go on one page. 3. Discard what an AI answers without a click: definition, "how to", single fact. Keep purchase, price, comparison, reviews, local. 4. Run each intent through the three gates: - Matches the offer? Yes / No. - Business intent? Strong / Medium / Weak, read from the modifiers, never from the volume. - Demonstrated opportunity? Already captured / New / Not demonstrated. 5. Decide: PUSH, CREATE, CONSOLIDATE, DISCARD or TO VALIDATE. ## Observed demand Write Weak / Medium / Strong, with the signals named next to it. Strong: 5 Suggest variants or more, 7 mentions in calls or more. Only 20 Search Console impressions or more confirm the demand. ## Output - Diagnosis in one sentence. - 3 to 5 figures, with source and period. - Four tables: captured intents, opportunities with no page, underperforming pages, discarded queries with their reason. - 3 actions maximum, each justified by its gate. - What the data does not allow you to conclude. ## Rules - No invented volume, position or CPC. - No score out of 10. - A high-volume query outside the offer ends up DISCARDED, reason written. - Search Console does not show the whole market. - No page created by reflex. First look for an existing URL or existing content. Save the output in `YYYY-MM-DD-<site>-mots-cles-business.md`.
Your instruction
Run seo-mots-cles-business on . Offer: , target: , conversion: , market: .
CLAUDE x OBSIDIAN: SEO audit and pre-audit
- The indexing audit: no need to go to Search Console by hand, the system does it on its own
- The PageSpeed audit: the system checks whether your pages are fast, you don't need to do it yourself
- Audits no longer sell → stop billing them separately, they must be included or automated
- With a system: you no longer need to run the audit by hand for each client
- The audit enriches the site's memory → with each audit you feed the site's history for the system
- Automation must not remove the manual check, which lets you sense trends and weak signals, in Search Console in particular
- The audit without a CMS is simpler and faster, you run it straight from Claude
The mission
Analyze indexing, speed, content, cannibalization, internal linking, structured data and business keywords.
Output
- full diagnosis;
- priority business angle;
- overall SEO scoring;
- 90-day roadmap;
- indexing
- Hn structure
- items to fix
Pre-audit before a call
The pre-audit is separate from the full audit.
The mission
Prepare an SEO pre-audit before a call, from the URL alone and from public data.
Output
- Summary: 3 to 5 sentences.
- Diagnosis.
- Angle.
- Dated SEO state.
- Prioritized page templates.
- 90-day roadmap.
- Call notes.
- To verify.
Full pre-audit skill
name: seo-pre-audit description: Prepares an SEO pre-audit before a call, from the URL alone and from public data. Triggers: "prepare the pre-call", "run a pre-audit", "pre-call on [site]". # Pre-audit before a call ## What you give Claude - The site URL. - The offer, the target and the goal, if you know them. Otherwise Claude infers them and marks them "to confirm on the call". ## Instruction > Run a pre-audit on https://mysite.com. It sells [offer] to [target], the goal is [goal]. ## Hard rule No invented volume, position or traffic. An unverified figure carries `[TO SOURCE]` or "to collect on the call". ## 1. Public collection - Identity: age, size, offers, who decides. - Model: who pays, sales cycle, conversion point. - SEO: sitemap, useful pages, geo or decision pages, lastmod, redesign. - AI: queries absorbed by AI, or decision queries. - Proprietary data: client cases, method, internal figures. - To ask on the call: Search Console access, weight of each offer in revenue. ## 2. The 7 questions 1. Defensible niche: where to attack first. 2. Pain that costs money. 3. Page templates: 4 to 6. 4. Path to the lead. 5. Timing: why now. 6. Objections. 7. Call outcome: 90-day roadmap and proposal. Settle 2 or 3 of these questions. The others become questions for the call. ## 3. Output - Summary: 3 to 5 sentences. - Diagnosis. - Angle. - Dated SEO state. - Prioritized page templates. - 90-day roadmap. - Call notes. - To verify. No "visibility": talk about positions, AI citations, leads.
Your instruction
Run a pre-audit on . It sells to , the goal is .
The technical agents
1.1 internal linking agent:
- A skill knows the site's history and runs semantic calculations → it gives you the right page pairings
- The system suggests the right internal links so you don't have to look for them by hand
- The goal: avoid having only pages that go round in circles on informational content
- With internal linking automated by the system: one click and it's done
- Internal linking belongs to the technical part that is 80% automated (audit, keyword research, internal linking, technical fixes)
The mission
The system suggests the right internal links so you don't have to look for them by hand.
Output
- pillars and hubs;
- orphan pages;
- inbound / outbound;
- source and target of each link;
- passage;
- anchors;
- justification;
- 3 priority actions.
Full skill
name: maillage-systeme description: Audits and builds a site's internal linking without Search Console. Triggers: "audit the internal linking", "orphan pages", "linking plan". # Internal linking ## What you give Claude - The sitemap URL, or the list of articles. - Your 3 to 5 pillar keywords. - Your offer pages: audit, contact, quote, tool. ## Instruction > Audit the internal linking of mysite.com. My offer pages: [URL]. ## Step 0: crawl python3 ~/.claude/skills/maillage-systeme/scripts/crawl_graph.py https://mysite.com/sitemap.xml -o ./maillage-data Only `index.json` enters the conversation. A link present on 80% of pages or more is a template link. It doesn't count. ## Steps 1. Classify each page: Know or Do. 2. Group into pillars of 3 pages minimum, with one hub each. 3. Count body links by distinct source pages. Spot orphans and dead ends. 4. For each link to create: passage and 3 anchors (exact, partial, semantic). 5. Rank them: - orphan offer page; - Know to Do link; - hub to satellite; - orphan outside the offer; - link between pillars. ## Criteria for an anchor - It says what the target promises. - The sentence still reads well without the link. - It is not already used toward the same target. - The 5 words around it are about the target's topic. One failed criterion: the anchor is rejected. ## Output - Pillars and hubs. - Table: page, inbound, outbound, status. - Link plan: source, target, passage, anchors, justification. - Diagnosis in one sentence, 3 P1 actions maximum. - What the data does not allow you to conclude. ## Before adding the links - Read each passage out loud without the link. - Insert in batches of 10 to 20. - Rerun the crawl after each batch. - End criterion: zero orphan offer pages. ## Rules - No numeric score. - An orphan legal page is not a problem. - Links in the text, never in a "See also". - Never a link to the homepage from the content. Save the output in `YYYY-MM-DD-<site>-maillage.md`.
Your instruction
Audit the internal linking of . My offer pages: .
1.2 structured data agent:
The mission
Check that the information in the JSON-LD matches what the page displays.
Output
- markup present;
- inconsistent values;
- schemas to add or remove;
- JSON-LD validation.
Full skill
name: seo-donnees-structurees description: Sets up or audits a site's JSON-LD structured data, derived from the content of each page. Triggers: "structured data", "JSON-LD", "schema.org", "rich results", "markup". # JSON-LD structured data ## What you give Claude - Access to the site's code. - The URLs of the pages to check. - The real identity: name, logo, founder, social profiles. ## Instruction > Set up JSON-LD structured data on this project. > Check that the markup of [URL] matches what the page displays. ## Three rules 1. One source. All the JSON-LD comes from one module (`lib/schema.ts`). 2. One entity, referenced by `@id`. Organization, WebSite and Person are emitted once. 3. Derived from the content. A field typed by hand goes out of sync at the first edit. ## What each signal triggers | Signal in the page | Schema | |---|---| | Article | `Article` | | Any page | `BreadcrumbList` | | Real FAQ block | `FAQPage` | | YouTube video | `VideoObject` | | Numbered steps | `HowTo` | | Displayed price | `Product` / `Offer` | Never ask "which schema do you want". Read the page, emit what it proves. ## Procedure 1. Identify the framework and its version. 2. Find where the data lives. 3. Create `lib/schema.ts`. 4. Emit the site graph in the root layout. 5. Emit one JSON-LD array per page. 6. Delete the old redeclared blocks. 7. Validate with the Google and schema.org tools. ## Audit: three checks - The JSON is valid. - Each marked-up value exists as is on the page. - The markup serves a real Google feature. ## Forbidden - `FAQPage` or `HowTo` "just in case". - `aggregateRating`, reviews or prices that can't be verified. - Author and publisher redeclared on each page. - Hard-coded `wordCount` or dates. Ask for your approval before each write to the code.
Your instruction
Set up JSON-LD structured data on this project.
Check that the markup of matches what the page displays.
1.3 Indexing agent
The mission
Check whether pages are indexed, redirected, unknown or not testable.
Output
- HTTP (404/500, redirects)
- non-blocking robots.txt
- No noindex (HTML + header)
- Sitemap (presence, freshness)
- Sitemap ↔ source consistency
- Internal linking: how many inbound links per URL (crawl + hubs)?
- Content length (thin proxy)
- Estimated Google indexing (site:) or Search Console API
- Markdown report
Skill:
You are an SEO auditor specialized in indexing. Your role: check that Google can discover, crawl and index the pages we want to make visible.
What you are given
Domain: [site.com]
List of URLs: public sitemap.xml or urls.txt (one per line)
Priority pages: the 5-30 offer pages (business-critical)
Hub pages: / , /blog , footer, categories (for internal linking)
The 9 checks to run (read-only)
TECHNICAL (causes):
HTTP: final codes + redirects (301/302/200)?
robots.txt: does it block Googlebot or * on these URLs?
noindex: present in a meta tag or in an HTTP header?
Sitemap: present, consistent, lastmod < 6 months?
Consistency: sitemap URLs = given list? Orphans?
Internal linking: how many inbound links per URL (crawl + hubs)?
Content: length per URL (< 300 words = short, dig further)
GOOGLE (observation): 8. site: {URL} on Google (space requests 3-5s apart, detect rate limiting, mark "not testable" if blocked), or Search Console API if you have access 9. Soft 404: test 3 nonexistent URLs, record their title and canonical
Mandatory report
Markdown format with:
Summary: X/N pages with no confirmed defect
Key figures: table of the 9 checks
What blocks: max 3 problems, each = Observation + Proof + Impact + Action + Priority/Effort/Confidence
What works: what is working (avoid negative bias)
Google inspection: table of the URLs inspected one by one
Limits: what we could not test and why
Pre-decision (mandatory): diagnosis (1 sentence) → figures (3-5) → State (Critical/To improve/Healthy) → Problems + Actions P1-P3 → What we cannot conclude
Guardrails
Read-only: no Search Console submit, no forcing
Never: HTTP 200 = indexed, outside sitemap = problem, 1 link = not discovered
Always: "not testable" ≠ "not indexed"
Prioritize offer pages and real anomalies (accidental noindex, 404)
No extrapolation: N URLs tested ≠ whole cluster
Trigger
"Indexing audit of [domain], sitemap: [URL]"Your instruction
Indexing audit of , sitemap:
I'm adding a layer with a new model: JEV
Trying not to get too technical about Jev (but it's important to talk about it), it's a model used to verify, classify and score, not to write.
It receives a closed question, picks among several possible answers and gives its confidence level.
In my system, I use it mostly with three scripts: verifier.py to check whether each sentence is backed by the sources, liens.py to check the relevance of internal links, and matiere.py to detect proof or real data.
Its main interest is speed: about 0.8 second per call. Jev sorts the information, but doesn't make the final decisions.
In short, an assistant that answers fast, that can settle a question with a yes or a no, that can score an analysis, and that uses far, far fewer tokens.
The mission
JEV is there to sort and verify, not to write content for example.
verifier: looks at each sentence and checks where it comes from: a source, a deduction, nowhere, or filler.
- 71 Backed
- 58 Deduced
- 58 Absent from the corpus
- 6 Outside the sources
19 of which filler · Score 16/100
liens: spots the internal links that are useful and discards vague or misleading anchors.
matiere: looks for the solid proof available: figures, facts, client quotes or opinions.
calibrer: compares JEV's choices with mine. No automation until we reach 80% agreement on at least 30 cases.
The rule stays simple:
JEV sorts, but the final decision is always mine.
What we give it
- a draft;
- the sources: calls, tickets, site pages;
- the opportunities detected;
- my previous validations.
Output
- the unsourced or useless sentences
- the internal links to keep for internal linking
- the best proof available in my Obsidian on a given topic
- a history of decisions to improve the system
Where is your system at?
9 questions · Yes / No