# Slik byggjer vi coreai.no synleg for søk, svaremotorar og AI-agentar

SEO, AEO og agent-venlegheit er bygd inn i coreAI si heimeside som tre lag i same respons: ein sentral SEO-byggjar produserer head-taggar og JSON-LD, ei `.md`-overflate serverer same innhald som rein markdown til AI-bots, og ein eigen sitemap-kommando held begge delar oppdaterte ved kvar reindeksering. Alle tre lag les frå dei same markdown-dokumenta – ingenting er bolt-on.

## Kva vi hentar frå eksisterande pakkar

Tre pakkar dekkjer det grunnleggjande, slik at vi slepp å vedlikehalde det sjølve:

- `prezet/prezet` – markdown-CMS som indekserer ei lokalisert content-mappe til ei SQLite-fil. Kvar overskrift, ingress og FAQ-oppføring er éi markdown-fil, og innhaldet vert henta via Prezet sitt query-API.
- `spatie/laravel-markdown-response` – global URL-rewrite-middleware som peelar `.md` av ein URL og forhandlar `text/markdown` mot `Accept`-headeren. Vi får agent-venlege URL-ar utan å duplisere ruter.
- `spatie/laravel-sitemap` – primitiv for å byggje sitemap-XML og ein sitemap-indeks. Vi orkestrerer kva som hamnar i han.

Ingen av dei handterer JSON-LD eller AEO – det er der eigne komponentar tek over.

## Kva vi har bygd sjølve

Fem byggjeklossar, éin jobb kvar:

- Ein SEO-byggjar som kvar kontroller brukar for å produsere éi `seo`-view-variabel. Han set sidetittel med varemerke-suffiks, slår av og på frivillige skjema (FAQ, brødsmular), og reknar ut canonical og hreflang frå lista over støtta lokal.
- Fem schema.org-byggjarar – Organization, WebSite, FAQPage, BreadcrumbList og Article – kvar ein rein klasse med éi build-metode som returnerer JSON-LD som assosiativt array. Testbart i isolasjon og identisk på tvers av sider.
- Ein sentral head-partial som er einaste stad i kodebasen der `<title>`, `<meta>`, `<link rel="canonical">`, hreflang-alternativ, OG-taggar og `<script type="application/ld+json">` vert renderte. Sider kan ikkje skrive sin eigen head.
- Ein markdown-driver med éin assembler per redaksjonell side – serverer markdown 1:1 frå kjeldene når ein agent ber om det. Vi konverterer aldri den rendra HTML-en tilbake til markdown; vi les same `.md`-filer som Blade-malane, så agenten ser eksakt det forfattaren skreiv.
- `/llms.txt` og `/llms-full.txt` – ein indeks over marknadsføringssidene pluss dei 20 nyaste artiklane, og alle sidene samla i eitt dokument. Begge er `noindex` og på engelsk.

Ein eigen sitemap-kommando orkestrerer XML-en til tre filer: `sitemap.xml` som indeks, `sitemap-pages.xml` for marknadsføringssidene × språk, og `sitemap-articles.xml` der ei sentralt vedlikehalden blokkliste filtrerer bort marknadsrelaterte seksjonar slik at desse dokumenta ikkje lekk inn i artikkel-sitemappen. Etter kvar reindeksering overstyrer vi Prezet sin sitemap-hook og køyrer i tillegg ein cache-flush mot markdown-overflata, slik at agentane aldri les utgått innhald.

## AEO: tre reglar vi graderer kvar tekst mot

AEO (Answer Engine Optimization) er ikkje eit bibliotek, det er tre redaksjonelle reglar som er innebygde i skriveprosessen og dokumenterte i ein intern stilguide:

- **Svar først.** Første setning i kvar ingress og kvart FAQ-svar slår fast svaret. Inga oppvarming, ingen retoriske spørsmål, ingen "lat oss sjå nærare på…".
- **Éin H1 per side.** Hero-en eig den einaste `<h1>`. Alle andre seksjonstitlar er `<h2>`, nesta `<h3>`. Hopp i nivå er forbode.
- **Ingen "klikk her"-CTA-ar.** Lenkjetekst skildrar målet ("Sjå prislista", "Bestill no"), ikkje gesten.

Reglane vert handheva i kodegjennomgang, ikkje av lint – men dei er kvifor svar-motorar som ChatGPT Search og Perplexity faktisk klarar å hente ut rett setning frå ei coreAI-side.

## Korleis AI-agentar ser sida

Tre triggerar byter HTML mot markdown på dei redaksjonelle rutene: `.md`-suffiks i URL-en, `Accept: text/markdown`-headeren, og kjende bot-user-agents som `GPTBot` og `ClaudeBot`. Alle tre fører til same respons – kjeldemarkdownen forfattaren skreiv, ikkje ei konvertering av den rendra HTML-en. Transaksjonelle ruter (`/order`, `/contact`) er haldne utanfor middlewaren, så `/order.md` returnerer vanleg HTML.

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

Resultatet er at same innhald vert publisert til menneske, søkemotorar og AI-agentar utan duplisering: forfattaren skriv éi markdown, og tre overflater leverer henne der mottakaren leitar.