Teknisk vejledning · Member Portal

Opsætning af analytics for Member Portal

Tre moduler — Opskrivning, Boligsøgning og Ledige boliger — sender automatisk hændelser til window.dataLayer, så du kan følge konverteringer og brugeradfærd. Vælg en fane nedenfor for at se opsætning til dit analytics-værktøj.

📝

Opskrivning — hændelser

Alle hændelser indeholder automatisk signup_session_id

Opskrivningskomponenten skubber nedenstående hændelser til window.dataLayer uden at du behøver ændre noget i koden.

Hændelse Hvornår Parametre ud over signup_session_id Analytisk værdi
signup_started Komponenten indlæses ingen Startpunktet i opskrivningstragten — brug som nævner i konverteringsraten.
signup_step_viewed Et trin vises (trin 1 ved start, og ved frem/tilbage-navigation)
signup_step nummer signup_step_name label
Kortlæg hvilke trin brugerne faktisk ser — grundlag for trinvist dropout-analyse.
signup_step_completed Brugeren klikker Næste og validering godkendes
signup_step nummer signup_step_name label
Afdæk præcis i hvilke trin brugerne falder fra — kernen i opskrivningsfunnel-optimering.
signup_validation_failed Brugeren klikker Næste, men validering fejler
signup_step nummer signup_step_name label
Afslører trin med forvirrende felter eller dårlig UX — høj fejlrate på ét trin er et klart optimeringssignal.
signup_submitted Opskrivningen sendes til backend ingen Skelner brugere der trykker "Send" fra dem der faktisk gennemfører — fanger midlertidige tekniske fejl.
signup_completed Konvertering Backend bekræfter tilmelding ingen Primær konverteringshændelse — brug direkte som mål i GA4 og GTM til ROI-rapportering.
signup_error Backend returnerer fejl ingen Teknisk sundhedsovervågning — en pludselig stigning indikerer et backend-problem i produktion.
signup_campaign_applied En kampagnekode accepteres ingen Måler kampagnekodeeffektivitet — hvad er konverteringsraten for brugere der prøver en kode?
signup_campaign_rejected En kampagnekode afvises (ugyldig kode) ingen Afslører misbrug eller fejlkommunikerede kampagnekoder — mange afvisninger tyder på uklar kommunikation.
signup_campaign_error API-fejl ved validering af kampagnekode ingen Teknisk overvågning af kampagnekode-API'et — en fejlstigning indikerer et integrationsproblem.
signup_abandoned Brugeren forlader opskrivningen uden at gennemføre ingen Kombinér med seneste signup_step_viewed på samme session-ID for at se præcis, hvilke trin der taber brugerne.
ℹ️
Trinnavne afhænger af konfiguration signup_step_name afspejler den label, der vises i trinlinjen, f.eks. "Vælg opskrivninger", "Om dig", "Betaling" eller "Faste betalinger".
🏠

Ledige boliger — hændelser

Forside-karussel & fuld liste

Modulet "Ledige boliger" dækker to separate komponenter: en karussel-widget på forsiden og en fuldstændig listeside med filtre. Begge pusher til window.dataLayer med præfikset available_.

Forside-karussel

Hændelse Hvornår Parametre Analytisk værdi
available_frontpage_contact_modal_opened Bruger klikker "Kontakt" på et lejemål i karusellen company_id department_id tenancy_id Direkte konverteringssignal fra forsiden — en konkret ledig bolig vækker tilstrækkelig interesse til at kontakte udlejer.
available_frontpage_info_modal_opened Bruger åbner lejemålsinfo-modal fra karusellen company_id department_id tenancy_id Soft conversion fra forsidens karussel — brugeren vil vide mere om en specifik ledig bolig.
available_frontpage_view_toggled Bruger skifter mellem listevisning og kortvisning (map) view tenancies | maps Afslører præference for liste vs. kortvisning direkte på forsiden.
available_frontpage_navigate_to_search Bruger klikker "Gå til lejemålssøgning" ingen Måler, om karusellen driver brugere videre til boligsøgning.
available_frontpage_navigate_to_full_list Bruger klikker "Se alle ledige boliger" ingen Måler karusellens rolle som trafikdriver til den fulde liste over ledige boliger.
available_contact_modal_submitted Bruger indsender kontaktformularen og API-kaldet lykkes company_id department_id tenancy_id Primær konverteringshændelse for ledige boliger — brugeren har sendt en kontaktforespørgsel.

Fuld liste

Hændelse Hvornår Parametre Analytisk værdi
available_tenancies_filter_changed Bruger ændrer et filter (værelser, størrelse, husleje, region) filter_type filter_value Viser filtreringsadfærd på listen — identificér de mest brugte filtertyper.
available_tenancies_filters_cleared Bruger klikker "Vis alle" / nulstiller alle filtre ingen Frustrationssignal — brugeren starter forfra med en ren søgning.
available_tenancies_page_changed Bruger navigerer til en ny side i resultatlisten page Måler listens dybde — bladrer brugere igennem, eller giver de op tidligt?
available_tenancy_single_viewed Bruger lander på siden med et enkelt lejemål (via URL-parameter) company_id department_id tenancy_id Sporer direkte trafik til enkeltlejemål via delte links.
available_tenancies_back_to_full_list Bruger vender tilbage til den fulde liste fra enkeltvisning ingen Navigationsmønster — brugeren returnerer fra detaljevisning til oversigten.

Lejemålskort

Hændelse Hvornår Parametre Analytisk værdi
available_tenancy_link_copied Bruger kopierer direkte link til lejemålet company_id department_id tenancy_id Deling af specifikke boliger — måler viral rækkevidde og kollaborativ boligsøgning.
available_tenancy_request_modal_opened Bruger åbner ansøgningsformularen for et lejemål company_id department_id tenancy_id Stærkt konverteringssignal — brugeren åbner ansøgningsformularen direkte fra lejemålskortet.
available_contact_modal_submitted Bruger indsender kontaktformularen og API-kaldet lykkes (delt med forside-karussel) company_id department_id tenancy_id Bekræftelse på indsendelse fra lejemålskortet — samme hændelse som i karusellen, men udløst fra listevisning.
available_tenancy_view_toggled Bruger skifter mellem billeder og kortvisning på et lejemålskort view images | maps company_id department_id tenancy_id Engagement med medieindhold — viser om brugere prioriterer billeder eller kortplacering.
available_tenancy_fullscreen_opened Bruger åbner billedgalleri i fuld skærm company_id department_id tenancy_id Stærkt interesse-signal — brugeren undersøger boligen i detaljen via billedgalleri.
🔑

Session-ID'er

signup_session_id og search_session_id

Hvert modul genererer et unikt session-ID ved siden indlæsning via crypto.randomUUID(). ID'et kobles automatisk til alle hændelser fra den pågældende session, så du kan følge et enkelt brugerforsøg fra start til slut.

SpørgsmålSådan finder du svaret
Hvor mange startede tilmelding? Antal hændelser på signup_started
Hvor mange unikke brugere startede? Unikke brugere på signup_started — GA4 tæller via sin egen Client ID-cookie automatisk
Prøvede nogen tilmelding flere gange? Antal hændelser ÷ unikke brugere på signup_started — ratio > 1 betyder gentagede forsøg
Hvornår giver brugere op efter valideringsfejl? Sessions med signup_validation_failed men ingen efterfølgende signup_step_completed på samme signup_session_id
Hvilke filtre bruges mest i søgningen? Aggregér filter_areas, filter_tenancy_types osv. fra tenancy_filter_changed — brug is_initial_search = false for kun brugerændringer
Hvor ofte søger brugere uden at tilføje til ønskeseddelen? Sessions med tenancy_search_performed men ingen wishlist-hændelse på samme search_session_id
💡
session_id ≠ bruger-ID Begge session-ID'er er nye pr. sideindlæsning, ikke pr. bruger. To besøg fra samme person giver to forskellige session-IDs. Til at tælle unikke brugere bruges GA4s eget Client ID eller Monsidos besøgsidentifikation.
🔍

Bekræft at hændelserne sendes

Hurtig test i browseren

Åbn browserens konsol (F12) på den relevante side og kør:

// Opskrivningshændelser
window.dataLayer.filter(function(e) {
  return e.event && e.event.indexOf('signup_') === 0;
});

// Søgehændelser
window.dataLayer.filter(function(e) {
  return e.event && e.event.indexOf('tenancy_') === 0;
});

// Ledige boliger-hændelser
window.dataLayer.filter(function(e) {
  return e.event && e.event.indexOf('available_') === 0;
});

Eksempel på forventet output for opskrivningen:

[
  { event: "signup_started",          signup_session_id: "a3f8c2d91" },
  { event: "signup_step_viewed",       signup_session_id: "a3f8c2d91", signup_step: 1, signup_step_name: "Vælg opskrivninger" },
  { event: "signup_validation_failed",  signup_session_id: "a3f8c2d91", signup_step: 1, signup_step_name: "Vælg opskrivninger" },
  { event: "signup_step_completed",     signup_session_id: "a3f8c2d91", signup_step: 1, signup_step_name: "Vælg opskrivninger" },
  ...
]

Eksempel på forventet output for lejemålssøgning:

[
  { event: "tenancy_search_started",    search_session_id: "b7e1d4f02", has_hash_params: false },
  { event: "tenancy_filter_changed",    search_session_id: "b7e1d4f02", is_initial_search: true, active_filter_count: 0, ... },
  { event: "tenancy_search_performed",  search_session_id: "b7e1d4f02", result_count: 142, department_count: 18, active_filter_count: 0 },
  { event: "tenancy_filter_changed",    search_session_id: "b7e1d4f02", is_initial_search: false, active_filter_count: 2, filter_areas: "København", ... },
  { event: "tenancy_search_performed",  search_session_id: "b7e1d4f02", result_count: 34, department_count: 6, active_filter_count: 2 },
  ...
]
⚠️
Listen er tom? Sørg for at dit analytics-script (GTM, GA4 eller Monsido) indlæses inden komponenterne. GTM initialiserer automatisk window.dataLayer, men ved manuel integration skal du sætte window.dataLayer = window.dataLayer || []; i sidens <head>.

Almindelige problemer

ProblemÅrsagLøsning
Ingen hændelser overhovedet Analytics-script indlæses efter komponenten Flyt GTM/GA4-snippet til <head> — før komponenternes scripts
Tags affyres ikke i GTM Hændelsesnavn matcher ikke triggeren Navnene er versalfølsomme — tjek stavning
signup_step_name er undefined Datalag-variablen er oprettet forkert i GTM Variabelnavnet skal være præcis signup_step_name, version 2
signup_completed mangler Betalingsgateway bruges som mellemled Hændelsen affyres ved direkte backend-succes. Ved gateway-betaling registreres den, når brugeren returneres til kvitteringssiden
tenancy_filter_changed mangler is_initial_search Datalag-variablen er ikke oprettet i GTM Opret variablen is_initial_search som Datalagsvariabel version 2
⚠️
Forudsætning GTM-containeren skal allerede være installeret på de sider, der hoster komponenterne. Denne vejledning dækker kun opsætningen inde i GTM.
⚡

Trin A — Opret triggere

Triggere → Ny → Brugerdefineret hændelse

Gå til Triggere → Ny og opret én trigger for hver hændelse du vil spore. Vælg typen Brugerdefineret hændelse.

Opskrivning

Triggernavn (dit valg)Hændelsesnavn — skriv præcist
Opskrivning startetsignup_started
Opskrivning — trin vistsignup_step_viewed
Opskrivning — trin fuldførtsignup_step_completed
Opskrivning — valideringsfejlsignup_validation_failed
Opskrivning indsendtsignup_submitted
Opskrivning gennemførtsignup_completed
Opskrivning fejlsignup_error
Kampagnekode anvendtsignup_campaign_applied

Boligsøgning

Triggernavn (dit valg)Hændelsesnavn — skriv præcist
Søgning startettenancy_search_started
Søgning udførttenancy_search_performed
Filtre ændrettenancy_filter_changed
Filtre nulstillettenancy_filters_reset
Lejemål tilføjet til ønskeseddeltenancy_added_to_wishlist
Afdeling tilføjet til ønskeseddeltenancy_department_added_to_wishlist
Alle søgeresultater til ønskeseddeltenancy_search_added_to_wishlist
Til tilmelding fra søgningtenancy_navigate_to_signup
  1. Vælg triggertype

    Klik Brugerdefineret hændelse under "Andre".

  2. Udfyld hændelsesnavn

    Skriv det præcise event-navn fra tabellen. Hak Brug regulære udtryk fra.

  3. Affyres på: Alle brugerdefinerede hændelser

    Gem med et beskrivende navn, f.eks. fra tabellen ovenfor.

💡
Du behøver kun oprette triggere for de hændelser, du faktisk bruger. Minimum anbefales for tilmelding: signup_step_viewed, signup_validation_failed og signup_completed. For søgning: tenancy_search_performed og tenancy_added_to_wishlist.
📦

Trin B — Opret datalag-variabler

Variabler → Ny → Datalagsvariabel

Opret disse variabler for at kunne videresende hændelsesparametre til GA4 og Monsido.

  1. Gå til Variabler → Ny → Datalagsvariabel
  2. Opskrivning — Trinsnummer

    Navn på datalagsvariabel: signup_step · Version 2
    Gem som: DLV – Opskrivning trinsnummer

  3. Opskrivning — Trinsnavn

    Navn på datalagsvariabel: signup_step_name · Version 2
    Gem som: DLV – Opskrivning trinsnavn

  4. Opskrivning — Session-ID

    Navn på datalagsvariabel: signup_session_id · Version 2
    Gem som: DLV – Opskrivning session-ID

  5. Søgning — Session-ID

    Navn på datalagsvariabel: search_session_id · Version 2
    Gem som: DLV – Søgning session-ID

  6. Søgning — Antal resultater

    Navn på datalagsvariabel: result_count · Version 2
    Gem som: DLV – Søgning antal resultater

  7. Søgning — Aktive filtre

    Navn på datalagsvariabel: active_filter_count · Version 2
    Gem som: DLV – Søgning aktive filtre

🏷️

Trin C — Opret GA4-hændelsestags

Tags → Ny → Google Analytics: GA4-hændelse
Tag 1 — Opskrivning: trin vist & valideringsfejl (frafaldsmåling)
Hændelsesnavn{{Event}} (GTMs indbyggede variabel)
Hændelsesparametre signup_step → {{DLV – Opskrivning trinsnummer}}
signup_step_name → {{DLV – Opskrivning trinsnavn}}
signup_session_id → {{DLV – Opskrivning session-ID}}
KonfigurationstagDit GA4-konfigurationstag
TriggereOpskrivning — trin vist, Opskrivning — valideringsfejl
Tag 2 — Opskrivning gennemført Konvertering
Hændelsesnavnsignup_completed
Hændelsesparametresignup_session_id → {{DLV – Opskrivning session-ID}}
KonfigurationstagDit GA4-konfigurationstag
TriggerOpskrivning gennemført

Marker efterfølgende hændelsen som konvertering i GA4: Administrator → Hændelser → slå konvertering til.

Tag 3 — Søgning udført
Hændelsesnavntenancy_search_performed
Hændelsesparametre result_count → {{DLV – Søgning antal resultater}}
active_filter_count → {{DLV – Søgning aktive filtre}}
search_session_id → {{DLV – Søgning session-ID}}
KonfigurationstagDit GA4-konfigurationstag
TriggerSøgning udført
Tag 4 — Lejemål tilføjet til ønskeseddel Engagement
Hændelsesnavn{{Event}}
Hændelsesparametresearch_session_id → {{DLV – Søgning session-ID}}
KonfigurationstagDit GA4-konfigurationstag
TriggereLejemål tilføjet til ønskeseddel, Afdeling tilføjet til ønskeseddel, Alle søgeresultater til ønskeseddel
🚀

Trin D — Test og udgiv

Forhåndsvisning → Udgiv
  1. Klik Eksempel øverst til højre i GTM

    Åbn din hjemmeside i det nye Tag Assistant-vindue og gennemgå opskrivningen og søgesiden.

  2. Bekræft at tags affyres

    I Tag Assistant-panelet skal hvert trin og søgning udløse de rigtige tags. Kontroller at variablerne har de forventede værdier.

  3. Udgiv containeren

    Klik Udgiv og angiv en beskrivende version, f.eks. "Opskrivning + søgning analytics".

ℹ️
Forudsætning Hændelserne skal allerede sendes via Google Tag Manager (se GTM-fanen). Giv det 24–48 timer efter første publicering, inden data dukker op i GA4.
🗂️

Trin 1 — Opret brugerdefinerede dimensioner

Administrator → Brugerdefinerede definitioner

For at kunne filtrere og segmentere på hændelsesparametre i GA4 skal de registreres som brugerdefinerede dimensioner.

  1. Gå til Administrator → Brugerdefinerede definitioner → Brugerdefinerede dimensioner → Opret
  2. Opskrivning — Trinsnavn

    Navn: Opskrivning trinsnavn · Omfang: Hændelse · Parameternavn: signup_step_name

  3. Opskrivning — Session-ID

    Navn: Opskrivning session-ID · Omfang: Hændelse · Parameternavn: signup_session_id

  4. Opskrivning — Trinsnummer

    Navn: Opskrivning trinsnummer · Omfang: Hændelse · Parameternavn: signup_step

  5. Søgning — Session-ID

    Navn: Søgning session-ID · Omfang: Hændelse · Parameternavn: search_session_id

  6. Søgning — Aktive filtre

    Navn: Søgning aktive filtre · Omfang: Hændelse · Parameternavn: active_filter_count

  7. Søgning — Antal resultater

    Navn: Søgning antal resultater · Omfang: Hændelse · Parameternavn: result_count

📊

Trin 2 — Byg tilmeldings-frafaldstragt

Udforsk → Tragtanalyse

Eksempel — dine tal vil variere

  1. Udforsk → Tragtanalyse

    Klik Udforsk i venstre menu og vælg Tragtanalyse som skabelon.

  2. Tilføj trin via blyantsikonet
    TrinHændelseBetingelse
    1signup_started
    2signup_step_completedsignup_step = 1
    3signup_step_completedsignup_step = 2
    4signup_submitted
    5signup_completed
  3. Vælg tragttype

    Åben tragt viser brugere, der springer trin over. Lukket tragt er den strengeste frafaldsmåling.

  4. Gem analysen

    Klik de tre prikker øverst → Gem. Juster tidsintervallet øverst til højre.

🔍

Trin 3 — Analyser søgeadfærd

Rapporter → Engagement → Hændelser
  1. Åbn Rapporter → Engagement → Hændelser

    Find tenancy_search_performed. Her kan du se Antal hændelser (samlede søgninger) og Brugere side om side.

  2. Analyser filterbrug

    Klik på tenancy_filter_changed → tilføj dimensionen Søgning aktive filtre for at se fordelingen af 0, 1, 2… aktive filtre. Segmentér på is_initial_search = false for kun brugerinitierede ændringer.

  3. Segment: Søgte men tilføjede aldrig til ønskeseddelen

    Opret et segment i Udforsk: hændelsen tenancy_search_performed indeholder og ingen af wishlist-hændelserne indeholder. Dette viser brugere, der overvejer men ikke handler.

💡
Nulresultater Filtrer tenancy_search_performed på Søgning antal resultater = 0 for at se, hvilke søgninger der ikke giver resultater. Disse er gode kandidater til at justere din bestand eller dine filterstandarder.
👥

Trin 4 — Unikke brugere vs. samlede forsøg

Rapporter → Engagement → Hændelser
  1. Åbn Rapporter → Engagement → Hændelser

    Find signup_started i listen. Her kan du se Antal hændelser (samlede forsøg) og Brugere (unikke) side om side.

  2. Analyser valideringsfejl pr. trin

    Klik på signup_validation_failed → tilføj dimensionen Opskrivning trinsnavn for at se, hvilke trin der giver flest fejl.

  3. Segment: Brugere der prøvede men aldrig gennemførte

    Opret et segment i Udforsk med betingelse: hændelsen signup_started indeholder og hændelsen signup_completed indeholder ikke. Dette viser dit reelle frafald.

💡
Gentagne forsøg fra samme bruger Ratio = antal signup_started-hændelser ÷ unikke brugere på samme hændelse. En ratio over 1,0 fortæller dig, at brugere vender tilbage og prøver igen — et tegn på en barriere i flowet.
ℹ️
Hvordan Monsido modtager hændelserne Monsido læser ikke automatisk fra window.dataLayer. Du skal videresende hændelserne via window._monsido_analytics.trackEvent() — enten via GTM eller med et direkte JavaScript-snippet.
🏷️

Metode A — Via Google Tag Manager

Anbefalet hvis du allerede bruger GTM

Genbruger de triggere og variabler du oprettede i GTM-fanen.

  1. Opret et nyt tag → Brugerdefineret HTML
  2. Indsæt følgende kode (dækker begge moduler)
    <script>
      if (window._monsido_analytics) {
        var evt = "{{Event}}";
        var category = evt.indexOf('signup_') === 0
          ? "Opskrivning"
          : "Boligsøgning";
        var label = {{DLV – Opskrivning trinsnavn}} ||
                    {{DLV – Søgning antal resultater}} ||
                    undefined;
        window._monsido_analytics.trackEvent(
          category, evt, label
        );
      }
    </script>

    {{Event}} er GTMs indbyggede variabel.

  3. Tilknyt alle triggere fra begge moduler

    Under "Udløsning" vælges alle triggere fra GTM-trin A (tilmelding og søgning).

  4. Udgiv containeren som beskrevet i GTM-trin D
📝

Metode B — Direkte JavaScript

Uden Google Tag Manager

Indsæt dette snippet i sidens <head>, efter Monsido-sporingskoden men før komponenternes scripts.

// Videresend Member Portal-hændelser til Monsido
(function () {
  window.dataLayer = window.dataLayer || [];
  var _push = window.dataLayer.push.bind(window.dataLayer);

  window.dataLayer.push = function (obj) {
    _push(obj);
    if (!obj || !obj.event) return;

    var isSignup  = obj.event.indexOf('signup_')   === 0;
    var isSearch  = obj.event.indexOf('tenancy_')  === 0;

    if ((isSignup || isSearch) && window._monsido_analytics) {
      var category = isSignup ? 'Opskrivning' : 'Boligsøgning';
      var label    = obj.signup_step_name ||
                     obj.result_count ||
                     undefined;
      window._monsido_analytics.trackEvent(
        category,
        obj.event,
        label
      );
    }
  };
})();
📈

Se data i Monsido

Analytics → Hændelser

Hændelserne er struktureret i tre niveauer i Monsido:

NiveauOpskrivningBoligsøgning
KategoriOpskrivningBoligsøgning
Handlingsignup_step_completedtenancy_search_performed
EtiketTrinnavnet, f.eks. Om digAntal resultater, f.eks. 34
  1. Gå til Analytics → Hændelser

    Filtrer på kategori Opskrivning eller Boligsøgning for at se de to modulers hændelser adskilt.

  2. Frafald i tilmelding

    Sammenlign handlingerne signup_step_completed med etiket "Vælg opskrivninger" kontra "Om dig" — direkte frafaldsmåling pr. trin.

  3. Søgeengagement

    Sammenlign antallet af tenancy_search_performed med antallet af wishlist-hændelser. Lav ratio = brugere søger men tilføjer ikke.

  4. Identificer valideringsproblemer

    Filtrer på handlingen signup_validation_failed og gruppér på etiket (trinsnavn) for at se, hvilke trin der giver flest fejl.

💡
Unikke besøg i Monsido Monsido tæller automatisk unikke besøgende via sin egen cookie. Sammenlign Antal hændelser med Unikke hændelser på signup_started for at se, hvor mange besøg der kom fra tilbagevendende brugere.