Omdirigering af brugerne

Denne artikel handler om, hvorledes du undgår de frygtede 404-fejl (Siden findes ikke), som uden det egentlig er din skyld kan dukke op hos dine brugere.

Uanset, hvor omhyggelig du er med, fra starten at fastlægge en langtidsholdbar fysisk struktur på dit website og strukturere dine filnavne, vil du før eller siden komme i den situation, at du flytter eller omdøber en fil.

Det rejser to problemer:

  1. For det første skal du sikre dig, at alle dine interne links bliver opdateret, så de afspejler den nye filplacering og/eller det nye filnavn.
  2. For det andet skal du sikre dig, at dine brugere undgår 404-fejlen "Siden findes ikke", dersom de har sat bogmærke (favorit-mærke) ved din side, eller dersom de finder siden gennem en søgemaskine.

Ad 1. Det først nævnte problem er til at overskue, især hvis du bruger et af de programmer –Frontpage, Dreamweaver el . lign. – der har indbygget link validering. Vel at mærke, selvfølgelig, hvis du følger programmets anvisninger på, hvorledes du laver denne øvelse.

Med HomeSite og andre HTML-editorer har du muligheden for en global søg-og-erstat, hvor du udskifter den originale tekststreng med en ny tekststreng.

Ad 2. Det andet problem burde løse sig af sig selv, givet søgerobotternes natur.

Det gør det imidlertid ikke.

Det er derfor en rasende god ide at gøre det til vane at indsætte en omdirigering.

En omdirigering (redirection) sker, når en side automatisk sørger for at indlæse en anden side.

Eksempel:

Du har flyttet siden hurra.htm fra sin oprindelige placering og givet den det nye navn halleluja.htm.

Flytter du eller omdøber du en webside, er det en høflighed overfor brugeren at oprette en omdirigering.

Nu opretter du, der hvor hurra.htm oprindeligt lå, en ny fil med samme navn, det vil sige hurra.htm, men med nyt indhold.

Det er formålet med dette nye indhold at sikre, at en bruger, der efterspørger siden hurra.htm, faktisk finder en side, i stedet for at få en dum meddelelse om, at "Siden findes ikke". Samt, og ikke mindst, at denne side sikrer, at brugeren kobles om til den korrekte side.

Meta-markøren

Koden herunder viser et eksempel på en sådan omdirigeringsside:


<html>
<head>
<title>Siden er flyttet</title>
<meta http-equiv="refresh" content="5;  
  url=../nyesider/halleluja.htm">
<style>
<!--
BODY {font-weight:bold; 
font-size:14px; 
font-family:arial, 
helvetica, sans-serif;
margin:50px;}
-->
</style>
</head>
<body>
<div align="center">
<p>
Denne side er flyttet. I løbet af få sekunder stilles 
du om til siden på dennes nye placering, som er 
<a href="http://www.mitwebsted.dk/nyesider/halleluja.htm">
http://www.mitwebsted.dk/nyesider/halleluja.htm</a>.
</p>
<p>
Sker dette ikke, bedes du venligst starte din søgning 
fra <a href="http://www.mitwebsted.dk">Mit websted</a>.
</p>
</div>
</body>
</html>

Det, der sker her, er, at meta-markøren efter 5 sekunders forløb indlæser den nye side. I de 5 sekunder kan brugeren læse en kort meddelelse om, hvad det er der sker. Har hun ikke tålmodighed til at vente 5 sekunder, kan hun klikke på URL'en til den nye side. Fortryder hun, kan hun klikke på URL'en til webstedet.

Brug af JavaScript til omdirigering

Sætter du i ovenstående eksempel tiden, der skal gå, inden der skiftes side, til 0, vil skiftet ske næsten øjeblikkeligt. Men også kun næsten. Hele siden skal indlæses, før meta-markøren går i gang med at tælle, og det vil ved en modemopkobling være ganske tydeligt, at der indlæses en side, som så derefter meget hurtigt erstattes med en anden side.

Og det er meget frustrerende for en bruger at se et glimt af en side uden nogensinde at kunne komme til at læse den i den helhed.

Derfor er det, hvis du ønsker øjeblikkelig omstilling, bedre at bruge JavaScript.

Her er et universalscript til dette:

<script type="text/javascript>
  function  nyside(){
  setTimeout('stilom()',3000)
}
function stilom(){
  window.location.replace("[sti]nyside.htm")
}
</script>

Dette script kan du bruge i både den ene og den anden situation – altså både når du vil stille om med forsinkelse og når du vil stille om øjeblikkeligt.

Hvis du vil stille om med forsinkelse, anvender du scriptet via BODY-markøren:

  <body onload="nyside()">

hvor funktionen nyside() efter 3 sekunders forløb udløser funktionen stilom(). Du kan naturligvis regulere på antallet af sekunder ved at ændre på tallet 3000, der angiver hvor mange millisekunder, der skal gå.

Vil du stille om øjeblikkeligt, anvender du funktion stilom():

  <body onload="stilom()">

Den JavaScript metode, vi bruger her, kender du (næsten) fra andre eksempler, hvor vi har set på:

  window.location="nyside.htm"
  window.location.href="/nyside.htm"
  location="nyside.htm"
  location.href="/nyside.htm"
  document.url="nyside.htm"

Det er alle eksempler på gyldige JavaScript metoder til at indlæse en ny side i browseren. Så hvorfor bruge en anden metode – window.location.replace – her?

Ny side eller erstatningsside?

Når en ny side indlæses i browseren ved hjælp af de sædvanlige standardmetoder, bliver denne nye side den aktuelle side i browserens historik, og den side, hvor omdirigeringen finder sted, bliver den næstøverste i historikken.

Hvis den nye side nu ikke er, hvad brugeren forventer, og hun derfor bruger sin "Tilbage"-knap for at komme tilbage til den side, hun troede hun kom fra, kommer hun jo tilbage til den side, der stiller hende om. Hvad den selvfølgelig så gør igen.

Vi har altså låst brugeren fast på nyside.htm.

I modsætning til window.location, der indlæser en ny side, gør window.location.replace det, at den erstatter den side, hvor linket er. Denne omdirigeringsside optræder altså ikke i historikken, og browserens tilbage-knap stiller korrekt tilbage, ikke til den side, hvorfra vi omdirigerer, men til den side, som brugeren opfatter som den foregående side.

Voila! Brugervenlig omdirigering.

window.location.replace er kun til brug i omdirigeringssituationer (inklusive omdirigering i forbindelse med browser sniffing).

Bruger du metoden til ordinære omstillinger i en almindelig kæde af links, vil du forhindre, at brugerens browser kan registrere, hvilke sider der har været indlæst.

I sjældne tilfælde kan det være per design, at dette ønskes, og så har du altså metoden her.

Et simplere script

Den simplest tænkelige JavaScript omdirigering får du ved følgende udformning af body-markøren:

<body onload="redir('[sti]nyside.html')">

Der kalder funktionen redir() med den nye side som parameter:

<script type="text/javascript">
  function redir(url) {
  	window.location.replace(url)
  }
</script>

Eller, for at gøre det ultimativt simpelt:

<body onload="location.replace
-->  ('[sti]nyside.html')">

- der i realiteten er alt hvad du behøver.

Denne side er senest opdateret: 26. June, 2008