# Slik bygger vi coreai.no synlig for søk, svaremotorer og AI-agenter

SEO, AEO og agent-vennlighet er bygget inn i coreAI sin hjemmeside som tre lag i samme respons: en sentral SEO-bygger produserer head-tagger og JSON-LD, en `.md`-overflate serverer samme innhold som ren markdown til AI-bots, og en egen sitemap-kommando holder begge deler oppdatert ved hver reindeksering. Alle tre lag leser fra de samme markdown-dokumentene – ingenting er bolt-on.

## Hva vi henter fra eksisterende pakker

Tre pakker dekker det grunnleggende, slik at vi slipper å vedlikeholde det selv:

- `prezet/prezet` – markdown-CMS som indekserer en lokalisert content-mappe til en SQLite-fil. Hver overskrift, ingress og FAQ-oppføring er én markdown-fil, og innholdet hentes via Prezets query-API.
- `spatie/laravel-markdown-response` – global URL-rewrite-middleware som peeler `.md` av en URL og forhandler `text/markdown` mot `Accept`-headeren. Vi får agent-vennlige URL-er uten å duplisere ruter.
- `spatie/laravel-sitemap` – primitiver for å bygge sitemap-XML og en sitemap-indeks. Vi orkestrerer hva som havner i den.

Ingen av dem håndterer JSON-LD eller AEO – det er der egne komponenter tar over.

## Hva vi har bygget selv

Fem byggeklosser, én jobb hver:

- En SEO-bygger med som hver kontroller bruker for å produsere én `seo`-view-variabel. Den setter sidetittel med varemerke-suffiks, slår av og på frivillige skjema (FAQ, brødsmuler), og regner ut canonical og hreflang fra lista over støttede lokaler.
- Fem schema.org-byggere – Organization, WebSite, FAQPage, BreadcrumbList og Article – hver en ren klasse med én build-metode som returnerer JSON-LD som assosiativt array. Testbart i isolasjon og identisk på tvers av sider.
- En sentral head-partial som er eneste sted i kodebasen der `<title>`, `<meta>`, `<link rel="canonical">`, hreflang-alternativer, OG-tagger og `<script type="application/ld+json">` blir rendret. Sider kan ikke skrive sin egen head.
- En markdown-driver med én assembler per redaksjonelle side – serverer markdown 1:1 fra kildene når en agent ber om det. Vi konverterer aldri den rendrede HTML-en tilbake til markdown; vi leser samme `.md`-filer som Blade-malene, så agenten ser eksakt det forfatteren skrev.
- `/llms.txt` og `/llms-full.txt` – en indeks over markedsføringssidene pluss de 20 nyeste artiklene, og alle sidene samlet i ett dokument. Begge er `noindex` og på engelsk.

En egen sitemap-kommando orkestrerer XML-en til tre filer: `sitemap.xml` som indeks, `sitemap-pages.xml` for markedsføringssidene × språk, og `sitemap-articles.xml` der en sentralt vedlikeholdt blokkliste filtrerer bort markedsrelaterte seksjoner slik at disse dokumentene ikke lekker inn i artikkel-sitemappen. Etter hver reindeksering overstyrer vi Prezets sitemap-hook og kjører i tillegg en cache-flush mot markdown-overflaten, slik at agentene aldri leser utgått innhold.

## AEO: tre regler vi grader hver tekst mot

AEO (Answer Engine Optimization) er ikke et bibliotek, det er tre redaksjonelle regler som er innebygd i skrive-prosessen og dokumentert i en intern stilguide:

- **Svar først.** Første setning i hver ingress og hvert FAQ-svar slår fast svaret. Ingen oppvarming, ingen retoriske spørsmål, ingen "la oss se nærmere på…".
- **Én H1 per side.** Hero-en eier den eneste `<h1>`. Alle andre seksjonstitler er `<h2>`, nestede `<h3>`. Hopp i nivå er forbudt.
- **Ingen "klikk her"-CTA-er.** Lenketekst beskriver målet ("Se prislisten", "Bestill nå"), ikke gesten.

Reglene håndheves i kodegjennomgang, ikke av lint – men de er hvorfor svar-motorer som ChatGPT Search og Perplexity faktisk klarer å hente ut riktig setning fra en coreAI-side.

## Hvordan AI-agenter ser siden

Tre triggere bytter HTML mot markdown på de redaksjonelle rutene: `.md`-suffiks i URL-en, `Accept: text/markdown`-headeren, og kjente bot-user-agents som `GPTBot` og `ClaudeBot`. Alle tre fører til samme respons – kildemarkdownen forfatteren skrev, ikke en konvertering av den rendrede HTML-en. Transaksjonelle ruter (`/order`, `/contact`) er holdt utenfor middlewaren, så `/order.md` returnerer vanlig HTML.

Vil du se det selv? [Hent denne artikkelen som markdown](https://coreai.no/articles/seo-aeo-and-agent-visibility.md) – samme URL, bare med `.md` på slutten. Det er nøyaktig den responsen `GPTBot` og `ClaudeBot` får når de besøker `/articles/seo-aeo-and-agent-visibility`.

Resultatet er at samme innhold publiseres til mennesker, søkemotorer og AI-agenter uten duplisering: forfatteren skriver én markdown, og tre overflater leverer den der mottakeren leter.