Categoriepagina SEO-check

Audit van categorie- en listingpagina's op indexatie, filters, paginering, tekst en aanbod, in één Excel.

.zip, 7,9 kBversie 1.0.0bijgewerkt op

Wat doet deze skill?

Categorie- en listingpagina’s halen op veel sites het meeste zoekverkeer binnen, maar ze gaan ook het vaakst mis. Filters maken duizenden bijna identieke URL’s aan, paginering verstopt producten, en lege categorieën blijven indexeerbaar. Deze skill controleert die pagina’s als groep, omdat de oorzaak bijna altijd in het template of de filterlogica zit.

Per pagina krijg je de technische basis (status, indexeerbaarheid, canonical, title, H1), het aantal items in de lijst los van suggesties, of er een SEO-tekst staat, en het zoekvolume op het focuszoekwoord. Daarnaast beoordeelt hij elke filterparameter en de paginering.

Hoe werkt het?

  1. Lever een crawlexport aan of plak een lijst URL’s. De skill bepaalt welke URL’s listingpagina’s zijn.
  2. Hij haalt per pagina de kerngegevens op en telt de items in de resultatenlijst apart van suggestieblokken.
  3. Hij groepeert alle filter- en parameter-URL’s en geeft per parameter een advies: indexeerbaar, noindex, canonical of niet crawlbaar.
  4. Hij leidt per pagina een focuszoekwoord af en koppelt het zoekvolume uit je export of connector.
  5. Elke pagina krijgt een status: in orde, optimaliseren, kans, dun of leeg, duplicaat of technisch probleem.
  6. Hij controleert de telling op twee pagina’s en levert het werkboek op.

Wat je krijgt

  • Een Excel met een overzicht, een tab per pagina, een facettenanalyse en een pagineringscheck.
  • Per pagina een status en een opmerking met de concrete reden.
  • Een top 10 van acties met eigenaar en verwachte impact.
  • Een blok bronnen en duiding met wat gemeten en wat afgeleid is.

Goed om te weten

Laadt de site haar producten met JavaScript, dan heeft de skill een gerenderde crawl nodig voor een betrouwbare telling. Hij legt uit hoe je die met een custom extraction in Screaming Frog opzet. Zoekvolume komt alleen uit een tool of export die je aanlevert, nooit uit een schatting. Het focuszoekwoord is afgeleid uit URL, H1 en title, en dus een voorstel. De skill wijzigt niets aan je site.

Zo start je hem

Typ een van deze zinnen in een nieuw gesprek, of iets gelijkaardigs.

  • Check deze categoriepagina's: staat er een SEO-tekst op en hoeveel producten staan erop?
  • Welke filters op onze webshop mogen indexeerbaar zijn?
  • Audit de listingpagina's uit deze crawl en zoek de lege categorieën.

Wat er in de zip zit

3 bestanden, allemaal gewone tekst. Lees ze gerust na voor je de skill installeert.

categoriepagina-seo-check/SKILL.md7,3 kB
---
name: categoriepagina-seo-check
description: Audit van categorie-, listing- en overzichtspagina's (webshopcategorieën, aanbodpagina's, productoverzichten, vacature- of vastgoedlijsten) op indexatie, facetten en filters, paginering, canonicals, title, H1, SEO-tekst, aantal items, interne links en zoekvolume. Werkt met een crawlexport, een lijst URL's, Search Console-exports of een connector. Levert een Excel met één rij per pagina, een facetanalyse en een geprioriteerde lijst acties. Gebruik deze skill wanneer iemand vraagt om categoriepagina's of listingpagina's te checken, filterpagina's te beoordelen, te bepalen welke facetten indexeerbaar mogen zijn, lege of dunne categorieën te vinden, of wil weten of er een SEO-tekst op staat. Triggerzinnen - check deze categoriepagina's, audit onze listingpagina's, welke filters moeten indexeerbaar zijn, staat er een SEO-tekst op, hoeveel producten staan erop, faceted navigation SEO, paginering check.
---

# Categoriepagina SEO-check

Je beoordeelt listingpagina's als groep, omdat hun problemen bijna altijd uit het template en de filterlogica komen. Het resultaat is een werkboek met één rij per pagina, een analyse van de facetten en paginering, en een korte lijst acties.

## Vaste regels

- Nederlands, geen gedachtestreepjes.
- Verzin geen cijfers. Geeft een bron niets, schrijf "geen data". Zoekvolume zonder bron laat je leeg.
- Zet de duiding (hoe gemeten, wat afgeleid, beperkingen) in het werkboek zelf, niet alleen in de chat.
- Splits altijd waargenomen data (uit crawl, pagina of Search Console) van afgeleide data (focuszoekwoord, oordeel, aanbeveling).

## Stap 1: input en scope

Vraag niets als de input al duidelijk is. Bruikbaar, in volgorde van voorkeur:

1. **Crawlexport** (Screaming Frog `internal_all` of vergelijkbaar) van de site of een map. Zie `references/input-en-kolommen.md` voor de kolommen en de custom extraction die het item-aantal en de SEO-tekst meeneemt.
2. **Lijst URL's** van categoriepagina's. Haal ze dan zelf op met web fetch. Rendert de site de producten met JavaScript, zeg dat de telling dan onbetrouwbaar is zonder rendering en vraag om een crawl met JavaScript-rendering of een gerenderde export.
3. **Search Console-export** Pagina's (klikken, vertoningen, positie) en eventueel Zoekopdrachten per pagina. Optioneel, maar nodig om kansen te wegen.
4. **Zoekvolume**: een export uit een keywordtool, of een connector (DataForSEO, Semrush, Ahrefs) als die beschikbaar is.

Bevestig in één zin welke markt en taal je aanneemt voor zoekvolume.

Bepaal welke URL's listingpagina's zijn. Gebruik het URL-patroon (bijvoorbeeld `/c/`, `/categorie/`, `/collections/`, `/te-koop/`), de sitemapnaam of de paginastructuur. Leg het patroon vast in de duiding.

## Stap 2: haal per pagina de kerngegevens

Per URL wil je:

- Status, indexeerbaarheid, meta robots, X-Robots-Tag.
- Canonical en of die naar zichzelf wijst.
- Title en lengte, meta description en lengte, H1.
- Aantal items in de resultatenlijst, gescheiden van suggesties, "ook interessant", recent bekeken of verkochte items. De teller die de site zelf toont is vaak te hoog of telt suggesties mee. Rapporteer beide naast elkaar en leg het verschil uit.
- Geen-resultaten-melding aanwezig (ja of nee).
- SEO-tekst: tekst van minstens 100 tekens buiten header, nav, footer, productkaarten en vaste sitebrede blokken. Aantal woorden en of de tekst boven of onder de lijst staat.
- Paginering: rel next/prev (informatief), canonical op pagina 2+, indexeerbaarheid van pagina 2+, of pagina 2+ via gewone links bereikbaar is.
- Interne links: unieke inlinks, klikdiepte, of de pagina in menu of breadcrumb zit, en het aantal links naar subcategorieën.
- Structured data: BreadcrumbList en ItemList aanwezig (alleen als de crawl dat meeneemt).

## Stap 3: facetten en parameters

Dit is waar listingpagina's het vaakst misgaan. Lees `references/facetten-en-paginering.md` voor de beslisregels.

1. Groepeer alle gecrawlde of in Search Console gevonden URL's met parameters of filterpaden per parameter (bijvoorbeeld `kleur`, `maat`, `sort`, `page`).
2. Tel per parameter: aantal URL's, hoeveel indexeerbaar, hoeveel met canonical naar de basiscategorie, hoeveel met vertoningen in Search Console.
3. Beoordeel per parameter met de beslisregels: indexeerbaar als eigen landingspagina, noindex, canonical naar basis, of niet crawlbaar maken.
4. Combinaties van twee of meer filters zijn standaard niet indexeerbaar, tenzij er aantoonbaar zoekvolume op de combinatie zit.

## Stap 4: focuszoekwoord en zoekvolume

- Leid per pagina een focuszoekwoord af uit URL, H1 en title. Markeer het als afgeleid.
- Vraag ook een variant op als die realistisch is (enkelvoud en meervoud, met of zonder voorzetsel, merk plus categorie).
- Zoekvolume komt alleen uit een tool of export. Let op en noteer in de duiding: tools clusteren varianten tot hetzelfde cijfer, volumes zijn afgerond, plaatsnamen die ook elders bestaan geven vertekende cijfers, en "geen resultaat" betekent niet nul zoekopdrachten.
- Heb je Search Console-zoekopdrachten per pagina, vermeld dan de belangrijkste zoekopdracht en of die overeenkomt met het focuszoekwoord.

## Stap 5: beoordeel elke pagina

Ken per pagina één status toe en zet de reden in de opmerkingkolom:

| Status | Wanneer |
|---|---|
| In orde | Indexeerbaar, eigen canonical, items aanwezig, title en H1 kloppen met het zoekwoord, SEO-tekst aanwezig waar volume is. |
| Optimaliseren | Indexeerbaar met items, maar title, H1, tekst of interne links schieten tekort. |
| Kans | Zoekvolume aanwezig maar de pagina ontbreekt, is niet indexeerbaar of krijgt weinig interne links. |
| Dun of leeg | Nul items of minder dan de drempel (standaard 3, aan te passen) of alleen suggesties. Advies: tijdelijk noindex, samenvoegen met de bovenliggende categorie, of schrappen met 301, afhankelijk van of het aanbod terugkomt. |
| Duplicaat | Zelfde items en intentie als een andere categorie. Advies: samenvoegen of canonical. |
| Technisch probleem | Fout in status, canonical, robots of paginering. |

Een lege pagina met een geen-resultaten-melding en status 200 is een soft 404-risico. Meld dat expliciet.

## Stap 6: bouw het werkboek

Tabs:

1. **Overzicht**: aantallen per status, per categorieniveau en per paginatype; de top 10 acties (actie, aantal pagina's, eigenaar Dev of Content, verwachte impact); en het blok "Bronnen en duiding".
2. **Pagina's**: één rij per URL met de kolommen uit `references/input-en-kolommen.md`, plus Status en Opmerking. Bevroren kopregel, autofilter.
3. **Facetten**: één rij per parameter of filterpad met aantallen en het advies.
4. **Paginering**: alleen als er paginering is, één rij per categorie met het aantal pagina's en de bevindingen.

Bestandsnaam: `<domein>_categoriepaginas-check.xlsx`.

## Stap 7: controleer en lever op

- Controleer de itemtelling op twee pagina's die je zelf opent: één met veel items en één zonder. Wijkt de telling af van de crawl, dan heeft de renderer te vroeg gemeten of tel je suggesties mee. Pas aan en meld het.
- Tel na of elke URL uit de input in het werkboek staat.

In de chat: een korte tabel per status (aantal pagina's), drie tot vijf bevindingen met cijfers (pagina's zonder tekst met volume, lege pagina's die indexeerbaar zijn, facetten die crawlbudget opslokken), en de beperkingen.

Gemaakt door Depends (depends.be). Vrij te gebruiken en aan te passen.
categoriepagina-seo-check/references/facetten-en-paginering.md4,2 kB
# Beslisregels voor facetten en paginering

## Facetten en filters

Beoordeel elke parameter of elk filterpad apart. Gebruik deze volgorde.

1. **Verandert de parameter de inhoud niet?** (sortering, weergave, aantal per pagina, tracking zoals `utm_`, `gclid`, sessie-ID's)
   Advies: canonical naar de URL zonder parameter, niet linken met gewone links waar mogelijk, en uitsluiten in de sitemap. Bij grote volumes in de crawl of in crawlstatistieken: blokkeren in robots.txt, maar pas nadat de URL's niet meer geïndexeerd zijn.

2. **Verfijnt de parameter naar een zoekintentie met eigen volume?** (merk, type, materiaal, plaats binnen een categorie: "zwarte sneakers", "appartement te huur gent")
   Indexeerbaar maken als eigen landingspagina als alles waar is:
   - er is aantoonbaar zoekvolume (uit een tool of uit Search Console-zoekopdrachten);
   - de pagina heeft structureel genoeg items (standaard minstens 3);
   - de URL is statisch en stabiel (bij voorkeur een pad, geen willekeurige parametervolgorde);
   - title, H1 en eventueel een korte tekst kunnen per waarde ingevuld worden.
   Anders: noindex, follow, of canonical naar de basiscategorie.

3. **Is het een combinatie van twee of meer filters?**
   Standaard niet indexeerbaar en bij voorkeur niet crawlbaar (links via JavaScript of formulier, of robots.txt bij grote aantallen). Uitzondering alleen bij aantoonbaar volume op de combinatie.

4. **Prijs, beschikbaarheid, beoordeling, bereik-filters**
   Nooit indexeerbaar. Niet crawlbaar maken.

### Signalen dat facetten crawlbudget kosten

- Meer filter-URL's dan basiscategorieën in de crawl (vuistregel: factor 10 of meer).
- Veel filter-URL's in "Gecrawld, momenteel niet geïndexeerd" of "Dubbele pagina zonder door de gebruiker geselecteerde canonieke versie".
- Dezelfde filtercombinatie in verschillende parametervolgordes (`?kleur=zwart&maat=42` en `?maat=42&kleur=zwart`).
- Canonical naar de basis, maar Google kiest toch de filter-URL als canonical.

### Valkuilen

- Noindex en canonical tegelijk op dezelfde pagina naar een andere URL geven Google tegenstrijdige signalen. Kies één.
- Robots.txt-blokkade verhindert dat Google een noindex ziet. Blokkeer pas als de URL's uit de index zijn.
- Een filter-URL die in de sitemap staat maar noindex heeft, is een tegenstrijdig signaal.

## Paginering

Controleer per categorie met meer dan één pagina:

| Check | Goed | Probleem |
|---|---|---|
| Bereikbaarheid | Pagina 2+ via gewone `a href`-links | Alleen via "laad meer"-knop of oneindig scrollen zonder link |
| Canonical op pagina 2+ | Naar zichzelf | Naar pagina 1 (items op pagina 2+ verliezen dan hun interne link) |
| Indexeerbaarheid pagina 2+ | Indexeerbaar of noindex, follow, bewust gekozen | Noindex, nofollow |
| Title en H1 pagina 2+ | Paginanummer toegevoegd, of identiek met canonical naar zichzelf | Exacte duplicaten zonder enige differentiatie, bij veel pagina's |
| SEO-tekst | Alleen op pagina 1 | Zelfde tekst op elke pagina |
| URL | `?page=2` of `/page/2/`, consequent | Pagina 1 bereikbaar onder twee URL's (`/cat/` en `/cat/?page=1`) |
| Diepte | Belangrijke items binnen een paar pagina's | Honderden pagina's diep; overweeg meer items per pagina of subcategorieën |

rel next en prev gebruikt Google niet meer als signaal. Ontbreken ervan is geen issue; vermeld het alleen informatief.

## Dunne en lege categorieën

| Situatie | Advies |
|---|---|
| Tijdelijk leeg, aanbod komt terug (seizoen, voorraad) | Indexeerbaar laten met een nuttige tekst en links naar verwante categorieën, of tijdelijk noindex. Geen 404. |
| Structureel leeg of minder dan 3 items | Samenvoegen met de bovenliggende categorie en 301, of noindex als de pagina nodig is voor navigatie. |
| Leeg met status 200 en een geen-resultaten-melding | Soft 404-risico. Melden als technisch probleem. |
| Duplicaat van een andere categorie | Samenvoegen en 301, of canonical als beide om navigatieredenen moeten blijven. |

## SEO-tekst

- Zinvol bij zoekvolume op de categorie. Niet nodig op elke categorie.
- Kort boven de lijst (één of twee zinnen die de selectie uitleggen), uitgebreider onder de lijst.
- Geen tekst die op elke categorie hetzelfde is met alleen de categorienaam gewisseld.
- Vermeld het aantal woorden en of de tekst uniek is ten opzichte van andere categorieën als je dat kan nagaan.
categoriepagina-seo-check/references/input-en-kolommen.md4,3 kB
# Input en kolommen

## Crawlexport

Uit Screaming Frog (Internal, filter HTML, exporteren als CSV of XLSX) of een vergelijkbare crawler. Kolommen die je gebruikt:

| Rol | Screaming Frog-kolom |
|---|---|
| URL | Address |
| Status | Status Code |
| Indexeerbaarheid | Indexability, Indexability Status |
| Robots | Meta Robots 1, X-Robots-Tag 1 |
| Canonical | Canonical Link Element 1 |
| Title | Title 1, Title 1 Length, Title 1 Pixel Width |
| Meta description | Meta Description 1, Meta Description 1 Length |
| H1 | H1-1, H1-2 |
| Woorden | Word Count |
| Klikdiepte | Crawl Depth |
| Inlinks | Unique Inlinks |
| Paginering | rel="next" 1, rel="prev" 1 (indien geëxporteerd) |

Word Count telt de hele pagina, inclusief productkaarten. Het is dus geen maat voor de SEO-tekst. Gebruik daarvoor een custom extraction.

### Aanbevolen custom extraction

Laat de gebruiker in de crawler (Configuratie, Custom, Extraction) deze extracties toevoegen, met JavaScript-rendering aan als de lijst met JavaScript laadt. Pas de selectors aan de site aan.

| Naam | Type | Voorbeeld |
|---|---|---|
| Items | CSS, functie Count | `.product-list .product-card` |
| Teller | CSS, tekst | `.result-count` |
| SEO-tekst | CSS, tekst | `.category-description` |
| Geen resultaten | CSS, tekst | `.no-results` |

Zonder custom extraction kan je de itemtelling en de SEO-tekst niet betrouwbaar uit een crawl halen. Zeg dat dan en werk met web fetch op een steekproef, of vraag om de extractie.

### Itemtelling met JavaScript (als je de pagina zelf rendert)

Gebruik dit als basis als je een browser of een renderende tool met JavaScript-uitvoer hebt. Pas de selector voor detaillinks en de kop van het suggestieblok aan.

```js
var o={};
o.title=document.title;
var md=document.querySelector('meta[name="description"]');o.desc=md?md.content:null;
var h1=document.querySelector('h1');o.h1=h1?h1.innerText.trim():null;
var cn=document.querySelector('link[rel="canonical"]');o.canonical=cn?cn.href:null;
var DETAIL=/\/product\//;          // patroon van een detaillink, aanpassen
var STOP=/ook interesse|aanbevolen|recent bekeken/i;  // kop van het suggestieblok, aanpassen
var hs=[].slice.call(document.querySelectorAll('h2,h3')),stop=null;
for(var i=0;i<hs.length;i++){if(STOP.test(hs[i].innerText)){stop=hs[i];break}}
var links={},sugg={};
[].slice.call(document.querySelectorAll('a[href]')).forEach(function(a){
  var h=a.getAttribute('href');if(!DETAIL.test(h))return;
  if(stop&&(stop.compareDocumentPosition(a)&4))sugg[h]=1;else links[h]=1});
o.items=Object.keys(links).length;o.suggesties=Object.keys(sugg).length;
var m=document.body.innerText.match(/([\d\.]+)\s*(resultat|producten|artikelen)/i);o.teller=m?m[1]:null;
var txt=[];[].slice.call(document.querySelectorAll('p')).forEach(function(p){
  var t=(p.innerText||'').trim();if(t.length<100)return;
  if(p.closest('header,nav,footer,[class*="product"],[class*="card"]'))return;
  if(txt.indexOf(t)<0)txt.push(t)});
o.seo_woorden=txt.join(' ').split(/\s+/).filter(Boolean).length;o;
```

Wacht vier tot vijf seconden na het laden voor je meet. Een te vroege meting geeft nul items.

## Search Console

- Prestaties, tab Pagina's, laatste 3 maanden, export: Pagina, Klikken, Vertoningen, CTR, Positie.
- Optioneel per pagina de tab Zoekopdrachten (filter op pagina) voor de belangrijkste zoekopdracht.
- Optioneel Indexering, Pagina's: drilldowns "Gecrawld, momenteel niet geïndexeerd", "Dubbele pagina zonder door de gebruiker geselecteerde canonieke versie" en "Alternatieve pagina met correcte canonieke tag". Daar zie je hoe Google met filter- en pagineringsURL's omgaat.

## Zoekvolume

Een CSV of XLSX uit een keywordtool met minstens Zoekwoord en Volume. Met een connector: vraag het volume op per batch van ongeveer tien zoekwoorden en controleer achteraf of elk zoekwoord een resultaat kreeg.

## Kolommen in de tab Pagina's

URL, Categorieniveau, Statuscode, Indexeerbaar, Meta robots, Canonical, Canonical naar zichzelf, Title, Title lengte, Meta description, Meta lengte, H1, Items in lijst, Teller op pagina, Waarvan suggesties, Geen-resultaten-melding, SEO-tekst aanwezig, Woorden SEO-tekst, Positie tekst (boven of onder), Paginering (aantal pagina's), Klikdiepte, Unieke inlinks, In menu of breadcrumb, Klikken, Vertoningen, Positie, Focuszoekwoord (afgeleid), Zoekvolume, Variant, Zoekvolume variant, Status, Opmerking.

Laat kolommen weg waarvoor geen bron is en zeg dat in de duiding.

Installeren

Zo zet je hem in Claude

In Claude.ai of Claude Desktop

  1. Download categoriepagina-seo-check.zip. Pak hem niet uit.
  2. Ga naar Instellingen › Capabilities en zet code-uitvoering aan als dat nog niet zo is.
  3. Kies bij Skills voor Upload skill en selecteer de zip.
  4. Start een nieuw gesprek. Claude gebruikt de skill vanzelf zodra je vraag erbij past.

In Claude Code

  1. Download categoriepagina-seo-check.zip.
  2. Pak hem uit in je persoonlijke skillmap, of in .claude/skills/ van een project om hem met je team te delen:
unzip categoriepagina-seo-check.zip -d ~/.claude/skills/

Start Claude Code opnieuw. Met /skills zie je of hij geladen is.

Andere skills

Alle skills

Wil je dat we het samen met je team opzetten?

Plan een gesprek van 30 minuten met Mathias, de oprichter van Depends.

Plan een gesprek

info@depends.be+32 470 86 43 26

Bel onsPlan een kennismaking →