Spring til indhold
Betterlytics

Fejlsporing: Fang de fejl dine besøgende støder på, og se hvad der førte til dem

Find ud af, hvilke bugs der rammer flest besøgende, hvor i koden de opstår, og hvad hver besøgende gjorde bagefter. Gratis i alle planer og samlet i ét dashboard med din trafik og dine replays.

2min

Replay-optakt

Gem op til to minutter før en fejl som et replay, også for besøg, du normalt ikke optager.

0udvidelsesfejl

Kun dine egne bugs

Fejl fra de besøgendes browserudvidelser springes over, og bots sorteres fra, før noget bliver gemt.

1script

Ét script til det hele

Webanalyse, fejl og session replay indlæses fra ét script-tag. Bruger du allerede Betterlytics? Tilføj én attribut.

0cookies

Ingen cookies, ingen IP’er

Fejl gemmes uden cookies, IP-adresser eller query strings, så dine besøgendes privatliv er i behold.

Fra »det virker ikke« til linje 142

De fleste besøgende, der rammer en bug, går uden at sige noget til dig. Betterlytics viser, hvilken linje der kastede fejlen, i hvilken browser og hvor ofte.

Til venstre strømmer vage meldinger om prissiden forbi: tre ens mails om, at man ikke kan opgradere, en melding om, at der ikke sker noget, når man vælger en plan, en supportchat, et sløret skærmbillede, et gæt på browseren, en seddel med »virker på min maskine«, en P1-ticket om, at opgraderinger har fejlet siden mandag, og en supportindbakke med 14 ulæste. Til højre ses den samme bug som én fejlgruppe: en TypeError kastet i selectPlan på linje 142 i pricing.js og kaldt fra onClick i plan-card.js, i Chrome på macOS i Danmark, på /pricing, 1.206 gange.

Gætværk ud fra fejlrapporter

Rettelser ud fra stack trace

Se hvad de gjorde før og efter

En stack trace viser, hvor koden fejlede. Besøget omkring fejlen viser, hvad der udløste den, og hvad den besøgende gjorde bagefter.

Et sessionsforløb med otte hændelser. Før fejlen landede den besøgende på forsiden, åbnede /pricing og valgte en plan. Et sekund senere kom fejlen, en TypeError kastet i selectPlan på linje 142 i pricing.js i Chrome 129 på macOS, på en computer i Danmark. Bagefter genindlæste den besøgende /pricing, valgte en plan igen, ramte den samme fejl og gik videre til /contact i stedet for at opgradere.

Optakten

Landede på forsiden, åbnede prissiden og valgte en plan.

Her gik det galt

Kastet i selectPlan på linje 142 i pricing.js, med den browser, det operativsystem og det land, den skete i.

Følgerne for besøget

Genindlæste, ramte fejlen igen og gik så til /contact i stedet for at opgradere.

Gå listen igennem sammen

Fejlenes status deles med dit team, så alle arbejder ud fra den samme liste, og ingen jagter en bug, der allerede er rettet.

Læs guiden til dashboardet
  • Løs, ignorér, fjern som løst

    Markér rettede fejl som løst, og ignorér dem, der ikke betyder noget, så listen kun viser de bugs, der stadig skal fikses.

  • Se hvem den rammer

    Opdag, om en fejl tager til eller aftager, og hvilke browsere og enheder den rammer mest.

  • Filtrér som i din webanalyse

    Filtrér fejl på side, browser, operativsystem, land og meget mere, ligesom i din webanalyse, og se, om en bug kun rammer nogle besøgende.

  • Gå gennem forekomster

    Bladr gennem hver forekomst med sit eget besøg og sin egen enhed, og find mønsteret, fx en bug, der kun dukker op på iOS.

Overlad fejlen til din agent

Din kodeagent kan slå fejl op via den indbyggede MCP-server og arbejde på rettelsen lige ved siden af din kode.

Fra klage til rettelse med ét spørgsmål

Spørg Claude Code, Cursor eller enhver anden MCP-klient om en klage. Den finder den tilhørende fejl, læser stack trace og sessionsforløb og åbner den fil, stacken peger på.

Virker med

Og enhver anden klient der taler MCP over HTTP.

Begynd at fange fejl med én attribut

Vælg, hvad der skal fanges, og kopiér kodestykket. Det kører i samme script som din webanalyse.

Vælg hvad der skal fanges

  • Uhåndterede fejl og afviste promisesAlt, hvad din kode kaster uden at fange det, og promises, der bliver afvist uden en handler.Altid aktiv
index.html
<script async  src="https://betterlytics.io/analytics.js"  data-site-id="YOUR_SITE_ID"  data-track-errors="true"></script>

Ofte stillede spørgsmål

Hvad er fejlsporing?

Fejlsporing, også kaldet fejlovervågning eller error tracking, registrerer de JavaScript-fejl, dine besøgende støder på, og samler gentagelser af den samme bug, så du kan se, hvilke der sker oftest. Betterlytics fanger dem med det samme script, der registrerer dine sidevisninger, og gemmer den session, hver fejl opstod i.

Er fejlsporing gratis?

Ja. Det er med i alle planer, også den gratis. Hver fejl tæller som ét event i din månedlige kvote, ligesom en sidevisning.

Hvilke fejl bliver fanget?

Uhåndterede exceptions og afviste promises uden handler, hver med sin stack trace og den side, den skete på. Du kan også fange console.error-kald. En mislykket forespørgsel bliver kun fanget, hvis din kode ikke håndterer fejlen. Fejl ved indlæsning af billeder og scripts udelades, fordi adblockere og ustabile forbindelser ellers ville oversvømme din liste med dem.

Fanger det fejl på serversiden?

Nej. Det dækker frontendfejl, altså den JavaScript, der kører i dine besøgendes browsere. Fejl i din serverkode, dine API-ruter eller baggrundsjobs bliver ikke fanget.

Bliver fejl fra browserudvidelser og bots filtreret fra?

Ja. Scriptet springer fejl over, når deres stack trace peger ind i en browserudvidelse, så en besøgendes adblocker eller password manager ikke dukker op som din bug. Fejl fra bots, headless browsere og testværktøjer som Playwright bliver smidt væk, før de gemmes, ligesom deres sidevisninger.

Virker det med React, Next.js og Vue?

Ja. Scriptet fanger fejl på ethvert site, uanset hvilket framework det kører på. Fejl, som et framework selv fanger, fx i en React error boundary eller Vues error handler, bliver som regel logget med console.error i stedet for at blive kastet, så slå opsamling af console.error til, hvis du også vil se dem.

Hvordan bliver fejl grupperet?

Alle forekomster af den samme bug havner i én gruppe med en løbende optælling, så hver bug kun står én gang på din liste i stedet for at dukke op, hver gang en besøgende rammer den. Fejl af samme type, der bliver kastet samme sted i din kode, tæller som én bug, selv når beskederne er forskellige.

Understøtter I source maps?

Nej. Stack traces viser koden, som browseren kørte den, så frames fra et minificeret bundle peger ind i den minificerede fil.

Indsamler fejlsporing persondata?

Fejlsporing bruger ingen cookies, ligesom resten af Betterlytics. Fejlbeskeder gemmes præcis, som din kode skrev dem, så hold persondata ude af dem, og lad opsamling af console.error være slået fra, hvis dine logs kan indeholde persondata.

Kan et loop, der løber løbsk, bruge alle mine events op?

Hver side sender højst 10 fejl af samme type hvert 10. sekund, så et loop, der kaster en fejl i hver frame, ikke fylder ret meget. Ignorerer du en gruppe, forsvinder den fra listen, men nye forekomster tæller stadig som events, indtil du retter årsagen.

Hvordan spiller det sammen med session replay?

Hvis et besøg med en fejl blev optaget, linker fejlen til replayet, med en rød markør ved hver fejl på tidslinjen. Du kan desuden gemme op til to minutter før hver fejl som et replay, også for besøg, som session replay ellers ikke ville optage.

Fang din første fejl i dag

Tilføj Betterlytics-scriptet, eller én attribut, hvis du allerede har det, så begynder fejlene at dukke op i dit dashboard. Gratis i alle planer.