WordPress-siden din føles treg. Refleksen er å kjøpe dyrere hosting. Det er sjelden det første som faktisk flytter målene.
Mål først. Deretter kutt det som genererer arbeid på hver forespørsel: plugins, bilder, databasespørringer og tredjeparts-skript. Hosting bytter du når TTFB allerede er dårlig etter at du har fjernet det åpenbare.
Hva «treg» betyr i 2026
Google vurderer feltedata via Core Web Vitals:
| Metrikk | God terskel | Typisk WordPress-årsak når den feiler |
|---|---|---|
| LCP | under 2,5 s | hero-bilde uten dimensjoner, CSS som blokkerer, treg TTFB |
| INP | under 200 ms | tunge page builder-skript, jQuery-plugins, chat-widgets |
| CLS | under 0,1 | bilder uten width/height, sene webfonter, innsatte banners |
INP erstattet FID i mars 2024. Gamle artikler som snakker om FID alene er utdaterte. Bruk PageSpeed Insights for lab, Search Console eller CrUX for det brukerne faktisk opplever.
På norske butikker ser jeg ofte at LCP kollapser på produktsider med Vipps- og Klarna-widgets lastet synkront i headeren, mens forsiden ser «grei» ut i et syntetisk kjøring fra USA. Mål mobil i Norge, ikke bare desktop fra et CDN-nært lab-sted.
Myten om at nytt hosting fikser alt
Serverbytte kan senke TTFB. Det fikser ikke:
- 40 aktive plugins der tre gjør «hastighet», to gjør sikkerhetsskanning hver time, og én synkroniserer hele kataloget mot ERP hvert femte minutt
- JPEG på 3 MB i hero uten
srcseteller moderne format - et tema som kjører en
WP_Queryutenno_found_rowspå hver undersiderender - Google Fonts hentet fra fonts.googleapis.com uten
font-displayog uten self-hosting
Bytt hosting når TTFB på en nesten tom PHP-side fortsatt er over ~1 s, eller når CPU-throttling er synlig under Black Friday-trafikk. Ikke før.
Steg 1: mål før du endrer
- Åpne Search Console → Core Web Vitals (mobil).
- Kjør Query Monitor på staging. Sortér etter tid og antall spørringer på forsiden og én tung mal.
- I DevTools → Network: noter vannfall for dokumentet, største bilde, og hoved-CSS.
- Skriv ned tre tall: TTFB, LCP-element, antall JS-kilobyte før interaktivitet.
Uten disse tallene optimaliserer du på magefølelse. Magefølelse er dyrt.
Steg 2: plugin-sprawl før cache-plugins
Hver plugin er en potensiell plugins_loaded-hook, et REST-kall og en cron. Før du installerer «nok en cache-plugin»:
- Deaktiver alt som ikke er i produksjonskritisk sti.
- Mål LCP og spørringsantall på nytt.
- Aktiver tilbake én og én. Behold bare det som beveger en forretningsmetrikk.
To «speed»-plugins samtidig er en klassiker: begge minifiserer, begge deferred JS, begge skriver kritiske CSS-filer, og ingen av dem er enige om rekkefølgen. Resultatet er dobbelt arbeid og broken CSS.
For WooCommerce: skru av cart-fragment-AJAX på sider som ikke trenger live handlekurv. Det alene har reddet INP på flere nordiske butikker jeg har målt.
Steg 3: bilder og LCP-elementet
LCP er nesten alltid et bilde eller en stor heading-blokk.
- Sett eksplisitt
widthogheight(eller aspect-ratio) på hero. - Lever AVIF/WebP med JPEG-fallback. WordPress 6.x håndterer moderne formater bedre enn 2022-stacken, men CDN-transform hjelper fortsatt.
- Bruk
fetchpriority="high"kun på LCP-bildet, ikke på logoen i headeren. - Unngå bakgrunnsvideo som autoplayer med lydspor i DOM før LCP.
En 1800 px bred PNG lagret som «transparent logo» i headeren er fortsatt en vanlig norsk agency-feil. Konverter til SVG eller en tiny WebP.
Steg 4: database og object cache
Når Query Monitor viser 100+ spørringer på forsiden, hjelper ikke bildekomprimering.
Cache dyre WP_Query-resultater med object cache når Redis eller Memcached er tilgjengelig:
function wpp_cached_latest_posts(): WP_Query {
$cache_key = 'wpp_latest_posts_v1';
$cached = wp_cache_get( $cache_key, 'wpp' );
if ( $cached instanceof WP_Query ) {
return $cached;
}
$query = new WP_Query(
array(
'posts_per_page' => 5,
'post_status' => 'publish',
'no_found_rows' => true,
)
);
wp_cache_set( $cache_key, $query, 'wpp', HOUR_IN_SECONDS );
return $query;
}Uten Redis faller wp_cache_* tilbake til ikke-persistent cache per forespørsel. Da trenger du fortsatt page cache (nginx FastCGI, Cloudflare cache rules, eller en velkonfigurert cache-plugin) for anonyme besøkende.
Transients i wp_options som aldri slettes autoload-es på hver side. Rydd dem. Autoloaded options over noen hundre kilobyte er et stille TTFB-problem.
Steg 5: JavaScript og INP
INP bryter når hovedtråden er opptatt under klikk.
- Last chat, heatmaps og A/B-verktøy etter interaksjon eller idle, ikke i
<head>. - Bytt ut jQuery-UI-widgets der native detaljer/dialog holder.
- Page builders: eksporter malen til blokker der det er realistisk, eller begrens builder-CSS til malene som trenger den.
- Unngå
ob_gzhandlersom «cache». Det er komprimering, ikke cache, og det kolliderer med moderne server-gzip/brotli.
// Ikke gjør dette som erstatning for ekte page cache.
add_action(
'init',
static function () {
if ( ! is_admin() ) {
ob_start( 'ob_gzhandler' );
}
}
);Steg 6: når hosting faktisk er problemet
Bytt eller oppgrader når:
- TTFB på en minimal
index.php-test er over 1 s fra brukerens region - PHP er låst på 7.4 mens du trenger 8.2+ for moderne plugins
- Disk er HDD, og media-biblioteket er på samme volum som databasen under tung Woo-trafikk
- Cron kjører bare når noen besøker siden, og køen aldri tømmes
For norske team som hoster hos etablerte delte leverandører: sjekk om object cache tilbys som tillegg før du flytter hele stacken. Flytting uten Redis-plan og uten staging er hvordan man bytter ett sett problemer med et annet.
En praktisk rekkefølge for én arbeidsuke
| Dag | Fokus | Ferdig når |
|---|---|---|
| 1 | Måle CrUX/GSC + Query Monitor-baseline | Tall er lagret før endringer |
| 2 | Deaktivere åpenbare plugins | Spørringer og JS-kB ned |
| 3 | LCP-bilde + font-strategi | LCP-element identifisert og lettet |
| 4 | Page cache + event. Redis | Anonym TTFB stabil |
| 5 | INP: widgets og builder-JS | Interaksjoner under 200 ms i lab |
| 6-7 | Verifisere feltedata om 28 dager | CrUX har fått ny cohort |
Feltedata henger etter. Ikke panikk på dag 2 fordi Search Console fortsatt viser den gamle URL-gruppen.
Et konkret før/etter-mønster
En B2B-side på norsk delt hosting hadde LCP 4,8 s på mobil i CrUX. Query Monitor viste 164 spørringer på forsiden, 38 aktive plugins, og et hero-JPEG på 2,4 MB. Etter én uke:
| Signal | Før | Etter |
|---|---|---|
| Aktive plugins | 38 | 22 |
| Forside-spørringer | 164 | 71 |
| Hero-fil | 2,4 MB JPEG | 180 KB AVIF + JPEG-fallback |
| TTFB (anonym, page cache) | 1,1 s | 0,35 s |
| LCP lab (mobil) | 4,1 s | 2,1 s |
Felt-LCP trengte tre til fire uker før Search Console flyttet URL-gruppen. Lab-tallet alene er ikke bevis nok for ledelsen - ta skjermbilde av CrUX før du lover «grønt lys i morgen».
CDN, cookies og norsk checkout
Cloudflare eller annet CDN foran WordPress hjelper bare hvis HTML for anonyme brukere faktisk caches. Vanlige feil:
Set-Cookiefra et «pop-up»-plugin på første treff gjør hele HTML-en uncacheable- WooCommerce session-cookie satt for alle besøkende, også de som aldri åpner handlekurven
- Georedirect-plugin som kjører PHP før cache-laget
For Vipps / Klarna: last SDK etter at LCP-elementet er malt, eller begrens dem til checkout. En synkron Vipps-script i global footer er en hyppig INP-synder på norske produktlister.
Self-host webfonter. fonts.googleapis.com + fonts.gstatic.com er to ekstra DNS-runder og ofte en CLS-kilde når fallback-fonten har annen metrik.
Oppsummering
Treg WordPress er et måleproblem før det er et hostingproblem. Start med LCP, INP og TTFB, kutt plugin- og bildevekt, cache det dyre, og utsett serverbytte til tallene sier at maskinvaren er flaskehalsen.
Trenger du en gjennomgang av akkurat din stack (tema, Woo, CDN, Redis), gjør vi det som del av WordPress-utvikling og ytelsesarbeid.







