Hvordan 5 AI-Agenter Fant 90 Kritiske Feil På Vår Egen Nettside

TL;DR — Nøkkeltall
| Metrikk | Resultat |
|---|---|
| AI-agenter kjørt parallelt | 5 |
| Totalt antall verktøykall | 200+ |
| Problemer oppdaget | 90 |
| Kritiske sikkerhetsfeil | 4 |
| SEO-blokkeringer | 3 |
| WCAG-brudd | 6 |
| Tid brukt på analyse | ~15 minutter |
| Tid brukt på fiks (4 parallelle agenter) | ~8 minutter |
| Filer endret | 49 |
| Linjer fjernet | 1,306 |
Hva Ville Du Gjort?
Tenk deg dette scenarioet: Du driver et AI-konsulentfirma. Du selger tjenester som hjelper bedrifter med å bli synlige for AI-søkemotorer som ChatGPT, Perplexity og Claude.
Og så oppdager du at din egen nettside blokkerer disse AI-crawlerne fra 80% av innholdet.
Det var akkurat det vi oppdaget da vi kjørte en multi-agent kodeaudit på echoalgoridata.no.
De 5 Agent-Spesialistene
Vi deployerte 5 parallelle AI-agenter, hver med sitt ekspertområde:
1. 🔒 Sikkerhetsagenten
Oppgave: Finn sårbarheter, API-lekkasjer, XSS-risiko, CORS-feil
Verktøy brukt: Kodeanalyse, git-historikk, miljøvariabler
Funn: 24 problemer (4 kritiske)
2. 🔍 SEO/AEO-Agenten
Oppgave: Audit robots.txt, sitemap, JSON-LD schemas, AI-crawler tilgang
Verktøy brukt: Live site fetch, kildekodesøk, schema-validering
Funn: 19 problemer (3 kritiske)
3. 🌍 i18n-Agenten
Oppgave: Oversettelsessystem, hreflang-implementering, locale-håndtering
Verktøy brukt: Deep translation audit, 87 verktøykall over 620 sekunder
Funn: 22 problemer (4 kritiske)
4. ♿ Tilgjengelighetsagenten
Oppgave: WCAG-overholdelse, skjermleser-kompatibilitet, tastaturnavigering
Verktøy brukt: Komponentanalyse, Framer Motion-konfig, ARIA-attributter
Funn: 18 problemer (3 kritiske)
5. 🌐 Live Validerings-Agenten
Oppgave: Verifiser produksjonsmiljø mot kildekode
Verktøy brukt: WebFetch, domenesjekk, SSL-validering
Funn: 7 problemer (kryssreferert med andre agenter)
De 5 Verste Funnene (Tier 0 — Fiks I Dag)
1. 🚨 AI-Crawlere Blokkert Fra 80% Av Nettstedet
Problemet: Vi hadde to robots.txt-filer:
public/robots.txt— Statisk fil som blokkerte GPTBot, ClaudeBot, PerplexityBot fra alt unntatt/blog/og/services/app/robots.ts— Dynamisk fil med riktige, permissive regler
Next.js serverer alltid statiske filer først. Vår dynamiske robots.ts ble aldri brukt.
# Det AI-crawlere faktisk så:
User-agent: GPTBot
Disallow: /
Allow: /blog/
Allow: /services/
# Hjemmeside, om oss, priser, kontakt, startups = USYNLIG
Konsekvens: Som et AI-konsulentfirma som selger AEO-tjenester, blokkerte vi aktivt vår egen synlighet i AI-søkemotorer.
Fiks: rm public/robots.txt — 1 minutt, enorm innvirkning.
2. 🚨 Falske Anmeldelser i JSON-LD = Google Penalty-Risiko
Problemet: Skjemagenerereren vår inkluderte hardkodede falske anmeldelser:
// lib/schemas/enhanced-schema.ts
aggregateRating: {
ratingValue: '4.9',
reviewCount: '50',
bestRating: '5',
worstRating: '1'
}
// En helt annen fil, andre tall:
// utils/structured-data.ts
aggregateRating: {
ratingValue: '4.8',
reviewCount: '127'
}
Konsekvens: Google straffer eksplisitt fabrikerte strukturerte data med manuell handling. Vi risikerte å miste all synlighet.
Fiks: Fjernet alle aggregateRating og review fra schemas inntil vi kobler til ekte anmeldelsesplattform.
3. 🚨 Stripe Webhook-Verifisering Var En No-Op
Problemet: Webhook-endepunktet vårt hadde denne "verifiseringen":
// Før (SÅRBAR):
if (!signature?.startsWith('t=')) {
return new Response('Invalid', { status: 400 });
}
// Aksepterer ALLE webhooks som starter med "t="
Konsekvens: Hvem som helst kunne sende falske betalingsbekreftelser til API-et vårt.
Fiks: Erstattet med stripe.webhooks.constructEvent() som faktisk verifiserer signaturer.
4. 🚨 API-Nøkkel Lekket i Git-Historikk
Problemet: En Gemini API-nøkkel (AIzaSy...) var committed i .env.local.example — en fil som spores av git.
Konsekvens: Alle med tilgang til repoet kunne bruke API-nøkkelen vår.
Fiks: Revokert nøkkel i Google Cloud Console, generert ny, purget fra git-historikk.
5. 🚨 Dobbel TranslationProvider = 334KB Lastet To Ganger
Problemet: Begge layoutfilene våre wrappet appen i <TranslationProvider>:
// app/layout.tsx — ROOT layout
<TranslationProvider translations={translations}>
{children}
</TranslationProvider>
// app/[locale]/layout.tsx — LOCALE layout
<TranslationProvider translations={translations}>
{children}
</TranslationProvider>
Konsekvens: 334.7 KB oversettelsesdata lastet og parset to ganger per request.
Fiks: Fjernet provider fra root layout. Halverte overhead umiddelbart.
Fiks-Prosessen: 4 Parallelle Agenter
Etter å ha identifisert alle 90 problemene, deployerte vi 4 parallelle agenter for å fikse dem:
| Agent | Oppgave | Verktøykall | Tid |
|---|---|---|---|
| Sikkerhetsagent | Webhooks, CORS, XSS, RegExp | 30 | 142s |
| SEO-agent | Schemas, hreflang, sitemap | 68 | 185s |
| i18n-agent | Providers, oversettelser | 31 | 155s |
| A11y-agent | MotionConfig, ARIA, fokusring | 19 | 116s |
Total fiksetid: ~8 minutter for 40+ filer.
Hva Ble Faktisk Fikset?
Sikkerhet ✅
- Stripe webhook bruker nå
constructEvent()med fail-closed - CORS begrenset til echoalgoridata.no/com på betalingsendepunkter
- XSS: Chat-lenker validerer nå kun
https://-protokoll - RegExp-injeksjon escaped i søkefeltet
- Auth bypass blokkert i produksjonsmiljøer
- Rate limiting default endret til
false
SEO/AEO ✅
- Slettet
public/robots.txt(frigjorde AI-crawlere) - Slettet
public/sitemap.xml(aktiverte dynamisk sitemap) - Fjernet falske anmeldelser fra alle schemas
- Opprettet
lib/company-data.tssom single source of truth - Engelsk hreflang bruker nå
echoalgoridata.comi stedet for.no/en/
i18n ✅
- Fjernet duplikat TranslationProvider fra app/layout.tsx
- "Launch" → "Lansering" i norske oversettelser
- Footer "GDPR Compliant" er nå locale-aware
<html lang>baseres på URL, ikke cookie
Tilgjengelighet (WCAG) ✅
<MotionConfig reducedMotion="user">wrapper hele appenaria-describedbyinkluderer nå feil-IDer- ContactForm bruker CVA Button med fokusring
- Skip-lenke er lokalisert (NO/EN)
Lærdommer
1. Statiske filer trumfer dynamiske i Next.js
Hvis du har både public/robots.txt og app/robots.ts, vil den statiske alltid vinne. Dette er dokumentert, men lett å glemme.
2. Multi-agent audit finner mer enn single-pass
En enkelt gjennomgang hadde aldri funnet at robots.txt blokkerte AI-crawlere OG at hreflang pekte til feil domene OG at webhook-verifiseringen var brutt. Spesialiserte agenter med dypt fokus finner dypere problemer.
3. Parallell fiksing er trygt med god typing
Å kjøre 4 agenter som redigerer kode samtidig høres risikabelt ut. Men med TypeScript strict mode og god separasjon av ansvar, fikk vi null konflikter.
4. Audit din egen side først
Vi solgte AEO-tjenester mens vi selv var usynlige for AI-søkemotorer. Pinlig, men viktig lærdom: Test på deg selv før du selger til andre.
Slik Kjører Du Din Egen Multi-Agent Audit
Verktøy Du Trenger
- Claude Code CLI (eller lignende agentic coding tool)
- MCP-servere for utvidet funksjonalitet (Playwright, GitHub, Supabase)
- God prosjektstruktur med CLAUDE.md eller lignende kontekstfil
Agenter Å Deploye
- Sikkerhetsagent — API-nøkler, webhooks, CORS, XSS, CSRF
- SEO/AEO-agent — robots.txt, sitemap, JSON-LD, AI-crawler tilgang
- i18n-agent — Oversettelser, hreflang, locale-håndtering
- A11y-agent — WCAG, ARIA, tastaturnavigering, redusert bevegelse
- Ytelsesagent — Bundle-størrelse, lazy loading, caching
Prompt-Mal for Agenter
Du er en [DOMENE]-ekspert som skal audite denne kodbasen.
Mål:
1. Identifiser alle [DOMENE]-relaterte problemer
2. Ranger etter alvorlighetsgrad (Kritisk/Høy/Medium/Lav)
3. Gi konkrete fiks-instruksjoner
Bruk tilgjengelige MCP-verktøy for live validering.
Kryssreferanse funn mot kildekode for å eliminere falske positiver.
Konklusjon
90 problemer. 14 kritiske. Funnet på 15 minutter. Fikset på 8 minutter.
Multi-agent koderevisjoner er ikke fremtiden — de er nåtiden. Og den ironiske lærdommen? Vi som selger AI-synlighet var selv usynlige for AI.
Nå er vi synlige. Og du har lest til slutten, så du vet hvordan du kan gjøre det samme.
FAQ — Vanlige Spørsmål
Hva er en multi-agent kodeaudit?
En multi-agent kodeaudit er en prosess der flere AI-agenter arbeider parallelt for å analysere en kodebase fra forskjellige perspektiver (sikkerhet, SEO, tilgjengelighet, etc.). Hver agent spesialiserer seg på ett område og kan finne problemer som en generalist ville oversett.
Hvor lang tid tar en multi-agent audit?
I vårt tilfelle tok analysen ~15 minutter med 5 parallelle agenter som gjorde 200+ verktøykall. Fiksprosessen tok ~8 minutter med 4 parallelle agenter.
Er det trygt å la AI-agenter fikse kode?
Med riktige guardrails, ja. Vi kjørte TypeScript strict mode, hadde god testkonfig, og agentene arbeidet på separerte domener. Null merge-konflikter, null runtime-feil.
Hva er AEO (Answer Engine Optimization)?
AEO er optimalisering for AI-søkemotorer som ChatGPT, Perplexity og Claude. I motsetning til tradisjonell SEO handler AEO om å strukturere innhold slik at AI-systemer kan forstå og sitere det i sine svar.
Hvorfor blokkerte robots.txt AI-crawlere?
Mange eldre robots.txt-maler inkluderer restriktive regler for ukjente bots. GPTBot, ClaudeBot og PerplexityBot er relativt nye, og gamle konfigurasjonsfiler blokkerer dem ofte utilsiktet.
Hvordan sjekker jeg om min side er synlig for AI-crawlere?
Sjekk din robots.txt for linjer som User-agent: GPTBot fulgt av Disallow: /. Hvis du ser dette, blokkerer du ChatGPT fra å indeksere siden din.
Vil du at vi skal kjøre en lignende audit på din kodebase? Kontakt oss for en gratis vurdering.
Hold deg oppdatert
Meld deg på nyhetsbrevet for de nyeste AI-innsiktene og bransjeoppdateringer.
Ta kontakt