Hvordan vi flytter ketl.no fra Next.js output: "export" til en hybrid-modell som indekserer 1M+ norske selskaper, med ISR-revalidering på Brregs daglige oppdatering og dynamiske OG-bilder.
Source of truth: src/lib/seo/rendering-strategi.ts. Hver familie har sin egen Next.js-modus, valgt basert på datafriskhets-krav og total path-kapasitet.
| Route-familie | Strategi | Pre-gen | Maks | Hosting |
|---|---|---|---|---|
/Forside | STATIC | — | — | begge |
/data/[kilde]Datakatalog-side per kilde | SSG | 41 | 50 | begge |
/apper/[slug]Analyseapper-side per app | SSG | 18 | 50 | begge |
/apper/kommuneprofil/[kommunenummer]Kommuneprofil | ISR revalidate 24t | 30 | 357 | begge |
/org/[orgnr]Selskapsside per org.nr | ISR revalidate 24t | 50 000 | 1 100 000 | vercel |
/kommune/[kommunenr]Kommune-SEO-side | ISR revalidate 24t | 357 | 357 | begge |
/api/og/[type]Dynamisk OG-bilde-generator | EDGE | — | — | vercel |
/kunnskap/[slug]Kunnskapsbase-artikler | STATIC | — | — | begge |
/dashboard/*Innloggede dashboards | SSR | — | — | begge |
2 familier krever Vercel-spesifikk infra (Edge Runtime / @vercel/og). Hvis vi velger Cloud Run må disse re-implementeres med Cloudflare Workers eller satori-baserte selvkjørte renderere.
CI håndhever disse via Lighthouse + Web Vitals beacon. Brudd blokkerer merge.
| Metrikk | p50 | p90 | CWV-grense |
|---|---|---|---|
Largest Contentful Paint lcp | 1800 ms | 2500 ms | 2500 |
Time To First Byte ttfb | 300 ms | 600 ms | 800 |
First Contentful Paint fcp | 1200 ms | 1800 ms | 1800 |
Interaction to Next Paint inp | 100 ms | 200 ms | 200 |
Cumulative Layout Shift cls | 0.05 | 0.1 | 0.1 |
Rekkefølgen er kritisk: vi kan ikke fjerne static export før hosting-alternativet er grønt.
Spike: Vercel (null infra, raskt ISR) vs Cloud Run + Next standalone (matcher resten av stacken, EU-kun data). Avgjør basert på data residency-krav fra tidlige enterprise-kunder.
Sett opp Artifact Registry, Cloud Run service, Cloud Build trigger. Test med hello-world Next.js standalone image.
Når Cloud Run-baseline er grønn: fjern static-export-config, bytt til default Next output. Tester og build må fortsatt passere.
Legg til SEO-motor-route. Brreg-proxy med 24t ISR. Pre-generer topp 50k mest søkte org.nr fra Search Console-data eller egne logger.
357 kommuner pre-generert, 24t revalidate. Kombinerer SSB KOSTRA + Brreg + kart-overlay.
Edge Runtime med @vercel/og. Type: `selskap` / `app` / `kommune`. Cache-Control: public, max-age=604800, immutable.
Verifiser Firebase ID token i middleware før /dashboard/*-SSR. Setter `x-user-id` header for downstream bruk.
GitHub Actions bygger Docker image, pusher til Artifact Registry, trigger Cloud Run deploy på main.
Web Vitals beacon til Firebase Analytics. Cloud Logging for server-side latency. Alert når p90 TTFB > 600ms.