Teknologi - Nuxt 4, Vue 3, TypeScript
Verktøy - Nuxt Content, Composables
- Diagnostiserte og løste build-feil knyttet til aksessering av
route.params i definePageMeta under prerendering. - Sentraliserte dynamisk tittel-generering i
preprosessor-utils.ts for å dekoble rute-logikk fra sideoppsettet. - Implementerte en reaktiv "watcher" for SEO-metadata som sikrer umiddelbar oppdatering av sidetitler ved klient-side navigasjon (SPA).
- Automatiserte generering av SEO-meta-tags for å garantere konsistent synlighet på tvers av hele plattformen.
- Refaktorerte
Body.vue og artikkellogikk for å forenkle UI-koden gjennom reaktiv synlighet. - Rettet en kritisk type-import feil ("module not found") som hindret korrekt type-checking.
Ekstremt tilfredsstillende å flytte kompleksitet fra skjøre compiler-makroer til robuste, testbare composables.
Utfordring & Løsning
Applikasjonen opplevde ustabilitet under bygg-prosessen, spesielt ved generering av statiske sider (prerendering). Problemet skyldtes at dynamiske rute-parametre ble forsøkt hentet inne i definePageMeta-makroen. Siden denne makroen evalueres av Nuxt-compileren før ruten i det hele tatt eksisterer i nettleseren, resulterte dette i feilmeldinger som "Cannot read properties of undefined". Samtidig var SEO-metadataene statiske, noe som førte til at sidetitler ikke oppdaterte seg korrekt når brukeren navigerte mellom artikler i SPA-modus.
Målet for dagen var å stabilisere bygg-pipelinen ved å skille statiske metadata fra dynamisk runtime-logikk, samt å automatisere SEO-arbeidet for å redusere manuelt vedlikehold.
- Arkitektonisk refaktorering: Jeg startet med å flytte all logikk som omhandler oppløsning av dynamiske titler fra
definePageMeta i de enkelte sidene og inne i frontend/composables/preprosessor-utils.ts (via useNavigation). - Reaktiv SEO-håndtering: Inne i composablen implementerte jeg en
watch på den aktive ruten. Denne vakten fanger opp endringer i route.params.slug, vasker sluggen (fjerner bindestreker, legger til stor forbokstav) og oppdaterer sidetittelen dynamisk via useSeoMeta. Dette sikrer at både brukere og søkemotorer alltid ser korrekt informasjon. - Stabilisering av makroer: Jeg ryddet i alle side-komponenter og sørget for at
definePageMeta kun inneholder statiske verdier som trengs for rute-organisering. Dynamiske beskrivelser ble i stedet flyttet til det sentraliserte SEO-systemet. - UI-forenkling: Parallelt med SEO-arbeidet refaktorerte jeg
frontend/components/article/Body.vue. Ved å erstatte komplisert imperativ logikk med reaktiv synlighet, ble komponenten betydelig lettere å vedlikeholde og mindre utsatt for feil.
Resultatet er en applikasjon som bygger feilfritt hver gang. Vi har oppnådd en tydelig separation of concerns: definePageMeta brukes kun til statisk rute-konfigurasjon, mens useNavigation-composablen håndterer den dynamiske presentasjonen. Dette har ikke bare fjernet build-feil, men også gjort det langt enklere å legge til nye sider med full SEO-støtte uten ekstra koding.
Dagens arbeid har understreket viktigheten av å forstå livssyklusen til moderne rammeverk. Ved å respektere skillet mellom build-time og runtime, har vi transformert en potensielt skjør løsning til en robust og skalerbar arkitektur.