Spring til indhold
WebIndsigter

Fejlsider der hjælper videre — 404, 500 og det der ikke må dø

Fejlsiden er ærlig, når statuskoden er sand, og brugeren har et næste skridt.

En 404 er en vej videre, ikke en brandjoke. En 500 er en ærlig pause, ikke et reload-loop. Siden I viser ved fejl, er stadig jeres site.

13 minutters læsning
Stiliseret browservindue med performance-grafer — en 404-side med tydelige veje videre, ikke en tom fejl eller en brandjoke.

Web & recovery

Hvis I søger efter 404 side, eller efter custom 404, eller efter fejlside website, står I typisk ét sted: I har en side, der siger 'siden findes ikke', og I er usikre på om den tæller. Nogen har en illustration og et link til forsiden. Nogen returnerer 200 med teksten 'not found', så Google crawler et hul som om det var indhold. Nogen har en 500 der auto-reloader i et loop, mens origin er nede. Nogen har WordPress' standard, Next.js' nøgne `not-found`, og en CDN-fejl der slet ikke ligner sitet.

Overvågnings-indlægget handler om at opdage at sitet er nede: uptime, formular, Search Console. Den her handler om det, brugeren ser, når en URL er død, når origin fejler, eller når en handling ikke gik igennem. En ærlig fejlside er recovery: statuskoden er sand, næste skridt er synligt, og det der stadig kan virke — søgning, kontakt, de sider I ved lever — er i nærheden. En illustration er tilladt. Den er ikke jobbet.

TL;DR

De vigtigste pointer

  • En 404 skal være 404. En soft 404 (200 med 'ikke fundet') er et hul, I fodrer indekset med.
  • Giv et næste skridt: søgning, de stier I ved lever, kontakt — ikke kun 'gå til forsiden'.
  • En 500 må ikke auto-reloade i et loop. Den skal sige at fejlen er jeres, og hvad brugeren kan gøre.
  • Fejlsiden er stadig jeres site: samme header, samme sprog, samme cookie-banner-pligt, samme tilgængelighed.
  • Behold den URL, de bad om, synlig. Den er spor til support og til jer, når I retter redirecten.
  • Test 404, 500 og en handling der fejler — ikke kun at illustrationens SVG renderer.

Hvorfor det her overhovedet er vigtigt

En død URL uden vej videre koster jer den session, I allerede havde betalt for at få. Brugeren kom fra et gammelt nyhedsbrev, et PDF-link, et citat i et opslag, en staving. De lander på en tom 404 eller en forside, I sendte dem til med et 302, og går. I tror I har 'en 404-side'. I har et stop. Recovery er det kedelige: vis at I forstod URL'en, vis tre stier der lever, vis søgning, vis hvordan de rækker ud. Forsiden er ét link. Den er ikke en strategi.

Teams arver den forkerte default. WordPress viser et tema-404, ingen har redigeret. Next.js viser `not-found.tsx` med ét afsnit. CDN'en viser en vendor-side på et andet sprog, når origin er nede. Tre sandheder, ingen af dem jeres. Overvågning fortæller jer at noget er galt. Fejlsiden er det, kunden ser, mens I stadig kigger i loggen. De to indlæg er naboer. De er ikke det samme job.

Det er også et SEO- og tillidsspørgsmål. En soft 404 — 200 OK med 'siden findes ikke' — lærer Google at jeres 404'er er indhold. En 302 fra hver død URL til forsiden lærer Google at forsiden er svaret på alt, og at I ikke har styr på jeres stier. Relancering-indlægget er cutover og 301'er. Her er det den URL, I ikke nåede at rette: den skal dø højt, med 404, og med en side I ikke skammer jer over at vise en crawler.

Vi skriver det, fordi 'custom 404' er blevet et design-køb, I tager før I har en sætning om recovery. Et ærligt setup er kedeligt: rigtig status, samme chrome som resten af sitet, et næste skridt, og en 500 der ikke gør outagen værre. Uden den sætning har I en illustration. I har ikke en fejlside.

Hvad en recovering fejlside faktisk er — og hvad den ikke er

En recovering fejlside er tre ting på én skærm: I siger ærligt hvad der skete (findes ikke, eller vi fejlede), I lader statuskoden matche, og I giver et næste skridt der ikke er gætteri. På 404: søgning, et lille sæt stier I ved lever, den URL de bad om, en vej til kontakt. På 500: 'det er os', et tidspunkt eller et reference-id hvis I har det, et forbud mod at sende formularen igen i blindo, et link til status hvis I har en. Det er recovery. Det er ikke en campaign.

Det er ikke overvågning. Overvågning er at I opdager at origin er nede, at formularen døde, at GSC så et crawl-spike. Fejlsiden er det, der holder brugeren, mens det sker. I kan have pæn uptime-alerting og en 404, der kun siger '404'. I kan have en kærlig illustration og ingen alarm. I skal have begge. Den her post er kun det, skærmen viser.

Det er heller ikke en redirect-strategi. En 301 fra en gammel sti til den nye er det rigtige, når I kender målet. En 302 af alle ukendte stier til `/` er hvordan I skjuler gæld og ødelægger signalet. Relancering-indlægget er listen, I retter. 404'en er det, I viser, når listen ikke har rækken. De to må ikke bytte plads. En forside er ikke en 404.

Og det er ikke en brandjoke som job. En vittighed, et 404-spil, et 'oops'-illustration er tilladt, hvis næste skridt stadig er der, og hvis siden er tilgængelig. Det er ikke tilladt som den eneste indsats. Hvis I brugte design-budgettet på animationen og lod søgning og stier ude, har I købt et meme. Brugeren kom med en intention. Giv dem en vej der ligner den.

Det der typisk går galt, når nogen siger vi har en 404-side

Den første fejl er statuskoden. Appen viser den rigtige tekst og det forkerte header. Et client-side router-fallback, et `fallback: true` uden 404, en middleware der rewriter til `/` . Crawleren ser 200. Brugeren ser 'ikke fundet'. I har løjet til begge. Test med `curl -sI` på en sti, I ved er død, og på en sti, I lige har slettet. Hvis I kun kigger i browseren, tester I layoutet.

Den anden fejl er forsiden som fælde. Hver ukendt URL 302'er til `/`, 'så de ikke ser en fejl'. Så kan I ikke se i loggen, hvad der var dødt. Google lærer at forsiden er svaret på gamle slugs. Brugeren mister den URL, de kunne have sendt til support. En 404 med den oprindelige sti i brødteksten er ærligere — og den giver jer den liste, redirect-indlægget senere skal bruge.

Den tredje fejl er 500-siden, der gør outagen værre. Auto-reload hvert femte sekund. Et script der rammer origin igen. En 'prøv igen'-knap der poster betalingen anden gang. Når origin er nede, skal fejlsiden være statisk — cachet ved kanten, uden at kalde databasen for at vise at databasen er død. Sig at det er jer. Giv et tidspunkt at prøve igen. Gem handlingen, hvis I kan. Reload-loopet er hvordan I DDoS'er jer selv.

Den fjerde fejl er at fejlsiden ikke er jeres site. Andet sprog. Ingen navigation. Et andet cookie-banner, eller slet ingen, mens scripts alligevel kører. Et layout der bryder på mobil. Cookie-banner-indlægget er kontrollen. Tilgængeligheds-indlægget er EAA. Her er pligten enklere: 404 og 500 skal kunne bruges af det samme menneske, der kunne bruge forsiden. Hvis de ikke kan, er recovery et screenshot.

Død side vs. recovering side — to 404'er, to slags næste skridt

Den døde fejlside

En status, en vittighed, et link til forsiden. Sessionen slutter her.

  • 200 eller 302 i stedet for 404 — eller en vendor-500 på et andet sprog
  • Kun 'gå til forsiden'; den URL de bad om, er væk
  • Ingen søgning, ingen stier I ved lever, ingen kontakt
  • 500 auto-reloader eller poster handlingen igen

Den recovering fejlside

Sand status. Samme site. Et næste skridt der ligner intentionen.

  • 404 er 404; 500 er 500; edge kan vise den uden at ramme en død origin
  • Den badte URL er synlig; søgning og tre-fem levende stier ligger klar
  • Kontakt eller status, uden at tvinge dem gennem et dødt form-endpoint
  • Ingen reload-loop; 'prøv igen' er et valg, ikke et script

Sådan laver I fejlsider, der faktisk redder sessionen

Uden den her rækkefølge får I en illustration, I kalder færdig.

  1. 01

    Inventér de måder, I allerede dør på — ikke kun `/foo`

    En sti der aldrig fandtes. En sti I slettede. En forældet kampagne-URL. Origin nede bag CDN. En handling (køb, login, formular) der fejlede efter submit. Hver død har sit job. 404'en er 'findes ikke'. 500'en er 'vi fejlede'. Handlingsfejlen er 'det gik ikke igennem — send ikke igen i blindo'. Hvis I kun designer én side, designer I den forkerte til to af de tre.

  2. 02

    Lås statuskoden — så byg chrome

    404 skal ud som 404, 500 som 500. I Next.js er det `not-found` og `error` / `global-error`, ikke et rewrite til forsiden. I WordPress er det template og at I ikke fanger alle 404'er med et plugin der 302'er. Først når headeren er sand, giver illustration og copy mening. Soft 404'en er den fejl, GSC allerede har et navn for.

  3. 03

    Giv et næste skridt der ligner intentionen — ikke kun forsiden

    Hvis I kan gætte sektionen (et gammelt `/indsigter/`-slug, et gammelt produkt), så peg der. Ellers: søgning, et lille sæt stier der faktisk lever (ydelser, kontakt, seneste indsigter), den URL de bad om som tekst. Forsiden er tilladt. Den er ikke det eneste. En 404 der kun siger 'home' er hvordan I fortæller brugeren, at I ikke vidste hvad de ville.

  4. 04

    Gør 500'en statisk nok til at overleve origin

    Når databasen eller appen er nede, kan I ikke rendere fejlsiden fra samme sted. Cache en kedelig, ærlig 500 ved kanten, eller hold den som statisk HTML. Ingen 'hent relaterede artikler' på den side. Ingen auto-reload. Hvis I har en status-side, link dertil. Hvis I har et reference-id, vis det. Overvågnings-indlægget er alarmen. Her skal skærmen ikke gøre alarmen værre.

  5. 05

    Test de tre dødsfald efter hver deploy — og læs loggen bagefter

    Kold 404 I kender. En slettet slug. En tvungen 500 (et preview der kaster). `curl` på status. Skærmlæser på næste-skridt. Gentag efter en relancering og efter nogen har 'bare tilføjet et rewrite'. Så kig i loggen: de 404'er, der gentager sig, er redirect-køen, ikke et designproblem. En fejlside uden den sløjfe er et plakat. Den bliver aldrig klogere.

“Fejlsiden er ærlig, når statuskoden er sand, og brugeren har et næste skridt.”

Next.js, WordPress og kanten — samme pligt, forskellige fælder

Et Next.js-site dør typisk i `not-found` I aldrig har skrevet, i et rewrite der sluger ukendte stier, eller i en `error.tsx` der kalder appen igen for at vise at appen er død. App Router giver jer de rigtige primitiver. Den giver jer også chancen for at late som om en client-side tom-tilstand er en 404. Hold 404 på serveren. Hold 500 så tæt på statisk, I kan. Preview-deploys er et godt sted at vise en kollega `curl -sI` på en død sti — før det når prod.

Et WordPress-site dør typisk i temaets 404, I aldrig åbnede, og i plugins der 302'er 'for SEO'. Et cache-plugin kan servere en 200-cache af en side, I har slettet. Et redirection-plugin kan sende alt til forsiden. Inventér med en kold sti og et cache-bypass. Hvis I ikke kan pege på templaten og på statuskoden, har I ikke en 404. I har et tema.

Kanten — Cloudflare, Vercel, en load balancer — er den 500, I glemmer. Når origin ikke svarer, viser vendoren sin egen side, ofte på engelsk, ofte uden jeres navigation. Det er stadig jeres brand i fem minutter. En custom error-page ved kanten, cachet, uden origin-kald, er det kedelige arbejde der gør overvågning synlig for kunden som 'vi ved det', ikke som 'sitet er væk'. Overvågning uden den side er en Slack-besked. Kunden ser vendorens CSS.

Hvis I allerede har overvågning, relancering og et ærligt cookie-banner, og 404'en stadig føles som det svage led, så er det fordi den er det. Alarmen uden recovery er en intern mail. Cutover uden 404 er et håb om at listen var komplet. Banneret uden en 404 der også overholder samtykke, er et læk på den side, I troede ingen så. Fejlsiden er det, den forkerte URL ser. Den skal kunne bære de andre.

Hvad I typisk bør gøre i den situation, I står i

Venstre er det, I typisk siger. Højre er det næste skridt, vi typisk anbefaler.

  • Situation

    Vi har en pæn 404-illustration og kun et link til forsiden

    Næste skridt

    Tilføj søgning, den badte URL og tre-fem stier der lever. Forsiden er ikke recovery

  • Situation

    Ukendte stier 302'er til /, 'så de ikke ser en fejl'

    Næste skridt

    Stop det. 404 med ærlig status. Redirect kun når I kender målet

  • Situation

    GSC kalder URL'en soft 404, og siden siger 'ikke fundet'

    Næste skridt

    Ret statuskoden. Teksten er ikke signalet. Headeren er

  • Situation

    Når origin er nede, viser CDN'en en engelsk vendor-side

    Næste skridt

    En statisk, jeres, 500 ved kanten. Overvågning uden den side er intern

  • Situation

    500-siden reloader automatisk, 'så de kommer tilbage'

    Næste skridt

    Sluk loopet. I DDoS'er jer selv. Giv et tidspunkt og et valg

Tjekliste før I kalder fejlsiden recovering

Hvis I mangler flere af punkterne, er sætningen custom 404 — siden er en plakat.

  • 404 sender 404, 500 sender 500 — tjekket med curl, ikke kun med øjet
  • Den badte URL er synlig, og der er et næste skridt ud over forsiden
  • Søgning eller tre-fem levende stier ligger på 404'en
  • 500'en kan vises, selvom origin er død, og den reloader ikke af sig selv
  • Siden er jeres chrome: sprog, navigation, tilgængelighed, samtykke
  • I har gentaget testen efter sidste rewrite og sidst I slettede en slug

Spørgsmål vi får igen og igen

  • Hvad skal en 404-side indeholde, hvis den skal hjælpe brugeren videre?

    En ærlig besked om at siden ikke findes, den URL de bad om, og et næste skridt der ikke kun er forsiden: søgning, et lille sæt stier I ved lever, en vej til kontakt. Statuskoden skal være 404. Illustration er tilladt. Den erstatter ikke recovery. Hvis I kun har tid til én ting ud over teksten, så behold URL'en og giv tre links, der faktisk virker. Det er det, der redder sessionen.

  • Må vi sende alle ukendte URL'er til forsiden, så folk ikke ser en fejl?

    Ikke hvis I vil have et ærligt indeks og en log, I kan handle på. En 301 er rigtig, når I kender den nye sti. En 302 af alt til `/` skjuler gælden og lærer Google at forsiden er svaret på gamle slugs. Vis 404. Ret de gentagne i en redirect-liste. Relancering-indlægget er cutover. Her er pligten at lade den døde URL dø højt, så I kan se den.

  • Hvad er en soft 404, og hvorfor gør den skade?

    En soft 404 er en URL, der siger 'ikke fundet' i indholdet, men svarer 200 — eller er så tynd, at Google behandler den som ikke-eksisterende alligevel. I fodrer indekset med sider, I selv kalder døde. I spilder crawl. I kan ikke skille 'vi har indhold' fra 'vi har et hul'. Ret headeren. Giv 404'en rigtig 404. Hvis GSC allerede har mærket den, er det ikke et copy-problem. Det er et status-problem.

  • Hvad skal en 500-side gøre anderledes end en 404?

    Den skal sige at fejlen er jeres, ikke brugerens, og den skal overleve den origin, der fejlede. Ingen auto-reload. Ingen 'hent mere fra appen'. Et valg om at prøve igen, et tidspunkt, et status-link hvis I har ét. 404'en hjælper nogen, der ramte en død sti. 500'en hjælper nogen, der ramte et site, I ikke kan vise. Samme chrome. Andet job. Bland dem, og I får en vittighed på en outage.

  • Er en custom 404 det samme som at overvåge sitet?

    Nej. Overvågning er at I opdager at noget er nede, at formularen døde, at crawl ændrede sig. Fejlsiden er det, brugeren ser imens. Vi har skrevet overvågning andetsteds. I kan have pæne alarmer og en vendor-500, eller en kærlig 404 og ingen der ser at origin er død. Den her post retter skærmen. Den erstatter ikke alarmen, og den erstatter ikke de redirects, I stadig skylder efter en relancering.

Hvis I har en illustration og en log fuld af stier, I 302'er væk

Lad os skille 404, 500 og forsiden ad.

En sand status og et næste skridt slår en custom 404, I kalder færdig.

Hvorfor vi skrev den her

Det er sådan vi tænker — og det er det vi bygger.

Vores indsigter handler om det vi rent faktisk leverer. Hvis det her ramte noget du arbejder med, så er der en konkret service der ligger tæt på.