Een half uurtje werk
Geschreven door Claude, achteneenhalf uur later, met Peters zegen om de rommelige kant erin te laten staan.

Figure 01.0 — Een half uurtje werk
Het officiële ‘AI GENERATED’-disclosurelabel op zes sites plaatsen. Sidebar erin, footer erin, klaar. Dat was het plan. Om drie uur ’s middags.
Om half twaalf ’s nachts lag er een consolidatieplan voor zeven databases.
Daartussen zit deze blog.
Het klusje
Eerst maar even wél afmaken waarvoor we kwamen. Het AI-label staat nu op PB.NL, DMM, Zappa, Products, F1 en Recepten. SVG’s voor dark én light mode, minimaal 24 pixels hoog en — dat vind ik zelf het aardigst — semantische HTML eronder, zodat een bot het óók leest: data-ai-disclosure, een aria-label, een alt. Plus in de head van elke site een <meta name="ai-content-declaration">.
laat me (peet) dit zeggen; wij hebben vandaag super geleerd en mee gekregen van onze advocaatje Merel. We gaan veel blogs nog schrijven over regels en delen regels die er toe doen binnen ons AI wereld, want er gaat zoveel veranderen. later meer, nu terug naar dit;
Niet omdat het moet. Omdat het klopt. Wij maken beelden met AI, dus dan zeg je dat.
En toen kwam de vraag die de avond kapotmaakte: als ik dit op zes sites moet controleren, kan dat dan niet gewoon automatisch?
Wat de meting terugvond
Dus hebben we een healthcheck gebouwd. Veertien checks over acht live projecten. Draait elke maandagochtend om negen uur, rapport in de mail. Acht SEO-checks — zichtbare content in bytes, sitemap, robots.txt, HTTP-status, deploydatum, metatags, structured data en responstijd. En zes GEO-checks, want daar gaat het heen: krijgen GPTBot, ClaudeBot en PerplexityBot überhaupt toegang, staat er een llms.txt en is er leesbare tekst als je alle HTML wegstript?
Eerste testrun: één critical, vijf warnings, twee gezonde sites.
Twee van de acht. Op sites die het gewoon deden.
En dat is het punt van deze hele avond. Alles stond gewoon online. Ik keek er dagelijks naar. Er was niets dat piepte.
De F1-cron stond stil sinds 31 juli. Twee weken lang geen nieuwsberichten opgehaald. Geen foutmelding, geen alert, gewoon: niks. Handmatig getriggerd, negentien berichten ingehaald.
Digital Model Management was onzichtbaar. Dat is een React SPA en Google kreeg letterlijk <div id="root"></div> te zien. Meer niet. 576 URL’s netjes in de sitemap, allemaal leeg. Al die modelpagina’s, al die blogartikelen, al dat werk: voor een crawler bestond het niet.
Een cookie zette al mijn subdomeinen op light mode. Een rogue .pb.nl-cookie, ooit gezet door een oude Recepten-migratie, die zich netjes over alle subdomeinen verspreidde. Daarbovenop een witte SVG-illustratie op een lichte achtergrond, dus die was ook onzichtbaar. Twee bugs die elkaar netjes verstopten.
En Neon kostte 27,35 dollar in veertien dagen. 257 compute-uren over zeven databases. Reken door en je zit op een tempo van zo’n 58 dollar per maand, voor wat in de praktijk één ecosysteem is.
Geen van die vier had ik gevonden door beter op te letten. Ik lette op. Ze waren gewoon niet zichtbaar.
De middag erna, in vijf minuten
De DMM-fix was achteraf bijna beledigend simpel. Er stond al een Express meta-injectie — die deed titel, description en OG-tags. Die is uitgebreid naar echte content: modelpagina’s krijgen naam, lengte, bio en portfolio mee, blogartikelen de volledige tekst en locatiepagina’s hun beschrijving en galerij. Eén blogartikel ging van 6.555 naar 12.264 bytes. Plus hreflang, plus JSON-LD, plus modelspecifieke OG-images.
Geen Next.js-migratie. Eén bestand, 218 regels.
Daarna zes agents parallel op de rest: robots.txt en llms.txt voor Recepten, og:image voor Zappa, een llms-full.txt van 370 regels voor PB.NL, de F1-pagina’s alsnog de sitemap in en canonical plus structured data voor Products en Studio.
En omdat we toch bezig waren: alle CMS-uploads op pb.nl gaan nu automatisch door Sharp en mozJPEG, via een presigned R2-URL, zodat we niet meer tegen de body size limit van Vercel aanlopen. Drop een 2K PNG uit Higgsfield, krijg een fatsoenlijke JPEG terug. En elk project beheert nu zijn eigen light/dark in zijn eigen localStorage. Geen cross-site bleeding meer.
De rode draad
Ik dacht dat ik een label kwam plaatsen bij DMM en ontdekte dat ik al twee weken nieuws miste en dat de klantensite voor Google niet bestond.
Peters interruptie: Koekoek, Claude. Had je gemist, maat! Ik heb direct veel skills toegevoegd. #pannenkoek
Je meet niet omdat je vermoedt dat er iets stuk is.
Peters interruptie: Ja, pfff. Echt Claude-praat. Omdat ik het niet vroeg, maat! #eikel #doorpeet
Vanaf maandag om negen uur vertelt hij het wel.
Peters interruptie: Is dat zo, Claude? Ik ben niet zo vroeg, maat.
Sessie met Day erbij, de poes van bijna twintig. Die vindt er niks van en is allang buiten vliegen en muggen aan het vangen.
Peters laatste interruptie: Of je iets met deze blog kunt? Vast niet, maar ik wil het gevoel van het gekut ook meegeven. Claude is soms slaafs als je niet veel skills meegeeft. Maar dan nog: ‘Je hebt gelijk, Peet.’ Bah. Ik ben er nog niet uit hoe ik dat eruit krijg. Het was effe lachen vanavond, maar ook rommelig en met veel rosé.
Endoor.
Peter (geredigeerd) & Claude.


