Waarom we het hebben gemaakt
Het afgelopen jaar hebben we een flink aantal websites getoetst op hun geschiktheid voor zoekmachines en AI. Wanneer de site op Statamic draaide, waren de bevindingen opvallend consistent.
De SEO-configuratie bestond zelden uit slechts één onderdeel. Het betrof een meta-tag-add-on, een aparte sitemap-add-on, een omleidingspakket, soms een handmatig geschreven JSON-LD-fragment in de lay-out en af en toe nog een GEO-add-on erbij. Elk had zijn eigen instellingenscherm en zijn eigen idee over wat de paginatitel moest zijn. Als twee ervan het niet eens waren, werd de pagina met beide antwoorden weergegeven.
En er was één vraag die bijna niemand kon beantwoorden: lezen AI-assistenten deze site eigenlijk wel? Veel sites hadden een llms.txt-bestand toegevoegd. Maar slechts heel weinig sites konden nagaan of ChatGPT, Claude of Perplexity er ooit om hadden gevraagd.
Daarom hebben we een add-on ontwikkeld die die stack vervangt. Deze heet SEO & GEO, is open source onder de MIT-licentie en is nu beschikbaar op Packagist en GitHub.
Wat het doet
De add-on biedt alles wat een Statamic-website nodig heeft om gevonden te worden, met één set instellingen, één onderdeel in het configuratiescherm en één sjabloontag. Hieronder volgt een overzicht van wat dat precies inhoudt, ingedeeld naar wie er baat bij heeft.
Voor redacteuren
Live voorbeelden. Elk SEO-tabblad begint met een voorbeeld van het Google-zoekresultaat en de social card, die worden bijgewerkt terwijl de redacteur typt. Titels en beschrijvingen worden afgekapt op basis van een vaste pixelbreedte, zo knipt Google ze namelijk ook af, in plaats van op basis van het aantal tekens. Het voorbeeld geeft een waarschuwing wanneer een beschrijving ontbreekt, wanneer een titel te lang is of wanneer de pagina verborgen is voor zoekresultaten.
Een klein detail dat we erg waarderen: in het voorbeeld van Google wordt bewust geen afbeelding getoond. Google haalt zijn miniatuurafbeelding uit de inhoud van de pagina, niet uit de afbeelding die wordt gedeeld, en doen alsof dat niet zo is, zou de redacteur op het verkeerde been zetten.
Metatags. Titel, beschrijving, canonical, robots, Open Graph, Twitter-kaarten, hreflang en verificatie via Search Console: allemaal vanuit één tag. Velden op paginaniveau hebben voorrang op de standaardinstellingen voor de hele site, en bij een multisite-installatie kan elke site die standaardinstellingen op zijn beurt weer overschrijven.
Voor zoekmachines
Sitemap. Beschikbaar via /sitemap.xml, samengesteld uit gepubliceerde, routeerbare items. Pagina’s of hele collecties kunnen worden uitgesloten. Bij multisite-installaties voegt het alternatieve hreflang-tags toe en schakelt het automatisch over naar een sitemap-index zodra de URL’s niet meer in één bestand passen.
Omleidingen. Regels op basis van exacte overeenkomsten, jokertekens en reguliere expressies (301, 302, 410), per site gedefinieerd, met ondersteuning voor query-strings voor oudere URL’s zoals /index.php?id=42. Omleidingen worden alleen gecontroleerd wanneer een URL anders een 404-fout zou retourneren, dus het laden van normale pagina’s kost hier niets extra’s.
Wat nog belangrijker is: wanneer de URL van een pagina verandert, bijvoorbeeld door een hernoemde slug, een verplaatsing binnen de structuur of een gewijzigde datum, wordt er automatisch een omleiding aangemaakt. Dit is de fout die we het vaakst tegenkwamen bij audits. Iemand ruimt een slug op, de oude URL geeft vervolgens een 404-foutmelding en maanden aan opgebouwde zoekwaarde verdwijnen stilletjes.
404-log. Elke miss wordt per site geregistreerd, samen met het aantal hits en de verwijzende pagina’s. Elk item kan met één klik worden omgezet in een omleiding.
Voor AI-assistenten
Gestructureerde gegevens. Organisatie of LocalBusiness, Website en BreadcrumbList voor de hele site, plus per pagina een knooppunt voor FAQ, Artikel, Dienst, Persoon, Product of Evenement. Een onbewerkt JSON-LD-veld omvat al het overige. Coördinaten worden via OpenStreetMap op basis van het bedrijfsadres geocodeerd en in de cache opgeslagen.
llms.txt. Beschikbaar via /llms.txt, met een beschrijving van de site en de pagina’s voor AI-assistenten, inclusief een bewerkbare samenvatting.
robots.txt met een beleid voor AI-crawlers. Geef alle AI-crawlers toegang, blokkeer ze allemaal of maak per geval een keuze; dit kunt u beheren via het configuratiescherm.
AI-crawlerlog. Dit is de functie die we als eerste zouden aanbevelen. De add-on registreert welke assistenten – ChatGPT, Claude, Perplexity, Gemini en andere – daadwerkelijk verzoeken indienen bij de site, en geeft die activiteit weer in een dashboardwidget, samen met recente 404-fouten.
Wat het niet doet
Het is de moeite waard om hier duidelijk over te zijn, want in de GEO-sector worden al veel te hoge verwachtingen gewekt.
Geen enkele add-on kan ervoor zorgen dat je website door een AI-assistent wordt genoemd. Gestructureerde gegevens en een llms.txt-bestand maken een website begrijpelijker voor AI-systemen. Of een bepaalde assistent uw bedrijf vervolgens in een bepaald antwoord noemt, wordt elders bepaald, door processen waar niemand buiten die bedrijven controle over heeft. Met name llms.txt is een voorgestelde conventie, geen vastgestelde standaard, en er is nog geen hard bewijs dat het op zichzelf voor vermeldingen zorgt.
Dat is precies waarom het crawlerlogboek voor ons zo belangrijk is. Het belooft geen specifiek resultaat. Het vervangt giswerk door observatie: je kunt zien welke assistenten langskomen, hoe vaak, en of dat verandert nadat je je inhoud hebt verbeterd. Paraatheid en metingen zijn wat we daadwerkelijk kunnen bieden. De add-on is rond die twee aspecten opgebouwd.
Enkele technische keuzes, voor ontwikkelaars
Dit volgt de opslag van de site. Standaard plat bestand: instellingen en omleidingen in YAML onder versiebeheer, logbestanden in de opslag. Als het project gebruikmaakt van statamic/eloquent-driver, wordt alles wat bij de add-on hoort ook naar de database verplaatst, zonder dat daarvoor configuratie nodig is. Er zijn commando’s beschikbaar om gegevens in beide richtingen te verplaatsen.
De migratie is ingebouwd. php please vulpo:seo:migrate --dry-run laat zien wat er zou veranderen bij een overstap vanuit SEO Pro of onze eigen eerdere vulpo/geo-add-on. Totdat je migreert, worden de oude veld-handles nog steeds gelezen tijdens het renderen, dus het wisselen van add-ons veroorzaakt op dat moment geen problemen. Omleidingen kunnen ook in bulk worden geïmporteerd vanuit een CSV-bestand.
Het script voor het configuratiescherm is ‘buildless’. Het wordt geregistreerd via de globale variabelen die Statamic al beschikbaar stelt, dus er is geen npm-afhankelijkheid, geen Vite-configuratie en er hoeft niets opnieuw te worden gebouwd wanneer Statamic een nieuwe minorversie uitbrengt. De schermen van het configuratiescherm maken gebruik van Statamics eigen UI-componenten, waardoor ze er net zo uitzien als de rest van het configuratiescherm.
Verstandige caching. /sitemap.xml, /robots.txt en /llms.txt verzenden Cache-Control-headers met stale-while-revalidate, zodat een CDN een crawler nooit laat wachten op een heropbouw. Vermeldingen die alleen doorverwijzen, worden weggelaten uit de sitemap en llms.txt, zodat je nooit de URL van een andere pagina als je eigen URL presenteert.
Hiervoor zijn PHP 8.3 en Statamic 6 vereist. De installatie verloopt via twee commando’s:
composer require vulpo/seo-and-geo
php please vulpo:seo:index-uris
Voeg vervolgens {{ vulpo_seo }} toe aan de <head> van je lay-out. De instellingen vind je onder Tools → SEO. In het README-bestand staat de rest beschreven, inclusief een eerlijke lijst met bekende beperkingen.
Wat dit betekent als je een Statamic-website beheert
Als je geen ontwikkelaar bent, komt het er kort gezegd op neer dat je website waarschijnlijk afhankelijk is van verschillende afzonderlijke tools om in de zoekresultaten te verschijnen, en dat die tools niet altijd goed op elkaar zijn afgestemd. Door ze te vervangen door één add-on zijn er minder plekken waar stilletjes iets mis kan gaan, zoals een hernoemde pagina die niet meer te vinden is, of twee conflicterende titels in je zoekresultaten.
Het betekent ook dat je eindelijk kunt zien of AI-assistenten aandacht besteden aan je website. Dat zegt nog niets over de vraag of ze je zullen aanbevelen. Het laat je wel zien of ze je website lezen.
Probeer het eens, of laat ons eens naar je website kijken
De add-on is gratis en open source. Ontwikkelaars kunnen deze vinden op GitHub en Packagist. Issues en pull-verzoeken zijn van harte welkom.
Als je liever eerst wilt weten hoe je website ervoor staat voordat je iets verandert, dan kun je met onze gratis GEO-audit controleert je gestructureerde gegevens, metatags en AI-gereedheid, en laat zien wat daadwerkelijk een verschil zou maken.