Hopp til hovedinnhold
AI Utvikling

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

Echo Algori Data
Av Allan @ Echo
||12 min lesing
Hvordan 5 AI-Agenter Fant 90 Kritiske Feil På Vår Egen Nettside

TL;DR — Nøkkeltall

MetrikkResultat
AI-agenter kjørt parallelt5
Totalt antall verktøykall200+
Problemer oppdaget90
Kritiske sikkerhetsfeil4
SEO-blokkeringer3
WCAG-brudd6
Tid brukt på analyse~15 minutter
Tid brukt på fiks (4 parallelle agenter)~8 minutter
Filer endret49
Linjer fjernet1,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:

AgentOppgaveVerktøykallTid
SikkerhetsagentWebhooks, CORS, XSS, RegExp30142s
SEO-agentSchemas, hreflang, sitemap68185s
i18n-agentProviders, oversettelser31155s
A11y-agentMotionConfig, ARIA, fokusring19116s

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.ts som single source of truth
  • Engelsk hreflang bruker nå echoalgoridata.com i 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 appen
  • aria-describedby inkluderer 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

  1. Sikkerhetsagent — API-nøkler, webhooks, CORS, XSS, CSRF
  2. SEO/AEO-agent — robots.txt, sitemap, JSON-LD, AI-crawler tilgang
  3. i18n-agent — Oversettelser, hreflang, locale-håndtering
  4. A11y-agent — WCAG, ARIA, tastaturnavigering, redusert bevegelse
  5. 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