SEO-audit
Technische en on-page SEO
De meeste SEO-checks geven je een lijst van honderd dingen die "beter kunnen". Daar heb je niets aan. Deze skill kijkt naar wat een zoekmachine echt tegenkomt in de gerenderde HTML, en sorteert de uitkomst op wat het je kost: eerst wat indexering blokkeert, dan wat je posities kost, en pas daarna de kleine dingen.
Zet hem in je eigen agent
Kies je client. Het commando staat er klaar voor.
/plugin marketplace add ASNNetworks/floh-skillseenmalig/plugin install seo-audit@floh-skillsTyp deze twee in een Claude Code-sessie. De skill is meteen daarna beschikbaar; herstarten is niet nodig.
Wat je nodig hebt
- Python 3.10 of hoger (alleen de standaardbibliotheek)
- Een bereikbare URL of een lokaal HTML-bestand
Zo ziet het eruit
Een echte sessie, stap voor stap afgespeeld.
De kern
Blokkades eerst
noindex, een lege title, een ontbrekende of dubbele h1, een canonical die naar een ander domein wijst. Zolang hier iets openstaat, doet de rest er niet toe.
Leest de gerenderde HTML
Niet je componenten, maar wat er echt over de lijn gaat. Content die pas na hydration verschijnt, wordt als zodanig gemeld.
Structured data die klopt
Controleert of je JSON-LD parset en of het schema past bij wat de pagina werkelijk is. Een Product-schema op een blogartikel is erger dan geen schema.
Altijd het pad erbij
"12 afbeeldingen zonder alt" is geen bevinding. De twaalf paden wel. Elke melding komt met bestand en regel.
Wanneer je hem pakt
Voor je publiceert
Nieuwe pagina klaar? Laat hem checken voordat hij live gaat, in plaats van er over drie weken achter te komen dat de canonical verkeerd stond.
Als een pagina niet rankt
Begin bij de techniek voordat je aan de inhoud gaat sleutelen. Vaak is het een noindex die iemand ooit tijdelijk aanzette.
Bij een migratie
Na een verhuizing van URL-structuur draai je hem over een steekproef en zie je meteen welke redirects of canonicals de mist in gingen.
In je CI
Het script geeft exit 1 bij een kritieke bevinding, dus je kunt een build laten falen op een ontbrekende title.
Lees hem voordat je hem draait
Dit is precies wat er in de map komt te staan. Geen verrassingen, geen verborgen stappen.
3 bestanden
---
name: seo-audit
description: Audit a web page or a whole site for technical and on-page SEO problems, ranked by what actually moves rankings. Use when asked to review SEO, diagnose why a page does not rank, check metadata and structured data, or prepare a page for indexing.
---
# SEO audit
Audit a page the way a search engine reads it: fetch the rendered HTML, check what is
actually in it, and rank findings by impact rather than by how easy they are to spot.
## When to use this
Reach for this skill when someone asks why a page is not ranking, wants metadata or
structured data checked, is about to publish something and wants it indexable, or asks
for "an SEO check" in any wording.
Do not use it for keyword research or content strategy. This skill inspects what exists.
## How to run it
1. **Get the rendered HTML.** Server-rendered markup is what matters. Fetch the URL, or
for a local project read the built output rather than the source component.
2. **Run the checker.**
```bash
python3 scripts/audit.py <url-or-file> --json
```
It returns findings grouped as `critical`, `important` and `polish`.
3. **Read the findings in that order and stop adding your own.** The temptation is to
list every deviation from a best-practice checklist. Do not. A page with a missing
`<title>` does not need a note about image lazy-loading in the same breath.
## What gets checked
**Critical** — the page cannot rank or cannot be indexed:
- `noindex` in a meta robots tag or an `X-Robots-Tag` header
- missing or empty `<title>`
- missing `<h1>`, or more than one
- canonical pointing somewhere unexpected (another host, a redirect, itself via a
different protocol)
- the main content is absent from server-rendered HTML and only appears after hydration
- 4xx/5xx on the URL itself or on the canonical target
**Important** — the page ranks worse than it should:
- `<title>` outside 30-60 characters, or duplicated across pages
- meta description missing, or outside 120-160 characters
- heading hierarchy that skips levels
- images without `alt`, links whose only text is "hier" or "lees meer"
- no structured data where the content type clearly has a schema (`Article`, `FAQPage`,
`BreadcrumbList`, `Product`)
- structured data present but failing validation
- Open Graph or Twitter card incomplete, so shares render bare
**Polish** — real but small:
- no `lang` attribute
- absolute internal links where relative would do
- trailing-slash inconsistency against the rest of the site
## Reporting
Write findings as: what is wrong, what it costs, and the exact fix. One line each.
```
CRITICAL <title> is empty
Google renders the URL as the result title. Nothing else on this page
matters until this is fixed.
→ app/kennis/[slug]/page.tsx:31 — generateMetadata returns no title when
post.seoTitle is undefined; fall back to post.title.
```
Never report a count without the list. "12 images missing alt text" is not actionable;
the twelve paths are.
## Things that look like problems and are not
- **A canonical that points to itself.** That is correct and expected.
- **Multiple `<h2>`s.** Fine. Only `<h1>` is constrained.
- **A low word count.** Not a ranking factor on its own. A short page that answers the
query completely beats a padded one.
- **Missing keywords meta tag.** No search engine has used it for over a decade.
## Files
- `scripts/audit.py` — the checker. Runs offline against a file, or fetches a URL.
- `references/schema-types.md` — which structured-data type fits which page, with the
required fields for each.
Wat er veranderd is
- v1.0.0huidig
- Eerste versie: indexering, title, headings, canonical, structured data, Open Graph, alt-teksten en ankerteksten.
- audit.py draait offline tegen een bestand of haalt een URL op.
- Referentie erbij met het juiste schema-type per paginasoort.
Werkt hij voor je?
Over SEO-audit
Wat mensen vragen voordat ze hem installeren.
Combineert goed met
Zo een, maar dan voor jouw werk?
Elke skill hier komt uit werk dat ik echt deed. Zit er iets in jouw proces dat je telkens opnieuw uitlegt aan een agent, dan is dat precies een skill.