← Artiklar

Sök

Så bygger vi coreai.no synlig för sök, svarsmotorer och AI-agenter

coreai.no levererar färdig HTML med komplett SEO-head, fem JSON-LD-scheman och en parallell markdown-utgåva av varje sida på samma URL – så att Google, ChatGPT och Claude alla ser exakt det författaren har skrivit. Vi använder Prezet och två Spatie-paket för det rutinmässiga, och bygger själva det som faktiskt ger bättre synlighet.

SEO, AEO och agent-vänlighet är inbyggt i coreAI:s hemsida som tre lager i samma respons: en central SEO-byggare producerar head-taggar och JSON-LD, en .md-yta serverar samma innehåll som ren markdown till AI-bottar, och ett eget sitemap-kommando håller bägge delar uppdaterade vid varje omindexering. Alla tre lagren läser från samma markdown-dokument – inget är bolt-on.

#Vad vi hämtar från befintliga paket

Tre paket täcker det grundläggande, så att vi slipper underhålla det själva:

  • prezet/prezet – markdown-CMS som indexerar en lokaliserad content-mapp till en SQLite-fil. Varje rubrik, ingress och FAQ-post är en markdown-fil, och innehållet hämtas via Prezets query-API.
  • spatie/laravel-markdown-response – global URL-rewrite-middleware som skalar .md från en URL och förhandlar text/markdown mot Accept-headern. Vi får agent-vänliga URL:er utan att duplicera rutter.
  • spatie/laravel-sitemap – primitiver för att bygga sitemap-XML och ett sitemap-index. Vi orkestrerar vad som hamnar i det.

Inget av dem hanterar JSON-LD eller AEO – det är där egna komponenter tar över.

#Vad vi har byggt själva

Fem byggstenar, ett jobb var:

  • En SEO-byggare som varje controller använder för att producera en seo-view-variabel. Den sätter sidtitel med varumärkessuffix, slår av och på frivilliga scheman (FAQ, brödsmulor), och räknar ut canonical och hreflang utifrån listan över stödda lokaler.
  • Fem schema.org-byggare – Organization, WebSite, FAQPage, BreadcrumbList och Article – var och en en ren klass med en build-metod som returnerar JSON-LD som associativ array. Testbart i isolation och identiskt över sidor.
  • En central head-partial som är enda stället i kodbasen där <title>, <meta>, <link rel="canonical">, hreflang-alternativ, OG-taggar och <script type="application/ld+json"> renderas. Sidor kan inte skriva sin egen head.
  • En markdown-driver med en assembler per redaktionell sida – serverar markdown 1:1 från källorna när en agent ber om det. Vi konverterar aldrig den renderade HTML:en tillbaka till markdown; vi läser samma .md-filer som Blade-mallarna, så agenten ser exakt det författaren skrev.
  • /llms.txt och /llms-full.txt – ett index över marknadsföringssidorna plus de 20 senaste artiklarna, och alla sidor samlade i ett dokument. Båda är noindex och på engelska.

Ett eget sitemap-kommando orkestrerar XML:en till tre filer: sitemap.xml som index, sitemap-pages.xml för marknadsföringssidor × språk, och sitemap-articles.xml där en centralt underhållen blocklista filtrerar bort marknadsrelaterade sektioner så att dessa dokument inte läcker in i artikel-sitemappen. Efter varje omindexering åsidosätter vi Prezets sitemap-hook och kör dessutom en cache-flush mot markdown-ytan, så att agenterna aldrig läser föråldrat innehåll.

#AEO: tre regler vi graderar varje text mot

AEO (Answer Engine Optimization) är inte ett bibliotek, det är tre redaktionella regler som är inbyggda i skrivprocessen och dokumenterade i en intern stilguide:

  • Svar först. Första meningen i varje ingress och varje FAQ-svar slår fast svaret. Ingen uppvärmning, inga retoriska frågor, inget "låt oss titta närmare på…".
  • En H1 per sida. Hero:n äger den enda <h1>. Alla andra sektionsrubriker är <h2>, nästade <h3>. Hopp i nivå är förbjudet.
  • Inga "klicka här"-CTA:er. Länktext beskriver målet ("Se prislistan", "Beställ nu"), inte gesten.

Reglerna upprätthålls i kodgranskning, inte av lint – men det är därför svarsmotorer som ChatGPT Search och Perplexity faktiskt klarar att plocka rätt mening från en coreAI-sida.

#Hur AI-agenter ser sidan

Tre triggers byter HTML mot markdown på de redaktionella rutterna: .md-suffix i URL:en, Accept: text/markdown-headern, och kända bot-user-agents som GPTBot och ClaudeBot. Alla tre leder till samma respons – källmarkdownen författaren skrev, inte en konvertering av den renderade HTML:en. Transaktionella rutter (/order, /contact) hålls utanför middlewaren, så /order.md returnerar vanlig HTML.

Vill du se det själv? Hämta den här artikeln som markdown – samma URL, bara med .md på slutet. Det är exakt den respons GPTBot och ClaudeBot får när de besöker /articles/seo-aeo-and-agent-visibility.

Resultatet är att samma innehåll publiceras till människor, sökmotorer och AI-agenter utan duplicering: författaren skriver en markdown, och tre ytor levererar den där mottagaren letar.