FJS26 · V45 · EXTRA

Prestanda,
SEO och AEO

Vad en fullstackare kan göra redan nu, och vad som väntar framöver.

Chas Academy · Frontendutveckling


Idag

01Prestanda: varför, och hur man mäter~55 min02Optimera nu, och framöver~35 min03SEO: hur sökmotorer läser din sida~35 min04Sociala medier~15 min05Hjälp crawlern~15 min06JavaScript, SSR och AEO~25 min
PRESTANDA, SEO OCH AEO2 / 45
01

Prestanda

Del 1, ungefär en och en halv timme.

PRESTANDA


Varför bry sig?

  • Användarna lämnar. En sida som känns seg tappar besökare innan den hunnit visa något.
  • Sökmotorer mäter det. Core Web Vitals är en del av Googles signaler för sidupplevelse.
  • Inte alla har din dator. Billig mobil och dåligt nät är vardag för många. Det är också en tillgänglighetsfråga.
  • Det kostar. Varje onödig megabyte betalas av användaren, och ofta av servern.
PRESTANDA, SEO OCH AEO4 / 45

PRESTANDA

Upplevd hastighet

Prestanda handlar inte om hur snabb servern är, utan om hur det känns för användaren: hur fort något syns, hur fort sidan svarar och om den står still.

  • Syns det? Laddning
  • Svarar det? Interaktivitet
  • Står det still? Visuell stabilitet
PRESTANDA, SEO OCH AEO5 / 45

MÄTA


Fem mått längs laddningen

Från klick till användbar sidatidFörfråganTTFBförsta byten från servernFCPförsta texten synsLCPstörsta elementet syns?CLShoppar något?INPklick → svar
PRESTANDA, SEO OCH AEO6 / 45

MÄTA · CORE WEB VITALS


De tre som räknas

Googles tre mått på sidupplevelse. Gränserna gäller för 75 procent av besöken.

LCP

Largest Contentful Paint. När det största elementet syns. Bra: högst 2,5 s. Dåligt: över 4 s.

INP

Interaction to Next Paint. Tiden från klick till att sidan svarar. Bra: högst 200 ms. Dåligt: över 500 ms.

CLS

Cumulative Layout Shift. Hur mycket innehållet hoppar. Bra: högst 0,1. Dåligt: över 0,25.

PRESTANDA, SEO OCH AEO7 / 45

MÄTA


Två stödmått

Inte Core Web Vitals, men de hjälper dig att hitta orsaken när LCP är dålig.

TTFB

Time to First Byte. Hur snabbt servern svarar. Bra: högst 0,8 s. Här bor backend: hosting, databasfrågor, cache.

FCP

First Contentful Paint. När något alls syns. Bra: högst 1,8 s. Blockerande CSS och JS gör den sen.

PRESTANDA, SEO OCH AEO8 / 45

MÄTA · VERKTYG


Fyra sätt att mäta

Lighthouse

I DevTools. Labbdata: en simulerad mobil på strypt nät. Ger poäng och konkreta förslag.

PageSpeed Insights

pagespeed.web.dev. Fältdata från riktiga Chrome-användare, om sajten har tillräckligt med trafik, plus en Lighthouse-körning.

Performance-fliken

I DevTools. Spelar in laddningen och visar exakt vad som tar tid, och vilket element som är LCP.

Network-fliken

Vattenfallet: varje fil, hur stor den är och när den laddas. Bra för att hitta den där bilden på 4 MB.

PRESTANDA, SEO OCH AEO9 / 45

MÄTA · LIGHTHOUSE


Så läser du rapporten

  • Fyra kategorier: Performance, Accessibility, Best Practices och SEO. Poäng 0–100, grönt från 90.
  • Performance vägs ihop av fem mått: TBT 30 %, LCP 25 %, CLS 25 %, FCP 10 % och Speed Index 10 %.
  • TBT (Total Blocking Time) är labbets ersättare för INP: hur länge JavaScript blockerar sidan.
  • Kör i inkognito. Tillägg i webbläsaren påverkar resultatet.
  • Poängen varierar mellan körningar. Läs Diagnostics och förslagen, inte bara siffran.
PRESTANDA, SEO OCH AEO10 / 45

Övning · i teamen

Lighthouse på er quiz-app

Kör Lighthouse (Mobile) på er u03. Skriv ner poängen i alla fyra kategorier, och de tre största problemen under Performance. Vilket element är LCP?

Tid

[15 min]

Mål

En lista med tre saker ni kan åtgärda. Vi tar några exempel i helgrupp.

PRESTANDA, SEO OCH AEO11 / 45
02

Optimera

Det du kan göra redan nu med HTML, CSS och JavaScript. Sedan vad som väntar.

”

Mät först. Börja med det som ger mest. Oftast är det bilderna.

OPTIMERA NU · BILDER


Bilden som inte hoppar

Vanlig bild längre ner

width och height reserverar platsen, så sidan inte hoppar (CLS). loading="lazy" väntar tills den är nära.

<img src="img/team.webp"
     width="800" height="600"
     alt="Teamet vid tavlan"
     loading="lazy"
     decoding="async">

LCP-bilden högst upp

Aldrig lazy. Be i stället webbläsaren hämta den först.

<img src="img/hero.webp"
     width="1600" height="900"
     alt=""
     fetchpriority="high">
PRESTANDA, SEO OCH AEO14 / 45

OPTIMERA NU · BILDER


Rätt format och rätt storlek

Moderna format med reserv

AVIF och WebP är ofta mycket mindre än JPEG. Webbläsaren tar det första den förstår.

<picture>
  <source srcset="hero.avif" type="image/avif">
  <source srcset="hero.webp" type="image/webp">
  <img src="hero.jpg" alt="..."
       width="1600" height="900">
</picture>

Olika storlek för olika skärm

En mobil ska inte ladda bilden för en 4K-skärm.

<img src="hero-800.webp"
     srcset="hero-400.webp 400w,
             hero-800.webp 800w,
             hero-1600.webp 1600w"
     sizes="(max-width: 600px) 100vw, 50vw"
     alt="...">
PRESTANDA, SEO OCH AEO15 / 45

OPTIMERA NU · RENDERINGSBLOCKERING


Låt HTML:en komma först

Script i <head> blockerarBlockerandeHTMLCSSapp.jssidan synsför användarentom skärm så längeMed deferHTMLCSSsidan synsför användarenapp.jsladdas parallellt, körs efter HTML:en
PRESTANDA, SEO OCH AEO16 / 45

OPTIMERA NU · SCRIPT


defer, async och module

defer

Hämtas parallellt, körs efter HTML:en, i ordning. Standardvalet för er kod.

<script src="js/app.js" defer>
</script>

type="module"

Beter sig som defer automatiskt. Det ni använt sedan v43.

<script type="module"
        src="js/main.js"></script>

async

Körs så fort den är hämtad, i vilken ordning som helst. För fristående saker som statistik.

<script async
  src="https://example.com/analytics.js">
</script>
PRESTANDA, SEO OCH AEO17 / 45

OPTIMERA NU · TYPSNITT


Typsnitt utan blank text

Google Fonts

Öppna anslutningen tidigt, och visa reservtypsnittet medan det riktiga laddas (display=swap). Ta bara vikterna du använder.

<link rel="preconnect"
  href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet"
  href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700&display=swap">

Eget typsnitt

WOFF2 är det minsta formatet. Hosta själv så slipper du en extra server.

@font-face {
  font-family: "Lato";
  src: url("fonts/lato-400.woff2")
       format("woff2");
  font-display: swap;
}
PRESTANDA, SEO OCH AEO18 / 45

OPTIMERA NU · FÖRLADDA


Säg vad som är viktigast

preload

Hämta en resurs tidigt, innan webbläsaren hittat den själv. Bra för en bakgrundsbild i CSS som är LCP.

<link rel="preload" as="image"
      href="img/hero.webp">

<link rel="preload" as="font"
      href="fonts/lato-400.woff2"
      type="font/woff2" crossorigin>

Men inte allt

Förladdar du allt är inget prioriterat. Ett eller två saker, och bara det som syns direkt.

<!-- Nej -->
<link rel="preload" as="image" href="1.jpg">
<link rel="preload" as="image" href="2.jpg">
<link rel="preload" as="image" href="3.jpg">
<!-- ... -->
PRESTANDA, SEO OCH AEO19 / 45

OPTIMERA NU


Checklista för u03

  • Bilder: rätt format, komprimerade, width och height, lazy på allt utom LCP-bilden.
  • Script med defer eller type="module". Ingen JavaScript i <head> utan något av dem.
  • Typsnitt: preconnect, display=swap, bara de vikter ni använder.
  • Hämta data en gång. Inte samma fetch i varje klick.
  • Inga bibliotek för något som går på tre rader egen kod.
  • Kör Lighthouse igen efteråt. Blev det bättre?
PRESTANDA, SEO OCH AEO20 / 45

FRAMÖVER


Det som väntar i kursen

Bygga med Vite

Minifiering, tree shaking (oanvänd kod tas bort) och hashade filnamn som går att cacha länge. Gratis när ni bygger.

Code splitting

Ladda kod först när den behövs. I React: lazy() per sida.

button.addEventListener("click", async () => {
  const { drawChart } =
    await import("./chart.js");
  drawChart(data);
});

Servern

Cache-headers, komprimering (gzip, Brotli) och ett CDN som serverar filerna nära användaren. Snabba databasfrågor ger låg TTFB.

Cache-Control: public,
  max-age=31536000, immutable

Rendering

Server-side rendering och statiska sidor, till exempel med Next.js: HTML:en är klar när den kommer. Bra för både LCP och SEO.

PRESTANDA, SEO OCH AEO21 / 45
03

SEO och AEO

Del 2, ungefär en och en halv timme.

SEO

Sökmotoroptimering

Search Engine Optimization: att göra det lätt för sökmotorer att hitta, förstå och visa din sida för rätt sökningar.

  • Teknisk SEO: att sidan går att crawla, är snabb, semantisk och har bra metadata. Det är ert ansvar.
  • Innehåll: text som svarar på det folk faktiskt söker efter.
  • Länkar: andra sajter som länkar hit, så kallade backlinks. Ett slags förtroende.
PRESTANDA, SEO OCH AEO23 / 45

SEO · SERP


Sökresultatsidan

Search Engine Results Pageindiska restauranger i LondonSponsratSpicy Curry House – Boka bord idagAI-översiktshanti.co.uk › menuShanti – Authentic Indian Food in Londondishoom.com › londonDishoom – Bombay café in London… fler träffarAnnonserbetalda, märkta SponsratAI-översiktsvarar direkt, ofta utan klickOrganiska träffarobetalda. Här spelar SEO.<title> → den blå länkendescription → texten under
PRESTANDA, SEO OCH AEO24 / 45

SEO


Crawla, indexera, ranka

Hur en sökmotor hittar din sidaCrawlaföljer länkar,hämtar HTMLRenderakör ibland JS,inte alltidIndexerasparar vadsidan handlar omRankavilken sida svararbäst på frågan?AI-svarsammanfattar och citerarSökresultatSERPSEO: hamna högt i listan.AEO: bli källan som svaretbygger på.
PRESTANDA, SEO OCH AEO25 / 45

SEO


Google är en black box

Tre saker som påverkarHur innehållet är skrivetcontent-strateg, SEO-specialistHur det är byggt i kodendu!Hur det är länkatandra sajter, SEO-specialistIngen utanför Google vet exakt hur rankningen räknas. SEO är att testa, mäta och justera.
PRESTANDA, SEO OCH AEO26 / 45

SEO · <HEAD>


Det sökmotorn läser först

Grunden

Titeln blir den blå länken i sökresultatet. Beskrivningen blir ofta texten under.

<html lang="sv">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
    content="width=device-width, initial-scale=1">
  <title>Europas huvudstäder – Quiz</title>
  <meta name="description"
    content="Tio frågor om Europas huvudstäder.
             Hur många klarar du?">
  <link rel="canonical"
    href="https://example.com/quiz/europa">
</head>

Tumregler

title: unik per sida, det viktigaste först, runt 50–60 tecken. description: en mening som lockar till klick. canonical: vilken adress som är originalet om samma innehåll finns på flera. keywords: ignoreras av Google sedan länge.

PRESTANDA, SEO OCH AEO27 / 45

SEO · <BODY>


Semantik är SEO

Rubriker och text

En h1 per sida, sedan h2, h3 i ordning. Sökmotorn läser strukturen som ett innehållsregister.

<main>
  <h1>Europas huvudstäder</h1>
  <h2>Så fungerar quizet</h2>
  <p>...</p>
  <h2>Topplista</h2>
</main>

Bilder och länkar

alt beskriver bilden. Länktexten beskriver målet. Sökmotorer följer <a href>, inte klick-händelser.

<img src="paris.webp" alt="Eiffeltornet i kvällsljus">

<!-- Nej -->
<a href="/regler">Klicka här</a>
<div onclick="go('/regler')">Regler</div>

<!-- Ja -->
<a href="/regler">Läs reglerna</a>
PRESTANDA, SEO OCH AEO28 / 45

SEO


Adresser och länkar

  • Läsbara URL:er. /quiz/europa säger mer än /index.html?id=7f3a.
  • Interna länkar. Länka mellan dina sidor med beskrivande text. Det är så crawlern hittar dem.
  • Rätt statuskoder. En sida som inte finns ska ge 404, inte 200 med texten "Hittades inte".
  • HTTPS och mobilvänligt. Google indexerar mobilversionen av sidan i första hand.
  • Prestanda räknas. Allt från del 1 hjälper även här.
PRESTANDA, SEO OCH AEO29 / 45

SEO · LINKBUILDING


Länkar är röster

PageRank: Googles första idéEn betrodd sida ger en tyngre röst
PRESTANDA, SEO OCH AEO30 / 45

SEO · LINKBUILDING


Att få länkar

Kallas off-page SEO: det händer utanför din kod.

Förtjäna dem

Gör något värt att länka till: en guide, ett verktyg, öppen kod. Branschregister, partners och gästinlägg. Kvalitet före antal: en relevant och betrodd länk slår hundra okända.

Det som straffar sig

Köpta länkar, länkfarmar och länkspam i kommentarsfält. Google känner igen mönstren och kan sänka hela sajten.

Märk länkar du inte står för

Då räknas de inte som röster.

<a href="..." rel="sponsored">
<a href="..." rel="ugc">
<a href="..." rel="nofollow">
PRESTANDA, SEO OCH AEO31 / 45
04

Sociala
medier

När någon delar din länk i Slack, LinkedIn eller Messenger.

SOCIALA MEDIER


Länken är ett kort

Vad Open Graph styr i en delad länkbildCHASACADEMY.SEQuiz: Europas huvudstäderTio frågor. Hur många klarar du?og:image1200 × 630 pxog:urlog:titleog:description
PRESTANDA, SEO OCH AEO33 / 45

SOCIALA MEDIER


Open Graph och X

Open Graph

Bilden ska ha absolut URL. 1200 × 630 px fungerar nästan överallt.

<meta property="og:type" content="website">
<meta property="og:title"
  content="Europas huvudstäder – Quiz">
<meta property="og:description"
  content="Tio frågor. Hur många klarar du?">
<meta property="og:image"
  content="https://example.com/og/europa.png">
<meta property="og:url"
  content="https://example.com/quiz/europa">
<meta property="og:locale" content="sv_SE">

X (Twitter)

X läser Open Graph som reserv. Det som behövs i tillägg är korttypen, för stor bild.

<meta name="twitter:card"
  content="summary_large_image">
<meta name="twitter:image:alt"
  content="Karta över Europa">
PRESTANDA, SEO OCH AEO34 / 45
05

Hjälp
crawlern

robots.txt, sitemap och structured data.

HJÄLP CRAWLERN


robots.txt och sitemap.xml

robots.txt

Ligger i roten. Säger vad crawlers får besöka. Inget skydd: hemliga sidor ska ha inloggning.

User-agent: *
Disallow: /admin/

Sitemap: https://example.com/sitemap.xml

sitemap.xml

En lista över sidorna du vill ha indexerade. Skicka in den i Google Search Console.

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns=
  "http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/</loc>
    <lastmod>2026-11-04</lastmod>
  </url>
</urlset>
PRESTANDA, SEO OCH AEO36 / 45

HJÄLP CRAWLERN


Structured data med JSON-LD

Berätta med maskinläsbar data vad sidan handlar om. Ordförrådet kommer från schema.org.

Till exempel i portfolion

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Person",
  "name": "[Ditt namn]",
  "jobTitle": "Fullstackutvecklare",
  "url": "https://[din-portfolio].se",
  "sameAs": [
    "https://github.com/[du]",
    "https://www.linkedin.com/in/[du]"
  ]
}
</script>

Varför

Kan ge rich results i Google: betyg, priser, evenemang, recept. Och det är exakt den sortens data AI-tjänster har lätt att läsa. Testa med Googles Rich Results Test eller Schema Markup Validator.

PRESTANDA, SEO OCH AEO37 / 45
06

JavaScript,
SSR och AEO

Det som blir viktigt när ni bygger med React.

JAVASCRIPT OCH SEO


Vad ser crawlern i er quiz-app?

Renderat i webbläsarenDET CRAWLERN FÅR<body> <div id="app"></div> <script src="app.js"></body>Kör crawlern inte JS är sidan tom.Renderat på servernDET CRAWLERN FÅR<body> <h1>Europas huvudstäder</h1> <p>Tio frågor ...</p></body>Innehållet finns i HTML:en direkt.
PRESTANDA, SEO OCH AEO39 / 45

FRAMÖVER


SEO i React och Next.js

Metadata per sida

I en app med flera vyer ska varje vy ha egen titel. React 19 lyfter <title> och <meta> till <head> automatiskt.

function QuizPage({ quiz }) {
  return (
    <>
      <title>{quiz.name} – Quiz</title>
      <meta name="description"
            content={quiz.summary} />
      <h1>{quiz.name}</h1>
    </>
  );
}

Rendera på servern

Med Next.js blir HTML:en, och metadatan, klar på servern. Bäst för SEO, delningskort och AI-crawlers.

// app/quiz/[slug]/page.tsx
export async function generateMetadata({ params }) {
  const quiz = await getQuiz((await params).slug);
  return {
    title: quiz.name,
    openGraph: { images: [quiz.image] },
  };
}
PRESTANDA, SEO OCH AEO40 / 45

AEO

Answer Engine Optimization

Att bli källan när svaret kommer från en AI i stället för en lista med länkar: ChatGPT, Perplexity, Googles AI Overviews. Kallas också GEO, Generative Engine Optimization.

  • Allt fler frågor besvaras utan att någon klickar sig vidare.
  • Målet flyttas från att ranka högt till att bli citerad.
  • Ett ungt område. Det finns mycket säljsnack och få säkra svar.
PRESTANDA, SEO OCH AEO41 / 45

AEO


Det som verkar fungera

  • Bra SEO är grunden. AI-tjänsterna bygger ofta på sökindex. Det som inte hittas kan inte citeras.
  • Svaret först. Rubrik som en fråga, svaret i första meningen, detaljer efteråt.
  • Innehållet i HTML:en. Många AI-crawlers kör inte JavaScript. Samma slutsats som nyss: rendera på servern.
  • Structured data. Tydlig, maskinläsbar fakta om vem, vad, när och var.
  • Gå att lita på. Författare, datum, källor och fakta som går att kontrollera.
PRESTANDA, SEO OCH AEO42 / 45

AEO


Styra AI-crawlers

robots.txt

AI-företagen har egna crawlers med egna namn. Man kan stänga ute träning men tillåta sök.

# Inte för träning
User-agent: GPTBot
Disallow: /

User-agent: Google-Extended
Disallow: /

# Men gärna i ChatGPT:s sökning
User-agent: OAI-SearchBot
Allow: /

llms.txt

Ett förslag från 2024: en markdownfil i roten som sammanfattar sajten för språkmodeller. Ingen standard, och det är oklart vilka tjänster som läser den. Bra att känna till, inte att lita på.

PRESTANDA, SEO OCH AEO43 / 45

Övning · i teamen

Gör quiz-appen hittbar och delbar

Lägg till lang, en bra title och description, och Open Graph-taggar med en delningsbild. Kör Lighthouse igen och titta på SEO. Testa länken i opengraph.xyz eller genom att klistra in den i Slack.

Tid

[20 min]

Mål

Ett delningskort som ser ut som ni vill, och SEO-poäng i grönt.

PRESTANDA, SEO OCH AEO44 / 45

SAMMANFATTNING


Att ta med sig

  • Mät först. Lighthouse i DevTools, PageSpeed Insights för riktiga användare.
  • Core Web Vitals: LCP högst 2,5 s, INP högst 200 ms, CLS högst 0,1.
  • Nu: små bilder med width och height, defer på script, smarta typsnitt.
  • SEO är semantisk HTML plus bra title, description och länkar.
  • Delningskort: Open Graph med absolut bild-URL, i HTML:en från början.
  • Framöver: bundler, cache, CDN och rendering på servern. Det hjälper prestanda, SEO och AEO på en gång.
PRESTANDA, SEO OCH AEO45 / 45